1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
--------------------------------\*/
#include<reg52.h> #include <I2C.H> #define uchar unsigned char #define uint unsigned int
#define PCF8591 0x90 //PCF8591 地址
unsigned char code tab[]= {0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f }; unsigned char code graph[11][8]= { {0x0,0x18,0x24,0x24,0x24,0x24,0x24,0x18},//0 {0x0,0x8,0x18,0x8,0x8,0x8,0x8,0x8},//1 {0x0,0x18,0x24,0x24,0x8,0x10,0x20,0x3C},//2 {0x0,0x18,0x24,0x4,0x8,0x24,0x24,0x18},//3 {0x0,0x8,0x8,0x18,0x28,0x3C,0x8,0x8},//4 {0x0,0x3C,0x20,0x38,0x4,0x4,0x24,0x18},//5 {0x0,0x18,0x24,0x20,0x38,0x24,0x24,0x18},//6 {0x0,0x3C,0x24,0x4,0x8,0x10,0x10,0x10},//7 {0x0,0x18,0x24,0x24,0x18,0x24,0x24,0x18},//8 {0x0,0x18,0x24,0x24,0x1C,0x4,0x24,0x18},//9 {0x4C,0xD2,0x52,0x52,0x52,0x52,0x52,0xEC},//10 };
unsigned char count; unsigned char cnta;
unsigned char AD_CHANNEL; unsigned int D[4];
void delay11(unsigned int cnt) { while(--cnt); }
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* ADC发送字节[命令]数据函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ bit ISendByte(unsigned char sla,unsigned char c) { Start\_I2c(); //启动总线 SendByte(sla); //发送器件地址 if(ack==0)return(0); SendByte(c); //发送数据 if(ack==0)return(0); Stop\_I2c(); //结束总线 return(1); }
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* ADC读字节数据函数 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ unsigned char IRcvByte(unsigned char sla) { unsigned char c;
Start\_I2c(); //启动总线 SendByte(sla+1); //发送器件地址 if(ack==0)return(0); c=RcvByte(); //读取数据0
Ack\_I2c(1); //发送非就答位 Stop\_I2c(); //结束总线 return(c); }
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ main() { unsigned char jj,kk,ll,bb,cc,dd; double Data; // double V; //转化成的电压值
while(1) { ISendByte(PCF8591,0x40); Data=IRcvByte(PCF8591); //ADC0 模数转换1 V=Data\*5/256; D[0]=V\*100;
for(bb=0; bb<10; bb++) { for(jj=0; jj<8; jj++) //共要扫描八行 { P1=graph[D[0]/100][jj]; //送字模数据 P2=tab[jj]; delay11(200); //选中第一行 P2=0xff; delay11(500); } delay11(500); }
for(bb=0; bb<10; bb++) { for(jj=0; jj<8; jj++) //共要扫描八行 { P1=0x06; P2=0x7f; delay11(500); P2=0xbf; delay11(500); } delay11(500); }
for(cc=0; cc<10; cc++) { for(kk=0; kk<8; kk++) //共要扫描八行 { P1=graph[D[0]%100/10][kk]; //送字模数据 P2=tab[kk]; delay11(200); //选中第一行 P2=0xff; delay11(500); } delay11(500); }
for(dd=0; dd<10; dd++) { for(ll=0; ll<8; ll++) //共要扫描八行 { P1=graph[D[0]%10][ll]; //送字模数据 P2=tab[ll]; delay11(200); //选中第一行 P2=0xff; delay11(500); } delay11(500); } } }
|