|
keil仿真一直顯示
8.C(39): warning C206: 'write_com': missing function-prototype
求助怎么修改程序
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit BEEP=P2^1;
- //sbit led=P1^0;
- //sbit led0=P1^1;
- //sbit led1=P1^2;
- sbit s0=P1^4;
- sbit s1=P1^5;
- sbit s2=P1^6;
- uchar code tab_0[]="Temp: ";
- uchar code tab_1[]="TH:23 TL:18 ";
- uchar TH,TL; // 定義高低溫度變量
- uchar num; //全局變量
- /********ms延時(非精確)**********/
- void delay(uint z)
- { uint i,j;
- for(i=z;i>0;i--)
- for(j=120;j>0;j--);
- }
- /*******TH、TL的溫度符號**********/
- //void fuhao()
- //void write_com()
- //void write_dat()
- // {
- // write_com(0x80+5);
- // write_dat(0xdf);
- //write_dat(0x43);
- // write_com(0x80+14);
- // write_dat(0xdf);
- // write_dat(0x43);
- //}
- /*************初始化**************/
- void init() {
- /***********上電顯示初始化**********/
- uchar i;
- TH=23;TL=18;
- write_com(0x80);
- for(i=0;i<16;i++)
- {
- write_dat(tab_1[i]);
- delay(5);
- }
- write_com(0x80+0x40);
- for(i=0;i<5;i++)
- {
- write_dat(tab_0[i]);
- delay(5);
- }
- //fuhao();
- /********定時器初始化*************/
- TMOD=0x01; //開定時器T0,方式1
- TH0=(65536-50000)/256; //裝入初值
- TL0=(65536-50000)%256; //
- EA=1; //開全局中斷
- ET0=1;
- TR0=1; //打開定時器
- }
- /**********報警函數(shù)**************/
- void bi(uint t)
- { int i,j;
- for(i=0;i<t;i++)
- {
- for(j=0;j<50;j++);
- BEEP=~BEEP; //按位取反BEEP
- }
- }
- /*******TH、TL取十位個位送人顯示***********/
- void writeT_HL(uchar add,uchar dat)
- { uchar shi,ge;
- shi=dat/10; //十位
- ge=dat%10; //個位
- write_com(0x80+add);
- write_dat(shi+0x30);
- write_dat(ge+0x30);
- }
- /*******按鍵函數(shù)********/
- void keyscan() {
- /**********功能選擇**********/
- if(s0==0)
- { num++;
- delay(2);
- if(s0==0)
- { // led=0;
- while(!s0);
- {bi(300);
- //led=1;
- }
- //按一下燈亮一下聲音響一聲
- if(num==1)
- {TR0=0;
- write_com(0x80+12);
- delay(10);
- }
- //
- write_com(0x0f);
- if(num==2)
- {write_com(0x80+4);}
- if(num==3)
- {num=0;
- TR0=1;
- }
- }
- }
- /*********功能加*********/
- if(num!=0)
- {
- if(s1==0)
- {
- delay(2);
- if(s1==0)
- {
- //led0=0;
- while(!s1);
- {bi(300);
- // led0=1;
- } //按一下燈亮一下聲音響一聲
- if(num==1)
- {TH++;
- if(TH==100)
- TH=0;
- writeT_HL(3,TH);
- write_com(0x80+4);}
- if(num==2)
- {TL++;
- if(TL==100)
- TL=0;
- writeT_HL(12,TL);
- write_com(0x80+10);}
- }
- }
- }
- /**********功能減************/
- if(num!=0)
- { if(s2==0)
- { delay(2);
- if(s2==0)
- { // led1=0;
- while(!s2);
- {bi(300);
- //led1=1;
- } //按一下燈亮一下聲音響一聲
- if(num==1)
- {TH--;
- if(TH==-1)
- TH=99;
- writeT_HL(3,TH);
- write_com(0x80+4);}
- if(num==2)
- {TL--;
- if(TL==-1)
- TL=99;
- writeT_HL(12,TL);
- write_com(0x80+10);}
- }
- }
- }
- }
- /*****溫度報警函數(shù)*******/
- void baojing()
- {
- uchar temp;
- temp=temp/10; //返回的溫度值temp放大了十倍,得除十還原
- if(TH<=temp)
- { bi(500);}
- if(TL>=temp)
- { bi(500);}
- }
- /***************主函數(shù)***************/
- void main(void) {
- Init_1602();
- init();
- while(1)
- { BEEP=0;
- keyscan();
- ds1820disp();
- baojing();
- }
- }
- /***********定時器中斷函數(shù)************/
- void time() interrupt 1 {
- TH0=(65536-50000)/256; //重裝初值
- TL0=(65536-50000)%256;
- }
- //DS1802驅(qū)動程序
- #ifndef __DS18B20_H__
- #define __DS18B20_H__
- #define uchar unsigned char
- #define uint unsigned int
- sbit DQ = P2^7;
- uchar tab[5];
- uint temp; //溫度值
- bit tflag;
- /**************** 延時1微秒**********/
- void delay_18B20(uint i)
- { while(i--); }
- /******************* ds1820復(fù)位************/
- void ds1820rst()
- { uchar x=0;
- DQ=1; //DQ復(fù)位
- delay_18B20(8); //延時
- DQ=0; //DQ拉低
- delay_18B20(80); //精確延時大于480us
- DQ=1; //拉高
- delay_18B20(14);
- x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
- while(!DQ);
- delay_18B20(20);
- }
- /******************** 讀一個字節(jié)********************/
- uchar ds1820rd()
- {
- uchar i=0;
- uchar dat=0;
- for (i=8;i>0;i--)
- {
- DQ=0; //給脈沖信號
- dat>>=1;
- DQ=1; //給脈沖信號
- if(DQ)
- dat|=0x80;
- delay_18B20(4);
- }
- return(dat);
- }
- /*************** 寫一個字節(jié)***************/
- void ds1820wr(uchar dat)
- { uchar i=0;
- for (i=8;i>0;i--)
- { DQ=0;
- DQ=dat&0x01;
- delay_18B20(5);
- DQ=1;
- dat>>=1;
- }
- }
- /****************讀取溫度 值并轉(zhuǎn)換***************/
- read_temp() {
- uchar a,b;
- ds1820rst();
- ds1820wr(0xcc);//跳過讀序列號
- ds1820wr(0x44);//啟動溫度轉(zhuǎn)換
- delay_18B20(100);
- ds1820rst();
- ds1820wr(0xcc);//跳過讀序列號
- ds1820wr(0xbe);//讀取溫度
- delay_18B20(100);
- a=ds1820rd();
- b=ds1820rd();
- temp=b;
- temp<<=8;
- temp=temp|a;
- if(temp<0x0fff)
- tflag=0;
- else
- { temp=~temp+1;
- tflag=1;
- }
- temp=temp*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù)
- return(temp);
- }
- /***************** 溫度值顯示****************/
- void ds1820disp()
- {
- uchar flagdat;
- read_temp();
- tab[0]=temp%1000/100+0x30; //十位數(shù)
- tab[1]=temp%100/10+0x30; //個位數(shù)
- tab[2]=temp%10+0x30; //小數(shù)位
- if(tflag==0)
- flagdat=0x20;//正溫度不顯示符號
- else
- flagdat=0x2d;//負(fù)溫度顯示負(fù)號:-
- if(tab[0]==0x30) { tab[0]=0x20; }//如果十位為0,不顯示
- write_com(0x80+0x40+6)
- write_dat(flagdat); //顯示正負(fù)
- write_dat(tab[0]); //顯示十位
- write_dat(tab[1]); //顯示個位
- write_dat(0x2e); //顯示小數(shù)點
- write_dat(tab[2]); //顯示小數(shù)位
- write_dat(0xdf); write_dat(0x43);
- }
- #endif
- // LCD1602驅(qū)動程序
- #ifndef __1602_H__
- #define __1602_H__
- #define uint unsigned int
- #define uchar unsigned char
- #define LCD P0
- sbit RS=P3^0;
- sbit RW=P3^1;
- sbit EN=P3^2;
- void delayms(uint z);
- void Init_1602(void);
- void check_busy(void);
- void write_com(uchar com);
- void write_dat(uchar dat);
- /********************延時z毫秒****************/
- void delayms(uint z)
- {
- int i,j;
- for(i=z;i>0;i--)
- for(j=120;j>0;j--);
- }
- /******************** 1cd1602初始化******************/
- void Init_1602(void)
- { delayms(15);
- write_com(0x38);
- delayms(5);
- write_com(0x0c);
- delayms(5);
- write_com(0x06);
- delayms(5);
- write_com(0x01);
- delayms(5);
- write_com(0x80);
- delayms(5);
- }
- /************************** 將數(shù)據(jù)二進(jìn)制高地位對換 (為了連線方便但片機(jī)P0口 與lcd1602數(shù)據(jù)口反接) ****************************/ uchar HL_exchange(uchar dat)
- {
- uchar i,temp;
- temp = 0x00;
- for(i=0;i<8;i++)
- {
- temp >>= 1;
- if((dat<<i)&0x80)
- {
- temp |= 0x80; }
- else {
- temp &= 0x7F; } }
- return temp; }
- /**********讀忙*****************/
- void check_busy(void)
- { uchar x;
- x=HL_exchange(0x80);
- while(x&HL_exchange(0x80))
- { RS=0;
- RW=1;
- EN=1;
- x=LCD;
- EN=0;
- delayms(10);
- }
- }
- /**************寫指令**************/
- void write_com(uchar com)
- { check_busy();
- RS=0;
- RW=0;
- EN=1;
- LCD=0XFF;
- LCD=HL_exchange(com);
- EN=0; delayms(10);
- }
- /**************寫數(shù)據(jù)**************/
- void write_dat(uchar dat)
- { check_busy();
- RS=1;
- RW=0;
- EN=1;
- LCD=0XFF;
- LCD=HL_exchange(dat);
- EN=0;
- delayms(10); }
- #endif
復(fù)制代碼 |
|