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
| //#include <reg51.h> #include <AT89X52.H> #include "temp.h" sbit DULA=P2^0; sbit WELA=P2^1; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//光阴数码管断码 uchar DisplayData[8];
void DigDisplay();
//温度各位提取 void datapros(int temp) { // float tp; bit negative;//负数标志 int TempH,TempL; if(temp&0x8000) { negative=1; temp=~temp; //取反加1 temp +=1; } else negative=0;
TempH=temp>>4; //分解出整数 TempL=temp&0x0F; //分解出小数 TempL=TempL\*6/10; //保留一位小数 temp=(TempH|TempL)\*10; if(negative==1) DisplayData[0]=0x40;//显示负号 else if(TempH/100==0)//小于100 DisplayData[0]=0x00; DisplayData[1]=table[temp/1000%10];//百位 DisplayData[2]=table[temp/100%10];//十位 DisplayData[3]=table[temp/10%10]|0x80;//个位 DisplayData[4]=table[temp%10];//十分位 } //数码管显示 void DigDisplay() { static uchar i=0; P0=0x00; DULA=1; DULA=0; switch(i) { case 0: P0=0xfe; break; case 1: P0=0Xfd; break; case 2: P0=0Xfb; break; case 3: P0=0Xf7; break; case 4: P0=0Xef; break; } WELA=1; WELA=0; P0=DisplayData[i]; DULA=1; DULA=0; i++; i%=5; }
void main() { while(1) { datapros(Ds18b20ReadTemp()); DigDisplay(); } }
|