完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
用1602显示18b20的温度数字,可是数字一直在闪动,且没有变化,另外,想再其他位显示一些固定的信息,怎么实现啊啊啊 啊?急求,十分感谢!下面是小弟的程序,不知错在哪里了。。。 #include #include #define uchar unsigned char #define uint unsigned int void delay(uint z); void write(uchar date); void readtemp(); void display(); void init(); void writecom(uchar com); void writedate(uchar da); void zhunbei(); void lcd_pos(uchar pos); ***it DQ=P3^3; ***it rs=P2^0; ***it rw=P2^1; ***it E=P2^2; uint h,num; uchar flag,time,TN,TD,TH,TL,x=22,s=25; uchar ss,sg,xs,xg; uchar code shu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; uchar code wendu[]={"Wendu: ." }; bit lcd_busy() { bit result ; rs = 0 ; rw = 1 ; E = 1 ; delay(5) ; result = (bit)(P0&0x80) ; E= 0 ; return(result) ; } /****初始化函数***/ reset(void) { flag=1; while(flag) { while(flag) { DQ=1; _nop_(); _nop_(); DQ=0; for(time=0;time<200;time++); DQ=1; for(time=0;time<20;time++); flag=DQ; } for(time=0;time<200;time++); flag=~DQ; } DQ=1; return(flag) ; //返回信号,0=presence,1= no presence } /****写函数****/ void write(uchar date) { uchar i; for(i=0;i<8;i++) { DQ=1; _nop_(); DQ=0; DQ=date&0x01; for(time=0;time<10;time++); DQ=1; for(time=0;time<1;time++); date>>=1; } for(time=0;time<4;time++); } /******读函数******/ uchar read(void) { uchar j=0; uchar value; for(j=8;j>0;j--) { DQ=1; _nop_(); DQ=0; _nop_(); DQ=1; for(time=0;time<3;time++); value>>=1; if(DQ==1) value|=0x80; else value|=0x00; for(time=0;time<20;time++); } return(value); } /*******读取温度****/ void readtemp() { reset(); write(0xcc) ; write(0x44); reset(); write(0xcc); write(0xbe); TL=read(); TH=read(); } /**1602****/ void lcd_pos(uchar pos) { writecom(pos | 0x80) ; //数据指针=80+地址变量 } /****写指令*****/ void writecom(uchar com) { while(lcd_busy()) ; rs=0; rw=0; E=0; P0=com; delay(5); E=1; delay(5); E=0; } /*****写数据*****/ void writedate(uchar da) { rs=1; rw=0; E=0; P0=da; delay(5); E=1; delay(5); E=0; } void init() { E=0; writecom(0x38); writecom(0x0e); writecom(0x06); writecom(0x01); writecom(0x80); } /******温度显示********/ void display() { uchar TNS,TNG; TNS=TN/10; TNG=TN%10; ss=s/10; //十位 sg=s%10; //各位 xs=x/10; //小数点后第一位 xg=x%10; //小数点后第二位 init(); lcd_pos(0x06); writedate(shu[ss]); lcd_pos(0x07); writedate(shu[sg]); lcd_pos(0x09); writedate(shu[xs]); lcd_pos(0x10); writedate(shu[xg]); } void zhunbei() { init(); num=0; while(wendu[num]!=' |