完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include #include #include #define uchar unsigned char #define uint unsigned int static uchar th,tl,b,c,d,f,j; uint a, temp; ***it morehigh=P1^0 ; ***it high=P1^1 ; ***it low=P1^2 ; ***it morelow=P1^3 ; ***it R=P2^3; ***it lcdrs=P2^0; ***it lcdrw=P2^1; ***it lcden=P2^2; ***it speak=P2^5; ***it di=P2^4; ***it close=P2^6; ***it open=P2^7; unsigned char time ; void rotate(); unsigned char code table[]={"0123456789.:'C"}; unsigned char code table1[]={"temp:"}; unsigned char code table2[]={"the angular is "}; unsigned char code error[]={" error!"}; void delay1us(unsigned char x) { uint i; x*=5/4; for(i=0;i void delay1ms() { unsigned int x,y; for(x=0;x<10;x++) for(y=33;y>0;y--); } void delay(unsigned int z) { unsigned char x; for(x=z;x>0;x--) delay1ms();} void change(); void write_com(unsigned char com) { lcdrs=0; SBUF=com; // 原来并行通信时, 这条 是 P1=com; // P1=com; while(TI==0);TI=0; // 这条 是我改过的, 原来并行通信时,这条 是没有的 delay(5); lcden=1; delay(5); lcden=0; } void write_data(unsigned char dat) { lcdrs=1; SBUF=dat; // 原来并行通信时, 这条 是 P1=com; while(TI==0);TI=0; // 这条 是我改过的, 原来并行通信时,这条 是没有的 delay(5); lcden=1; delay(5); lcden=0; } void init(void) { lcden=0; lcdrw=0; write_com(0x01); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x80); } /*DS18b20操作program*/ bit datayn(void) //初始化设置 { bit flag; di=1; for(time=0;time<2;time++); di=0; for(time=0;time<200;time++); di=1; for(time=0;time<10;time++); flag=di; for(time=0;time<100;time++); di=1; for(time=0;time<10;time++); return(flag) ; } void Delayxus_DS18B20(unsigned int t) { for(t;t>0;t--) { _nop_();_nop_();_nop_();_nop_(); } _nop_(); _nop_(); } unsigned char Read_Bit() { unsigned char ret; di=0;//拉低总线 _nop_(); _nop_(); di=1;//释放总线 // _nop_(); _nop_(); // _nop_(); _nop_(); ret=di;//读时隙产生7 us后读取总线数据。把总线的读取动作放在15us时间限制的后面是为了保证数据读取的有效性 Delayxus_DS18B20(3);//延时60us,满足读时隙的时间长度要求 di=1;//释放总线 return ret; //返回读取到的数据 } uchar read_onechar(void) { unsigned char i; unsigned char dat=0; for(i=0;i<8;i++) { dat>>=1; //先读最低位 if(Read_Bit()) dat|=0x80; } return(dat); } void write_onechar(uchar dat) { uchar i,time; di=1; _nop_();_nop_(); for(i=0;i<8;i++) { di=0; // delay1us(2); //for(time=0;time<4;time++); di=dat&0x01; delay1us(20); // for(time=0;time<10;time++); di=1; _nop_(); //_nop_(); dat>>=1; } for(time=0;time<2;time++); } void display(void) { unsigned int i=0; write_com(0x80); if(datayn()==1) { while(error[i]!=' |