|
給你改好了,仿真和程序的LCD用的是P0,你自己改回P1
無標(biāo)題.jpg (171.49 KB, 下載次數(shù): 17)
下載附件
2019-4-20 15:56 上傳
- #include <reg52.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DS=P3^5; //溫度傳感器
- sbit beep=P3^7;
- sbit rs=P2^4; //控制發(fā)光二極管
- sbit rw=P2^3;
- sbit lcde=P2^2;
- uchar tp,tpx,num,count,miao,fen,shi;
- uchar code table[]= "happy everyday! ";
- uchar code table1[]=": :";
- uchar code table2[]="weather:cold ";
- uchar code table3[]="weather:hot ";
- void delay_us(uchar us)//約2us延時函數(shù)
- {
- while(--us);
- }
- void delay(uchar z)//約1ms延時函數(shù)
- {
- while(z--)
- {
- delay_us(245);
- delay_us(245);
- }
- }
- //讀一個字節(jié)
- uchar read_byte()
- {
- uchar i,dat;
- for(i=0;i<8;i++)
- {
- DS=0;
- dat>>=1;
- DS=1;
- if(DS)
- dat|=0x80;
- delay_us(25);
- }
- return (dat);
- }
- //寫一個字節(jié)
- void write_byte(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- DS=0;
- DS=dat&0x01;
- delay_us(25);//延時
- DS=1;//釋放總線準(zhǔn)備下一次數(shù)據(jù)的寫入
- dat>>=1;
- }
- }
- //單總線初始化時序
- bit ds_init()
- {
- bit i;
- DS=1;
- delay_us(5);
- DS=0;
- delay_us(200);//拉低總線499.45us,總線上的溫度傳感器將會被全部復(fù)位
- delay_us(200);
- DS=1;//釋放總線
- delay_us(50);//延時37.95us,等待溫度傳感器發(fā)回存在信號
- i=DS;
- delay_us(25);//延時141.95us,讀取溫度傳感器存在的時間
- return (i);
- }
- uint ReadTemperature()
- {
- uint H,i;
- uchar L;
- ds_init();//初始化溫度傳感器
- write_byte(0xcc);//發(fā)送跳躍ROM指令
- write_byte(0x44);//發(fā)送溫度轉(zhuǎn)換指令
- delay(10);
- ds_init();//初始化溫度傳感器
- write_byte(0xcc);//發(fā)送跳躍ROM指令
- write_byte(0xbe);//讀取溫度傳感器暫存器的值
- L=read_byte();
- H=read_byte();
- H<<=8;
- i=L+H;
- return(i);
- }
-
- void writecom(uchar com)
- {
- rs=0;
- rw=0;
- lcde=0;
- delay(5);
- lcde=0;
- P0=com;
- delay(5);
- lcde=1;
- delay(5);
- lcde=0;
- }
- void writedate(uchar date)
- {
- rs=1;
- rw=0;
- delay(5);
- lcde=0;
- P0=date;
- delay(5);
- lcde=1;
- delay(5);
- lcde=0;
- }
- void wendudisplay()//顯示溫度數(shù)值函數(shù),t傳遞的是整型的溫度值
- {
- uint tp,tpz;
- uchar tpshi,tpge,tpxiao;
- tp=ReadTemperature();
- if(tp>0x0630 || (tp&0x8000)>0)//限制在0~99范圍
- tp=0;
- tpz=tp>>4; //分解為整數(shù);
- tpxiao=tp&0x0f;//分解為小數(shù)
- tpxiao=tpxiao*6/10;//保留一位小數(shù)
- /*
- tp2=tp&0x000f;
- tpxiao=tp2*0.0625;
- tpz=(tp&0x0ff0)>>4;
- tpz=tpz*0.0625;
- */
- tpshi=tpz/10;
- tpge=tpz%10;
- writecom(0x80+0x40+10);
- writedate(tpshi+0x30);
- writedate(tpge+0x30);
- writedate('.') ;
- writedate(tpxiao+0x30);
- writedate(0xdf);
- writedate('C');
- if(tpz<15)
- {
- writecom(0x80);
- for(num=0;num<16;num++)
- {
- writedate(table2[num]);
- delay(5);
- beep=0;
- }
- }
- if((tpz<25)&&(tpz>=15))
- {
- writecom(0x80);
- for(num=0;num<16;num++)
- {
- writedate(table[num]);
- delay(5);
- beep=1;
- }
- }
- if(tpz>25)
- {
- writecom(0x80);
- for(num=0;num<16;num++)
- {
- writedate(table3[num]);
- delay(5);
- }
- }
- }
- void writesfm(uchar add,uchar date)
- {
- uchar shi,ge;
- shi=date/10;
- ge=date%10;
- writecom(0x80+0x40+add);
- writedate(0x30+shi);
- writedate(0x30+ge);
- writecom(0x80+0x40+add);
- }
- void init()
- {
- lcde=0;
- writecom(0x38);
- writecom(0x0c);
- writecom(0x06);
- writecom(0x01);
- delay(5);
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- miao=15;
- fen=12;
- shi=12;
- }
- void main()
- {
- init();
- writecom(0x80+0x40+2);
- writedate(':');
- writecom(0x80+0x40+5);
- writedate(':');
- while(1)
- {
- wendudisplay();
- writesfm(0,shi);
- writesfm(3,fen);
- writesfm(6,miao);
- // writecom(0x80+0x40+2);
- // writedate(':');
- // writecom(0x80+0x40+5);
- // writedate(':');
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20)
- {
- count=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- shi++;
- fen=0;
- if(shi==24)
- shi=0;
- }
- }
- }
- }
復(fù)制代碼
|
|