|
本帖最后由 51黑電子會(huì)員 于 2020-4-24 22:28 編輯
- #include<reg52.h>//包含51單片機(jī)內(nèi)部寄存器頭文件
- #define uchar unsigned char // 自定義uchar為unsigned char(即無(wú)符號(hào)字符型數(shù)據(jù),數(shù)據(jù)范圍:0到255。)
- #define uint unsigned int//自定義uint為unsigned int(即無(wú)符號(hào)字符整數(shù)型數(shù)據(jù),數(shù)據(jù)范圍:0到6355。)
- sbit RS=P0^7;//位定義LCD1602字符型液晶顯示器的數(shù)據(jù)/命令選擇引腳
- sbit RW=P0^6;//位定義LCD1602字符型液晶顯示器的讀寫(xiě)引腳
- sbit EN=P0^5; //位定義LCD1602字符型液晶顯示器的使能引腳
- sbit DQ=P1^6;//位定義DS18B20數(shù)據(jù)端口
- sbit S=P3^7;//設(shè)時(shí)按鍵S
- sbit S0=P3^6;//設(shè)溫按鍵S0
- sbit S1=P3^5;//調(diào)時(shí)按鍵S1
- sbit S2=P3^4;//增加按鍵S2
- sbit S3=P3^3;//減少按鍵S3
- sbit S4=P3^2;//啟停按鍵S4
- sbit FengNingQi=P3^1;//位定義蜂鳴器口
- uchar count,Snum,S0num,S1num,S4num,S2numflag,S3numflag,TR0flag,setsecondflag,setminutanflag,sethourflag,miaoflag,fenflag,shiflag,settemperatureflag;//定時(shí)器0中斷次數(shù)變量、設(shè)時(shí)按鍵S按鍵按下次數(shù)變量、設(shè)溫按鍵S0按鍵按下次數(shù)變量、調(diào)時(shí)按鍵S1按下次數(shù)變量、啟停按鍵S4按下次數(shù)標(biāo)志位變量、增加鍵標(biāo)志位變量、減少鍵標(biāo)志位變量、定時(shí)器0標(biāo)志位變量、設(shè)時(shí)秒鐘標(biāo)志位變量、設(shè)時(shí)分鐘標(biāo)志位變量、設(shè)時(shí)時(shí)鐘標(biāo)志位變量、秒鐘標(biāo)志位變量、分鐘標(biāo)志位變量、時(shí)鐘標(biāo)志位變量、設(shè)溫標(biāo)志位變量、
- uchar sethour,setminutan,setsecond;//設(shè)時(shí)時(shí)鐘變量、設(shè)時(shí)分鐘變量
- uchar setsecondge,setsecondshi;//設(shè)時(shí)秒鐘個(gè)位變量、設(shè)時(shí)秒鐘十位變量
- uchar setminutange,setminutanshi;//設(shè)時(shí)分鐘個(gè)位變量、設(shè)時(shí)分鐘十位變量
- uchar sethourge,sethourshi;//設(shè)時(shí)時(shí)鐘個(gè)位變量、設(shè)時(shí)時(shí)鐘十位變量
- uchar shi,fen,miao;//時(shí)鐘變量、分鐘變量、秒鐘變量
- uchar secondge,secondshi; //秒鐘個(gè)位變量、秒鐘十位變量
- uchar minutange,minutanshi;//分鐘個(gè)位變量、分鐘十位變量
- uchar hourge,hourshi;//時(shí)鐘個(gè)位變量、時(shí)鐘十位變量
- uchar qitingflag,temperaturedisplayflag,lcd1602displaytimeflag,settimedisplayflag,settemperaturedisplayflag,tiaotimedisplayflag,timebaojingflag,temperatruebaojingflag;//啟停鍵標(biāo)志位變量、溫度顯示標(biāo)志位變量、液晶顯示器顯示時(shí)間標(biāo)志位變量、設(shè)時(shí)顯示標(biāo)志位變量、設(shè)溫顯示標(biāo)志位變量、調(diào)時(shí)顯示標(biāo)志位變量、時(shí)間報(bào)警標(biāo)志位變量、溫度報(bào)警標(biāo)志位變量
- uint temperature,t;//讀溫度值變量
- uint temperatureflag;//負(fù)溫度標(biāo)志位變量
- uint wendu,wendubai,wendushi,wenduge,xiaoshudian,wenduxiaoshu,fuhaowei,setwendu,setwendubai,setwendushi,setwenduge,setwenduxiaoshu,settemperature;//溫度值變量、溫度百位變量、溫度十位變量、溫度個(gè)位變量、小數(shù)點(diǎn)變量、小數(shù)變量、符號(hào)位變量、設(shè)溫變量、設(shè)溫百位變量、設(shè)溫十位變量、設(shè)溫個(gè)位變量、設(shè)溫小數(shù)變量、設(shè)溫變量
- //uchar table0[]="00:00:00";//LCD1602第一行初始顯示
- uchar table1[]="00:00:00";//LCD1602第二行初始顯示
- void Delay(uint z)//延時(shí)程序
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void WriteCommand(uchar command)//LCD1602字符型液晶顯示器寫(xiě)指令函數(shù)
- {
- RS=0;//LCD1602字符型液晶顯示器指令寄存器低電平
- RW=0;//LCD1602字符型液晶顯示器寫(xiě)指令操作低電平
- P2=command;//LCD1602字符型液晶顯示器寫(xiě)指令函數(shù)寫(xiě)指令到單片機(jī)P2組端口,再輸送到LCD1602字符型液晶顯示器指令寄存器中執(zhí)行。
- Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
- EN=1;//LCD1602字符型液晶顯示器使能端高電平
- Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
- EN=0;//LCD1602字符型液晶顯示器使能端低電平
- }
- void WriteData(uchar information)//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)函數(shù)
- {
- RS=1;//LCD1602字符型液晶顯示器數(shù)據(jù)寄存器高電平
- RW=0;//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)操作低電平
- P2=information;//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)函數(shù)寫(xiě)數(shù)據(jù)到單片機(jī)P2組端口,再輸送到LCD1602字符型液晶顯示器上顯示。
- Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
- EN=1;//LCD1602字符型液晶顯示器使能端高電平
- Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
- EN=0;//LCD1602字符型液晶顯示器使能端低電平
- }
- void LCD1602Init()//LCD1602初始化函數(shù)
- {
- WriteCommand(0x38);//設(shè)置LCD1602字符型液晶顯示器16x2顯示,5*7或5*8點(diǎn)陣,8位數(shù)據(jù)并口,簡(jiǎn)稱顯模。
- WriteCommand(0x08);//設(shè)置LCD1602字符型液晶顯示器顯示開(kāi),簡(jiǎn)稱亮屏。
- WriteCommand(0x01);//設(shè)置清除LCD1602字符型液晶顯示器屏上所有內(nèi)容,并讓光標(biāo)復(fù)位到LCD1602字符型液晶顯示器屏左上角,簡(jiǎn)稱清屏。
- WriteCommand(0x06);//設(shè)置開(kāi)光標(biāo)(或字符)地址指針自增1,光標(biāo)右移動(dòng)一個(gè)字符位,整屏顯示不移動(dòng)。
- WriteCommand(0x0c);//設(shè)置開(kāi)LCD1602字符型液晶顯示器顯示,關(guān)光標(biāo),關(guān)光標(biāo)(字符)閃爍。
- }
- void Timer0Init()//定時(shí)器0初始化函數(shù)
- {
- TMOD=0x01;//設(shè)定定時(shí)器0工作模式為模式1
- TH0=(65536-50000)/256;//TH0裝初值
- TL0=(65536-50000)%256;//TL0裝初值
- EA=1;//開(kāi)啟定時(shí)器總中斷
- ET0=1;//開(kāi)啟定時(shí)器0中斷開(kāi)關(guān)
- TR0=0;//啟動(dòng)定時(shí)器0
- }
- void LCD1602Display()//LCD1602字符型液晶顯示器顯示函數(shù)
- {
- uchar j;//j表示數(shù)組元素個(gè)數(shù)變量
- // WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第一個(gè)位置顯示
- // for(j=0;j<8;j++)//有10個(gè)字符,要循環(huán)10次。
- // {
- // WriteData(table0[j]);//顯示字符串
- // Delay(5);
- // }
- WriteCommand(0x80+0x40);//LCD1602字符型液晶顯示器第二行第一個(gè)位置顯示
- for(j=0;j<8;j++)//有8個(gè)字符,要循環(huán)8次。
- {
- WriteData(table1[j]);//顯示字符串
- Delay(5);
- }
- }
- void LCD1602DisplayTime(uchar address,uchar num)//LCD1602顯示時(shí)間兩位數(shù)分解函數(shù)
- {
- uchar shi,ge;//十位、個(gè)位的變量
- shi=num/10;//十位數(shù)
- ge=num%10;//個(gè)位數(shù)
- WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
- WriteData(0x30+shi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示十位可顯示0到9的數(shù)字。
- WriteData(0x30+ge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示個(gè)位可顯示0到9的數(shù)字。
- }
- void LCD1602DisplayGeDigitResolve(uchar address,uchar num)//LCD1602字符型液晶顯示器顯示修改時(shí)間個(gè)位數(shù)分解函數(shù)
- {
- uchar ge;//個(gè)位的變量
- ge=num%10;//個(gè)位數(shù)
- WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
- WriteData(0x30+ge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示個(gè)位可顯示0到9的數(shù)字。
- }
- void LCD1602DisplayShiDigitResolve(uchar address,uchar num)//LCD1602字符型液晶顯示器修改時(shí)間十位數(shù)分解函數(shù)
- {
- uchar shi;//十位變量
- shi=num%10;//十位數(shù)
- WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
- WriteData(0x30+shi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示十位可顯示0到9的數(shù)字。
- }
- void SetTimeKeyScan()//設(shè)時(shí)按鍵掃描函數(shù)
- {
- if(S==0)//判斷設(shè)時(shí)按鍵S是否按下
- {
- Delay(5);//延時(shí)
- if(S==0)//再次判斷設(shè)時(shí)按鍵S是否按下
- {
- settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,溫度報(bào)警函數(shù)里邊余留settemperatureflag==1和TR0=1,當(dāng)操作設(shè)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)時(shí)按鍵掃描函數(shù)里邊添加settemperatureflag=0和TR0=0,執(zhí)行設(shè)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1和TR0=1被置換成settemperatureflag=0和TR0=0,很好地解決了在操作設(shè)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題。
- Snum++;//設(shè)時(shí)按鍵S按鍵次數(shù)變量先賦值再自加
- while(!S);//等待設(shè)時(shí)按鍵S彈起
- switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)時(shí)按鍵S按鍵第一次按下
- TR0=0;//關(guān)定時(shí)器0
- TR0flag=0;//定時(shí)器0標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留TR0flag==1,當(dāng)再次操作設(shè)時(shí)按鍵掃描函數(shù)設(shè)時(shí)時(shí),會(huì)發(fā)生在設(shè)時(shí)過(guò)程中觸發(fā)設(shè)時(shí)報(bào)警條件而報(bào)警,因此在設(shè)時(shí)按鍵掃描函數(shù)里邊添加TR0flag=0,再次執(zhí)行設(shè)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊TR0flag==1被置換成TR0flag=0,很好地解決了再次操作設(shè)時(shí)按鍵掃描函數(shù)設(shè)時(shí)時(shí),在設(shè)時(shí)過(guò)程中觸發(fā)設(shè)時(shí)報(bào)警條件而報(bào)警的問(wèn)題。
- tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不能操作調(diào)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)溫按鍵掃描函數(shù)。
- lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
- temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
- WriteCommand(0x80+0x00+0x07);//LCD1602字符型液晶顯示器第一行第7個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 2://設(shè)時(shí)按鍵S按鍵第二次按下
- WriteCommand(0x80+0x00+0x06);//LCD1602字符型液晶顯示器第一行第6個(gè)(從第0開(kāi)始數(shù))個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 3://設(shè)時(shí)按鍵S按鍵第三次按下
- WriteCommand(0x80+0x00+0x04);//LCD1602字符型液晶顯示器第一行第4個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 4://設(shè)時(shí)按鍵S按鍵第四次按下
- WriteCommand(0x80+0x00+0x03);//LCD1602字符型液晶顯示器第一行第3個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 5://設(shè)時(shí)按鍵S按鍵第五次按下
- WriteCommand(0x80+0x00+0x01);//LCD1602字符型液晶顯示器第一行第1個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 6://設(shè)時(shí)按鍵S按鍵第六次按下
- WriteCommand(0x80+0x00+0x00);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 7://設(shè)時(shí)按鍵S按鍵第七次按下
- WriteCommand(0x80+0x00+0x07);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
- TR0=1;//開(kāi)定時(shí)器0
- TR0flag=1;//定時(shí)器0標(biāo)志位變量置1,為了在操作設(shè)時(shí)按鍵掃描函數(shù)進(jìn)行設(shè)時(shí)后,可以執(zhí)行時(shí)間報(bào)警函數(shù)。
- Snum=0;//設(shè)時(shí)按鍵S按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)溫按鍵掃描函數(shù)執(zhí)行。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
- break;
- default:
- S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
- break;
- }
- }
- }
- if(Snum!=0)//判斷設(shè)時(shí)按鍵S按鍵按下次數(shù)變量是否為0
- {
- if(S2==0)//判斷增加按鍵S2是否按下
- {
- Delay(5);//延時(shí)
- if(S2==0)//再次判斷增加按鍵S2是否按下
- {
- S2numflag=1;//增加鍵標(biāo)志位變量置1,可以在時(shí)間報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)時(shí)報(bào)警。
- while(!S2);//等待增加按鍵S2彈起
- switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)時(shí)按鍵S按鍵第一次按下
- setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
- setsecondge++;//設(shè)時(shí)秒鐘個(gè)位變量先賦值再加加
- if(setsecondge==10)//判斷設(shè)時(shí)秒鐘個(gè)位變量設(shè)定值是否達(dá)到10
- setsecondge=0;//設(shè)時(shí)秒鐘個(gè)位變量歸零
- WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
- WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
- setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
- break;
- case 2://設(shè)時(shí)按鍵S按鍵第二次按下
- setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
- setsecondshi++;//設(shè)時(shí)秒鐘十位變量先賦值再加加
- if(setsecondshi==6)//判斷設(shè)時(shí)秒鐘十位變量設(shè)定值是否達(dá)到6
- setsecondshi=0;//設(shè)時(shí)秒鐘十位變量數(shù)歸零
- WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
- WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位變量變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
- setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
- break;
- case 3://設(shè)時(shí)按鍵S按鍵第三次按下
- setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
- setminutange++;//設(shè)時(shí)分鐘個(gè)位變量先賦值再加加
- if(setminutange==10)//判斷設(shè)時(shí)分鐘個(gè)位變量設(shè)定值是否達(dá)到10
- setminutange=0;//設(shè)時(shí)分鐘個(gè)位變量歸零
- WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
- WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
- setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
- break;
- case 4://設(shè)時(shí)按鍵S按鍵第四次按下
- setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
- setminutanshi++;//設(shè)時(shí)分鐘十位變量先賦值再加加
- if(setminutanshi==6)//判斷設(shè)時(shí)分鐘十位變量設(shè)定值是否達(dá)到6
- setminutanshi=0;//設(shè)時(shí)分鐘十位變量歸零
- WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
- WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
- setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
- break;
- case 5://設(shè)時(shí)按鍵S按鍵第五次按下
- sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
- sethourge++;//設(shè)時(shí)時(shí)鐘個(gè)位變量先賦值再加加
- if(sethourge==4)//判斷設(shè)時(shí)時(shí)鐘個(gè)位變量設(shè)定值是否達(dá)到4
- sethourge=0;//設(shè)時(shí)時(shí)鐘個(gè)位變量歸零
- WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
- WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
- sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
- break;
- case 6://設(shè)時(shí)按鍵S按鍵第六次按下
- sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
- sethourshi++;//設(shè)時(shí)時(shí)鐘十位變量先賦值再加加
- if(sethourshi==3)//判斷設(shè)時(shí)時(shí)鐘十位設(shè)定值是否達(dá)到3
- sethourshi=0;//設(shè)時(shí)時(shí)鐘十位歸零
- WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
- WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
- sethour=sethourshi*10+sethourshi;//設(shè)時(shí)時(shí)鐘變量求值
- break;
- }
- }
- }
- }
- if(Snum!=0)//判斷設(shè)時(shí)按鍵S按鍵按下次數(shù)變量是否為0
- {
- if(S3==0)//判斷減少按鍵S3是否按下
- {
- Delay(5);//延時(shí)
- if(S3==0)//再次判斷減少按鍵S3是否按下
- {
- S3numflag=1;//減少鍵標(biāo)志位變量,可以在時(shí)間報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)時(shí)報(bào)警。
- while(!S3);//等待減少按鍵S3彈起
- switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)時(shí)按鍵S按鍵第一次按下
- setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
- setsecondge--;//設(shè)時(shí)秒鐘個(gè)位變量先賦值再減減
- if(setsecondge==-1)//判斷設(shè)時(shí)秒鐘個(gè)位變量設(shè)定值是否達(dá)到-1
- setsecondge=9;//設(shè)時(shí)秒鐘個(gè)位變量置9
- WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
- WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
- setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
- break;
- case 2://設(shè)時(shí)按鍵S按鍵第二次按下
- setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
- setsecondshi--;//設(shè)時(shí)秒鐘十位變量先賦值再減減
- if(setsecondshi==-1)//判斷設(shè)時(shí)秒鐘十位變量設(shè)定值是否達(dá)到-1
- setsecondshi=5;//設(shè)時(shí)秒鐘十位變量數(shù)置5
- WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
- WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位變量變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
- setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
- break;
- case 3://設(shè)時(shí)按鍵S按鍵第三次按下
- setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
- setminutange--;//設(shè)時(shí)分鐘個(gè)位變量先賦值再減減
- if(setminutange==-1)//判斷設(shè)時(shí)分鐘個(gè)位變量設(shè)定值是否達(dá)到-1
- setminutange=9;//設(shè)時(shí)分鐘個(gè)位變量置9
- WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
- WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
- setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
- break;
- case 4://設(shè)時(shí)按鍵S按鍵第四次按下
- setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
- setminutanshi--;//設(shè)時(shí)分鐘十位變量先賦值再減減
- if(setminutanshi==-1)//判斷設(shè)時(shí)分鐘十位變量設(shè)定值是否達(dá)到-1
- setminutanshi=5;//設(shè)時(shí)分鐘十位變量置9
- WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
- WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位變量可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
- setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
- break;
- case 5://設(shè)時(shí)按鍵S按鍵第五次按下
- sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
- sethourge--;//設(shè)時(shí)時(shí)鐘個(gè)位變量先賦值再減減
- if(sethourge==-1)//判斷設(shè)時(shí)時(shí)鐘個(gè)位變量設(shè)定值是否達(dá)到-1
- sethourge=3;//設(shè)時(shí)時(shí)鐘個(gè)位變量置3
- WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
- WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
- sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
- break;
- case 6://設(shè)時(shí)按鍵S按鍵第六次按下
- sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
- sethourshi--;//設(shè)時(shí)時(shí)鐘十位變量先賦值再減減
- if(sethourshi==-1)//判斷設(shè)時(shí)時(shí)鐘十位設(shè)定值是否達(dá)到-1
- sethourshi=2;//設(shè)時(shí)時(shí)鐘十位置2
- WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
- WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
- sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
- break;
- }
- }
- }
- }
- }
- void SetTemperatureKeyScan()//設(shè)溫按鍵掃描函數(shù)
- {
- if(S0==0)//判斷設(shè)溫按鍵S0是否按下
- {
- Delay(5);//延時(shí)
- if(S0==0)//再次判斷設(shè)溫按鍵S0是否按下
- {
- settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,余留settemperatureflag==1,當(dāng)再次操作設(shè)溫按鍵掃描函數(shù)設(shè)溫時(shí),會(huì)發(fā)生在設(shè)溫過(guò)程中觸發(fā)設(shè)溫報(bào)警條件而報(bào)警,因此在設(shè)溫按鍵掃描函數(shù)里邊添加settemperatureflag=0,再次執(zhí)行設(shè)溫按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1被置換成settemperatureflag=0,很好地解決了再次操作設(shè)溫按鍵掃描函數(shù)設(shè)溫時(shí),在設(shè)溫過(guò)程中觸發(fā)設(shè)溫報(bào)警條件而報(bào)警的問(wèn)題。
- TR0flag=0;//定時(shí)器0標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留TR0flag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加TR0flag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊TR0flag==1被置換成TR0flag=1,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
- setsecondflag=0;//設(shè)時(shí)秒鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留setsecondflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加setsecondflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊setsecondflag==1被置換成setsecondflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
- setminutanflag=0;//設(shè)時(shí)分鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留setminutanflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加setminutanflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊setminutanflag==1被置換成setminutanflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
- sethourflag=0;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留sethourflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加sethourflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊sethourflag==1被置換成sethourflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
- S0num++;//設(shè)溫按鍵S0按鍵次數(shù)變量先賦值再自加
- while(!S0);//等待設(shè)溫按鍵S0彈起
- switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)溫按鍵S0按鍵第一次按下
- TR0=0;//關(guān)定時(shí)器0
- settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不能操作設(shè)時(shí)按鍵掃描函數(shù)。
- tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不能操作調(diào)時(shí)按鍵掃描函數(shù)。
- lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
- temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
- WriteCommand(0x80+0x00+0x0d);//LCD1602字符型液晶顯示器第一行第13個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 2://設(shè)溫按鍵S0按鍵第二次按下
- WriteCommand(0x80+0x00+0x0b);//LCD1602字符型液晶顯示器第一行第11個(gè)(從第0開(kāi)始數(shù))個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 3://設(shè)溫按鍵S0按鍵第三次按下
- WriteCommand(0x80+0x00+0x0a);//LCD1602字符型液晶顯示器第一行第10個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 4://設(shè)溫按鍵S0按鍵第四次按下
- WriteCommand(0x80+0x00+0x09);//LCD1602字符型液晶顯示器第一行第9個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 5://設(shè)溫按鍵S0按鍵第五次按下
- WriteCommand(0x80+0x00+0x08);//LCD1602字符型液晶顯示器第一行第8個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 6://設(shè)溫按鍵S0按鍵第六次按下
- WriteCommand(0x80+0x00+0x0d);//LCD1602字符型液晶顯示器第一行第13個(gè)(從第0開(kāi)始數(shù))位置的顯示位
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
- TR0=1;//開(kāi)定時(shí)器0
- S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)溫按鍵。
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
- settemperatureflag=1;//設(shè)溫標(biāo)志位變量置1,為了在操作設(shè)溫按鍵掃描函數(shù)進(jìn)行設(shè)溫后,可以執(zhí)行溫度報(bào)警函數(shù)。
- break;
- default:
- S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零
- break;
-
- }
- }
- }
- if(S0num!=0)//判斷設(shè)溫按鍵S0按鍵按下次數(shù)變量是否為0
- {
- if(S2==0)//判斷增加按鍵S2是否按下
- {
- Delay(5);//延時(shí)
- if(S2==0)//再次判斷增加按鍵S2是否按下
- {
- S2numflag=1;//增加鍵標(biāo)志位變量置1,可以在溫度報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)報(bào)警。
- while(!S2);//等待增加按鍵S2彈起
- switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)溫按鍵S0按鍵第一次按下
- setwenduxiaoshu++;//設(shè)溫小數(shù)位變量先賦值再加加
- if(setwenduxiaoshu==10)//判斷設(shè)溫小數(shù)位變量設(shè)定值是否達(dá)到10
- setwenduxiaoshu=0;//設(shè)溫小數(shù)位變量歸零
- WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
- WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 2://設(shè)溫按鍵S0按鍵第二次按下
- setwenduge++;//設(shè)溫個(gè)位變量先賦值再加加
- if(setwenduge==6)//判斷設(shè)溫個(gè)位變量設(shè)定值是否達(dá)到6
- setwenduge=0;//設(shè)溫個(gè)位變量數(shù)歸零
- WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
- WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 3://設(shè)溫按鍵S0按鍵第三次按下
- setwendushi++;//設(shè)溫十位變量先賦值再加加
- if(setwendushi==3)//判斷設(shè)溫十位變量設(shè)定值是否達(dá)到3
- setwendushi=0;//設(shè)溫十位變量歸零
- WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
- WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 4://設(shè)溫按鍵S0按鍵第四次按下
- setwendubai++;//設(shè)溫百位變量先賦值再加加
- if(setwendubai==2)//判斷設(shè)溫百位變量設(shè)定值是否達(dá)到2
- setwendubai=0;//設(shè)溫百位變量歸零
- WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
- WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 5://設(shè)溫按鍵S0按鍵第五次按下
- WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫負(fù)符號(hào)顯示位
- WriteData(0x2b);//0x2d表示字符庫(kù)的正符號(hào)
- WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))個(gè)位置的設(shè)溫負(fù)符號(hào)顯示位
- break;
- }
- }
- }
- }
- if(S0num!=0)//判斷設(shè)溫按鍵S0按鍵按下次數(shù)變量是否為0
- {
- if(S3==0)//判斷減少按鍵S2是否按下
- {
- Delay(5);//延時(shí)
- if(S3==0)//再次判斷減少按鍵S2是否按下
- {
- S3numflag=1;//減少鍵標(biāo)志位變量置1,可以在溫度報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)報(bào)警。
- while(!S3);//等待減少按鍵S2彈起
- switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
- {
- case 1://設(shè)溫按鍵S0按鍵第一次按下
- setwenduxiaoshu--;//設(shè)溫小數(shù)位變量先賦值再減減
- if(setwenduxiaoshu==-1)//判斷設(shè)溫小數(shù)位變量設(shè)定值是否達(dá)到-1
- setwenduxiaoshu=9;//設(shè)溫小數(shù)位變量置9
- WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
- WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 2://設(shè)溫按鍵S0按鍵第二次按下
- setwenduge--;//設(shè)溫個(gè)位變量先賦值再減減
- if(setwenduge==-1)//判斷設(shè)溫個(gè)位變量設(shè)定值是否達(dá)到-1
- setwenduge=5;//設(shè)溫個(gè)位變量數(shù)置5
- WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
- WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 3://設(shè)溫按鍵S0按鍵第三次按下
- setwendushi--;//設(shè)溫十位變量先賦值再減減
- if(setwendushi==-1)//判斷設(shè)溫十位變量設(shè)定值是否達(dá)到-1
- setwendushi=2;//設(shè)溫十位變量置2
- WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
- WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 4://設(shè)溫按鍵S0按鍵第四次按下
- setwendubai--;//設(shè)溫百位變量先賦值再減減
- if(setwendubai==-1)//判斷設(shè)溫百位變量設(shè)定值是否達(dá)到-1
- setwendubai=1;//設(shè)溫百位變量置1
- WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
- WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位可顯示0到9的數(shù)字。
- WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
- settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
- break;
- case 5://設(shè)溫按鍵S0按鍵第五次按下
- WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫負(fù)符號(hào)顯示位
- WriteData(0x2d);//0x2d表示字符庫(kù)的負(fù)符號(hào)
- WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))個(gè)位置的設(shè)溫負(fù)符號(hào)顯示位
- break;
- }
- }
- }
- }
- }
- void TiaoTimeKeyScan()//調(diào)時(shí)按鍵掃描函數(shù)
- {
- if(S1==0)//判斷調(diào)時(shí)按鍵S1是否按下
- {
- Delay(5);//延時(shí)
- if(S1==0)//再次判斷調(diào)時(shí)按鍵S1是否按下
- {
- settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,溫度報(bào)警函數(shù)里邊余留settemperatureflag==1和TR0=1,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加settemperatureflag=0和TR0=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1和TR0=1被置換成settemperatureflag=0和TR0=0,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題。
- S1num++;//調(diào)時(shí)按鍵S1按鍵次數(shù)變量先賦值再自加
- while(!S1);//等待調(diào)時(shí)按鍵S1彈起
- switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
- {
- case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
- TR0=0;//關(guān)定時(shí)器0
- settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)溫按鍵掃描函數(shù)。
- lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
- temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量等于1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
- secondge=miao%10;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給秒鐘個(gè)位顯示位。
- secondshi=miao/10;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給秒鐘十位顯示位。
- WriteCommand(0x80+0x40+0x07);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
- secondshi=secondshi;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給秒鐘十位顯示位。
- WriteCommand(0x80+0x40+0x06);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
- minutange=fen%10;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給分鐘個(gè)位顯示位。
- minutanshi=fen/10;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給分鐘十位顯示位。
- WriteCommand(0x80+0x40+0x04);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
- minutanshi=minutanshi;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給分鐘十位顯示位。
- WriteCommand(0x80+0x40+0x03);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
- hourge=shi%10;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給時(shí)鐘個(gè)位顯示位。
- hourshi=shi/10;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給時(shí)鐘十位顯示位。
- WriteCommand(0x80+0x40+0x01);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
- hourshi=hourshi;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給時(shí)鐘十位顯示位。
- WriteCommand(0x80+0x40+0x00);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的顯示位
- WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
- break;
- case 7://調(diào)時(shí)按鍵S1按鍵第七次按下
- WriteCommand(0x80+0x40+0x07);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的顯示位
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
- TR0=1;//開(kāi)定時(shí)器0
- S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)溫按鍵掃描函數(shù)執(zhí)行。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
- miaoflag=0;//秒鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留miaoflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
- fenflag=0;//分鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留fenflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
- shiflag=0;//時(shí)鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留shiflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
- break;
- default:
- S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
- break;
- }
- }
- }
- if(S1num!=0)//判斷調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量是否為0
- {
- if(S2==0)//判斷增加按鍵S2是否按下
- {
- Delay(5);//延時(shí)
- if(S2==0)//再次判斷增加按鍵S2是否按下
- {
- while(!S2);//等待增加按鍵S2彈起
- switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
- {
- case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
- miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- secondge++;//秒鐘個(gè)位數(shù)先賦值再加加
- if(secondge==10)//判斷秒鐘個(gè)位數(shù)設(shè)定值是否達(dá)到10
- secondge=0;//秒鐘個(gè)位數(shù)歸零
- LCD1602DisplayGeDigitResolve(0x07,secondge);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位
- miao=secondshi*10+secondge;//移位修改秒鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
- miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- secondshi++;//秒鐘十位數(shù)先賦值再加加
- if(secondshi==6)//判斷秒鐘十位數(shù)設(shè)定值是否達(dá)到6
- secondshi=0;//秒鐘十位數(shù)歸零
- LCD1602DisplayShiDigitResolve(0x06,secondshi);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位
- miao=secondshi*10+secondge;//移位修改秒鐘十位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
- fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- minutange++;//分鐘個(gè)位數(shù)先賦值再加加
- if(minutange==10)//判斷分鐘個(gè)位數(shù)設(shè)定值是否達(dá)到10
- minutange=0;//分鐘個(gè)位數(shù)歸零
- LCD1602DisplayGeDigitResolve(0x04,minutange);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位
- fen=minutanshi*10+minutange;//移位修改分鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
- fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag-=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- minutanshi++;//分鐘十位數(shù)先賦值再加加
- if(minutanshi==6)//判斷分鐘十位數(shù)設(shè)定值是否達(dá)到6
- minutanshi=0;//分鐘十位數(shù)歸零
- LCD1602DisplayShiDigitResolve(0x03,minutanshi);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的分鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的分鐘十位顯示位
- fen=minutanshi*10+minutange;//移位修改分鐘十位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
- shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- hourge++;//時(shí)鐘個(gè)位數(shù)先賦值再加加
- if(hourge==4)//判斷時(shí)鐘個(gè)位數(shù)設(shè)定值是否達(dá)到4
- hourge=0;//時(shí)鐘個(gè)位數(shù)歸零
- LCD1602DisplayGeDigitResolve(0x01,hourge);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位
- shi=hourshi*10+hourge;//移位修改時(shí)鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
- shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- hourshi++;//時(shí)鐘十位數(shù)先賦值再加加
- if(hourshi==3)//判斷時(shí)鐘十位數(shù)設(shè)定值是否達(dá)到3
- hourshi=0;//時(shí)鐘十位數(shù)歸零
- LCD1602DisplayShiDigitResolve(0x00,hourshi);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x00);//寫(xiě)入LCD1602第二行第1個(gè)位置的時(shí)鐘十位顯示位
- shi=hourshi*10+hourge;//移位修改時(shí)鐘十位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- default:
- S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
- break;
- }
- }
- }
- if(S3==0)//判斷減少按鍵S3是否按下
- {
- Delay(5);//延時(shí)
- if(S3==0)//再次判斷減少按鍵S3是否按下
- {
- while(!S3);//等待減少按鍵S3彈起
- switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
- {
- case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
- miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- secondge--;//秒鐘個(gè)位數(shù)先賦值再減減
- if(secondge==-1)//判斷秒鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
- secondge=9;//秒鐘個(gè)位數(shù)歸9
- LCD1602DisplayGeDigitResolve(0x07,secondge);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位
- miao=secondshi*10+secondge;//移位修改秒鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
- miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- secondshi--;//秒鐘十位數(shù)先賦值再減減
- if(secondshi==-1)//判斷秒鐘十位數(shù)設(shè)定值是否達(dá)到-1
- secondshi=5;//秒鐘十位數(shù)歸5
- LCD1602DisplayShiDigitResolve(0x06,secondshi);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位
- miao=secondshi*10+secondge;//移位修改秒鐘十位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
- fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- minutange--;//分鐘個(gè)位數(shù)先賦值再減減
- if(minutange==-1)//判斷分鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
- minutange=9;//分鐘個(gè)位數(shù)歸9
- LCD1602DisplayGeDigitResolve(0x04,minutange);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位
- fen=minutanshi*10+minutange;//移位修改分鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
- fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- minutanshi--;//分鐘十位數(shù)先賦值再減減
- if(minutanshi==-1)//判斷分鐘十位數(shù)設(shè)定值是否達(dá)到6
- minutanshi=5;//分鐘十位數(shù)歸5
- LCD1602DisplayShiDigitResolve(0x03,minutanshi);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的分鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的分鐘十位顯示位
- fen=minutanshi*10+minutange;//移位修改分鐘十位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
- shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- hourge--;//時(shí)鐘個(gè)位數(shù)先賦值再減減
- if(hourge==-1)//判斷時(shí)鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
- hourge=3;//時(shí)鐘個(gè)位數(shù)歸3
- LCD1602DisplayGeDigitResolve(0x01,hourge);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位
- shi=hourshi*10+hourge;//移位修改時(shí)鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
- shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
- hourshi--;//時(shí)鐘十位數(shù)先賦值再減減
- if(hourshi==-1)//判斷時(shí)鐘十位數(shù)設(shè)定值是否達(dá)到-1
- hourshi=2;//時(shí)鐘十位數(shù)歸2
- LCD1602DisplayShiDigitResolve(0x00,hourshi);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位的顯示數(shù)
- WriteCommand(0x80+0x40+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位
- shi=hourshi*10+hourge;//移位修改時(shí)鐘十位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
- break;
- default:
- S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
- break;
- }
- }
- }
- }
- }
- void SumKeyScan()//總按鍵掃描函數(shù)
- {
- if(S4==0)//判斷啟停按鍵S4是否按下
- {
- Delay(5);//延時(shí)
- if(S4==0)//再次判斷啟停按鍵S4是否按下
- {
- S4num++;//啟停按鍵S4按下次數(shù)先賦值再加加
- while(!S4);//等待啟停按鍵S4彈起
- if(S4num==1)//判斷啟停按鍵S4是否第一次按下過(guò),實(shí)現(xiàn)直接停止。
- {
- qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù)。
- TR0=1;//啟動(dòng)定時(shí)器0
- }
- if(S4num==2&&settimedisplayflag==0&&settemperaturedisplayflag==0&&tiaotimedisplayflag==0&&timebaojingflag==0)//判斷啟停按鍵S4是否第二次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量是否為0和設(shè)溫顯示標(biāo)志位變量是否為0和調(diào)時(shí)顯示標(biāo)志位變量是否為0和時(shí)間報(bào)警標(biāo)志位變量是否為0,相當(dāng)于第一次按下啟停鍵啟動(dòng)后,在沒(méi)有按其他按鍵的情況下,第二次按下啟停鍵就停止。
- {
- qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù),相當(dāng)于總開(kāi)關(guān)。
- TR0=0;//關(guān)定時(shí)器0
- S4num=0;//啟停按鍵S4按下次數(shù)清零,可以反復(fù)操作啟停按鍵。
- settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
- tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
- }
- if(S4num==1&&settimedisplayflag==1&&settemperaturedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S4是否第一次按下過(guò)以及調(diào)時(shí)顯示標(biāo)志位變量為1及設(shè)溫顯示標(biāo)志位變量是否為1和調(diào)時(shí)顯示標(biāo)志位變量是否為1,相當(dāng)于第一次按下啟停鍵啟動(dòng)后,第二次按下啟停鍵停止后,在沒(méi)有按其他按鍵的情況下,第三次按下啟停鍵就啟動(dòng)。
- {
- qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù),相當(dāng)于總開(kāi)關(guān)。
- TR0=1;//啟動(dòng)定時(shí)器0
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,可操作設(shè)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,可操作設(shè)溫按鍵掃描函數(shù)。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,可操作調(diào)時(shí)按鍵掃描函數(shù)。
- }
- if(S4num==2&&timebaojingflag==1)//判斷啟停按鍵S4是否第二次按下過(guò)及時(shí)間報(bào)警標(biāo)志位變量是否為1,相當(dāng)于時(shí)間報(bào)警解除。
- {
- TR0=1;//開(kāi)定時(shí)器0
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- timebaojingflag=0;//時(shí)間報(bào)警標(biāo)志位變量置0,釋放時(shí)間報(bào)警標(biāo)志位。
- setsecondge=0;//設(shè)時(shí)秒鐘個(gè)位變量變0,釋放設(shè)時(shí)秒鐘個(gè)位標(biāo)志位。
- setsecondshi=0;//設(shè)時(shí)秒鐘十位變量變0,釋放設(shè)時(shí)秒鐘十位標(biāo)志位。
- setminutange=0;//設(shè)時(shí)分鐘個(gè)位變量變0,釋放設(shè)時(shí)分鐘個(gè)位標(biāo)志位。
- setminutanshi=0;//設(shè)時(shí)分鐘十位變量變0,釋放設(shè)時(shí)分鐘十位標(biāo)志位。
- sethourge=0;//設(shè)時(shí)時(shí)鐘個(gè)位變量變0,釋放設(shè)時(shí)時(shí)鐘個(gè)位標(biāo)志位。
- sethourshi=0;//設(shè)時(shí)時(shí)鐘十位變量變0,釋放設(shè)時(shí)時(shí)鐘十位標(biāo)志位。
- WriteCommand(0x80+0x07);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘個(gè)位。
- WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位顯示0。
- WriteCommand(0x80+0x06);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘十位。
- WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位顯示0。
- WriteCommand(0x80+0x04);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘個(gè)位。
- WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
- WriteCommand(0x80+0x03);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘十位。
- WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位顯示0。
- WriteCommand(0x80+0x01);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)時(shí)鐘個(gè)位。
- WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位顯示0。
- WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)時(shí)鐘十位。
- WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位顯示0。
- S2numflag=0;//增加鍵標(biāo)志位變量置0,釋放增加鍵標(biāo)志位。
- S3numflag=0;//減少鍵標(biāo)志位變量置0,釋放減少鍵標(biāo)志位。
- TR0flag=0;//定時(shí)器0標(biāo)志位變量置0
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
- setsecondflag=0;//設(shè)時(shí)秒鐘標(biāo)志位變量置0,釋放設(shè)時(shí)秒鐘標(biāo)志位。
- setminutanflag=0;//設(shè)時(shí)分鐘標(biāo)志位變量置0,釋放設(shè)時(shí)分鐘標(biāo)志位。
- sethourflag=0;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置0,釋放設(shè)時(shí)時(shí)鐘標(biāo)志位。
- }
- if(S4num==2&&temperatruebaojingflag==1)//判斷啟停按鍵S4是否第二次按下過(guò)及溫度報(bào)警標(biāo)志位變量是否為1,相當(dāng)于溫度報(bào)警解除。
- {
- TR0=1;//開(kāi)定時(shí)器0
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- temperatruebaojingflag=0;//溫度報(bào)警標(biāo)志位變量置0,釋放溫度報(bào)警標(biāo)志位。
- setwenduxiaoshu=0;//設(shè)溫小數(shù)位變量置0,釋放設(shè)溫小數(shù)位標(biāo)志位。
- setwenduge=0;//設(shè)溫個(gè)位變量置0,釋放設(shè)溫個(gè)位標(biāo)志位。
- setwendushi=0;//設(shè)溫十位變量置0,釋放設(shè)溫十位標(biāo)志位。
- setwendubai=0;//設(shè)溫百位變量置0,釋放設(shè)溫百位標(biāo)志位。
- WriteCommand(0x80+0x09);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘個(gè)位。
- WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位顯示0。
- WriteCommand(0x80+0x0A);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘十位。
- WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位顯示0。
- WriteCommand(0x80+0x0B);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘個(gè)位。
- WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
- WriteCommand(0x80+0x0D);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘十位。
- WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
- S2numflag=0;//增加鍵標(biāo)志位變量置0,釋放增加鍵標(biāo)志位。
- S3numflag=0;//減少鍵標(biāo)志位變量置0,釋放減少鍵標(biāo)志位。
- settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,釋放設(shè)溫標(biāo)志位。
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,釋放溫度顯示標(biāo)志位。
- }
- if(S4num>=2&&settemperaturedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S1是否第二或二以上次按下過(guò)及設(shè)溫顯示標(biāo)志位變量為1及調(diào)時(shí)顯示標(biāo)志位變量為1,相當(dāng)于設(shè)時(shí)啟動(dòng)。
- {
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- Snum=0;//設(shè)時(shí)按鍵S0按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
- TR0=1;//啟動(dòng)定時(shí)器0
- TR0flag=1;//定時(shí)器0標(biāo)志位變量置1,進(jìn)入時(shí)間報(bào)警函數(shù)判斷是否可執(zhí)行時(shí)間報(bào)警。
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
- }
- if(S4num>=2&&settimedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S1是否第二或二以上次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量為1及調(diào)時(shí)顯示標(biāo)志位變量為1,相當(dāng)于設(shè)溫啟動(dòng)。
- {
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- S0num=0;//設(shè)溫按鍵S0按下次數(shù)清零,可以反復(fù)操作設(shè)溫按鍵。
- TR0=1;//啟動(dòng)定時(shí)器0
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
- settemperatureflag=1;//設(shè)溫標(biāo)志位變量置1,進(jìn)入溫度報(bào)警函數(shù)判斷是否可執(zhí)行溫度報(bào)警。
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
- tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
- }
- if(S4num>=2&&settimedisplayflag==1&&settemperaturedisplayflag==1)//判斷啟停按鍵S0是否第二或二以上次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量為1和設(shè)溫顯示標(biāo)志位變量為1,相當(dāng)于調(diào)時(shí)啟動(dòng)。
- {
- S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
- S1num=0;//調(diào)時(shí)按鍵S1按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
- TR0=1;//啟動(dòng)定時(shí)器0
- WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
- settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
- settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
- lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量置0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
- temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
- miaoflag=0;//秒鐘標(biāo)志位變量置0,釋放秒鐘標(biāo)志位。
- fenflag=0;//分鐘標(biāo)志位變量置0,釋放分鐘標(biāo)志位。
- shiflag=0;//時(shí)鐘標(biāo)志位變量置0,釋放時(shí)鐘顯示標(biāo)志位。
- }
- }
- }
- }
- void Timer0() interrupt 1//定時(shí)器0中斷函數(shù)
- {
- TH0=(65536-50000)/256;//TH0重新裝值
- TL0=(65536-50000)%256;//TL0重新裝值
- count++;//定時(shí)器0中斷次數(shù)先賦值再加
- if(count==18)//判斷定時(shí)器0中斷次數(shù)是否為18次
- {
- count=0;//定時(shí)器0中斷次數(shù)歸零
- miao++;//秒鐘先賦值再加
- if(miao==60)//判斷秒鐘是否達(dá)到60秒
- {
- miao=0;//秒鐘歸零
- fen++;//分鐘先賦值再加
- if(fen==60)//判斷分鐘是否達(dá)到60分
- {
- fen=0;//分鐘歸零
- shi++;//時(shí)鐘先賦值再加
- if(shi==24)//判斷時(shí)鐘是否達(dá)到24時(shí)
- {
- shi=0;//時(shí)鐘歸零
- }
- // LCD1602DisplayTime(0x00,shi);//時(shí)鐘顯示兩位數(shù)分解函數(shù)
- }
- // LCD1602DisplayTime(0x03,fen);//分鐘顯示兩位數(shù)分解函數(shù)
- }
- // LCD1602DisplayTime(0x06,miao);//秒鐘顯示兩位數(shù)分解函數(shù)
- }
- }
- void DS18B20_Delay(uint i)//微妙級(jí)延時(shí)函數(shù)
- {
- while(i--);
- }
- void FengNingQi_Alarm(uint t)//蜂鳴器報(bào)警函數(shù)
- {
- uint x,y;
- for(x=0;x<t;x++)
- {
- for(y=0;y<50;y++);
- FengNingQi=~FengNingQi ;//蜂鳴器按位取反FengNingQi
- }
- }
- bit DS18B20Init()//DS18B20初始化函數(shù)
- {
- uchar x=0;
- DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高復(fù)位
- DS18B20_Delay(8);//稍做延時(shí)
- DQ = 0;//單片機(jī)將DS18B20通信端口DQ拉低
- DS18B20_Delay(80);//延時(shí)在480us與960us之間
- DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
- DS18B20_Delay(4);//延時(shí)在15us與60us之間
- x=DQ;//稍做延時(shí)后,如果x=0,則初始化成功,若x=1則初始化失敗。
- DS18B20_Delay(20);//延時(shí)在60us與240us之間
- return x;
- }
- void DS18B20_WriteOneByte(uchar j)//DS18b20寫(xiě)一個(gè)字節(jié)函數(shù)
- {
- uchar i=0;
- for (i=8; i>0; i--)//單片機(jī)向DS18B20寫(xiě)入數(shù)據(jù)
- {
- DQ = 0;//單片機(jī)將DS18B20通信端口DQ從高電平拉至低電平時(shí),單片機(jī)向DS18B20寫(xiě)數(shù)據(jù)開(kāi)始。
- DQ = j&0x01;//單片機(jī)按將字節(jié)低位寫(xiě)入DS18B20
- DS18B20_Delay(5);//延時(shí)在60us與120us之間
- DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
- j>>=1;//變量j右移一位,最高位補(bǔ)零。例如當(dāng)j=1,換成二進(jìn)制是0000 0001,右移一位就是0000 000。擴(kuò)展:?jiǎn)纹瑱C(jī)無(wú)符號(hào)或有符號(hào)數(shù)左移幾位,高位就依次補(bǔ)幾位0,低位也依次去掉幾位,讓左移幾位依次代替低位去掉的幾位。單片機(jī)有符號(hào)數(shù),如果是正數(shù),右移幾位,先是確定最高位用0,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位,如果是負(fù)數(shù),右移幾位,先是確定最高位用1,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位。
- }
- }
- uchar DS18B20_ReadOneByte()//DS18B20讀一個(gè)字節(jié)函數(shù)
- {
- uchar i=0;
- uchar j = 0;
- for (i=8;i>0;i--)//單片機(jī)讀取DS18B20采集的溫度數(shù)據(jù)轉(zhuǎn)換成一個(gè)字節(jié)
- {
- DQ = 0;//單片機(jī)將DS18B20通信端口DQ從高電平拉成低電平時(shí),單片機(jī)讀取DS18B20所采集到溫度數(shù)據(jù)開(kāi)始。
- j>>=1;//變量j右移一位,最高位補(bǔ)零。例如當(dāng)j=1,換成二進(jìn)制是0000 0001,右移一位就是0000 000。擴(kuò)展:?jiǎn)纹瑱C(jī)無(wú)符號(hào)或有符號(hào)數(shù)左移幾位,高位就依次補(bǔ)幾位0,低位也依次去掉幾位,讓左移幾位依次代替低位去掉的幾位。單片機(jī)有符號(hào)數(shù),如果是正數(shù),右移幾位,先是確定最高位用0,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位,如果是負(fù)數(shù),右移幾位,先是確定最高位用1,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位。
- DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
- if(DQ)//判斷DQ是否等于1
- j|=0x80;//若DQ=1,則讓當(dāng)前j最高位為1,在下次循環(huán)中移位至次高位,最后達(dá)到從低位到高位接收的目的;若DQ=0,則可跳過(guò)此語(yǔ)句,直接在下次循環(huán)對(duì)byte進(jìn)行移位補(bǔ)0。
- DS18B20_Delay(4);//稍做延時(shí)
- }
- return j;
- }
- uint DS18B20_ReadTemperature()//單片機(jī)讀取DS18b20當(dāng)前溫度
- {
- uchar L=0;//定義溫度值低8位變量
- uchar H=0;//定義溫度值高8位變量
- DS18B20Init( );//DS18B20初始化函數(shù)
- DS18B20_WriteOneByte(0xcc);//單片機(jī)只連一個(gè)DS18B20溫度傳感器時(shí),可寫(xiě)該段代碼,表示單片機(jī)向DS18B20寫(xiě)入跳過(guò)讀DS18B20序號(hào)列號(hào)指令。
- DS18B20_WriteOneByte(0x44);//單片機(jī)向DS18B20九字節(jié)暫存器(包括兩個(gè)字節(jié)儲(chǔ)溫溫度寄存器、一字節(jié)高溫觸發(fā)器、一字節(jié)低溫觸發(fā)器、一字節(jié)溫度精度轉(zhuǎn)換配置寄存器、三個(gè)字節(jié)的保留位、一字節(jié)DS18B20的64位ROM前56位編碼校驗(yàn)CRC發(fā)生器)中前兩個(gè)字節(jié)溫度寄存器寫(xiě)入啟動(dòng)DS18B20溫度轉(zhuǎn)換指令
- // DS18B20_Delay(100);//稍作延時(shí)
- DS18B20Init( );//DS18B20初始化函數(shù)
- DS18B20_WriteOneByte(0xcc);//單片機(jī)只連一個(gè)DS18B20溫度傳感器時(shí),可寫(xiě)該段代碼,表示單片機(jī)向DS18B20寫(xiě)入跳過(guò)讀DS18B20序號(hào)列號(hào)指令。
- DS18B20_WriteOneByte(0xbe);//單片機(jī)向DS18B20九字節(jié)暫存器(包括兩個(gè)字節(jié)儲(chǔ)溫溫度寄存器、一字節(jié)高溫觸發(fā)器、一字節(jié)低溫觸發(fā)器、一字節(jié)溫度精度轉(zhuǎn)換配置寄存器、三個(gè)字節(jié)的保留位、一字節(jié)DS18B20的64位ROM前56位編碼校驗(yàn)CRC發(fā)生器)中前兩個(gè)字節(jié)溫度寄存器寫(xiě)入讀取溫度的指令
- // DS18B20_Delay(100);//稍作延時(shí)
- L=DS18B20_ReadOneByte( );//單片機(jī)向DS18B20發(fā)送讀取溫度值低8位指令,把讀到的溫度值低8位賦給溫度值低8位變量
- H=DS18B20_ReadOneByte( );//單片機(jī)向DS18B20發(fā)送讀取溫度值高8位指令,把讀到的溫度值高8位賦給溫度值高8位變量
- temperature = H;//DS18B20讀到的溫度值高8位賦給溫度值變量,變成高8位溫度值變量,還不是一個(gè)溫度值變量,由于一個(gè)溫度值變量是由高8位低8位共16位組成。
- temperature = temperature << 8;//溫度值高8位變量左移8位,就可以變成一個(gè)只有高8位低8位全0的溫度值變量。
- temperature = temperature | L;//只有高8位低8位全0的溫度值變量與溫度值低8位變量或運(yùn)算后就變成一個(gè)真正有高8位低8位共16位的溫度值變量
- if(temperature>0x0fff)//判斷表示溫度寄存器16位二進(jìn)制數(shù)的溫度值變量是否大于表示溫度寄存器16位二進(jìn)制數(shù)的正溫度值,假若大于且當(dāng)表示溫度寄存器16位二進(jìn)制數(shù)的溫度值變量的前5位二進(jìn)制數(shù)全為1時(shí),該溫度值變量表示負(fù)溫度值。
- {
- temperature = ~temperature+2;//負(fù)溫度值
- temperatureflag=1;//負(fù)溫度標(biāo)志變量等于1
- }
- else
- {
- temperatureflag=0;//負(fù)溫度標(biāo)志變量等于0
- }
- temperature = temperature*0.0625*10;//擴(kuò)大10倍的溫度值
- return temperature;//返回?cái)U(kuò)大10倍的溫度值
- }
- void TemperatureFenJie()//LCD1602的溫度顯示函數(shù)
- {
- wendu=DS18B20_ReadTemperature();//DS18B20讀到的溫度值賦給溫度值變量
- if(temperatureflag==1)//判斷負(fù)溫度標(biāo)志變量是否等于1
- {
- fuhaowei=0x2d;//負(fù)符號(hào)
- wendubai=wendu/1000;//溫度值百位
- wendushi=wendu%1000/100;//溫度值十位
- wenduge=wendu%100/10;//溫度值個(gè)位
- xiaoshudian=0x2e;//小數(shù)點(diǎn)
- wenduxiaoshu=wendu%10;//小數(shù)位
- }
- else
- {
- fuhaowei=0x2b;//正符號(hào)
- if(wendu==0)//判斷溫度是否等于0
- {
- fuhaowei=0x20;//無(wú)符號(hào)
- }
- wendubai=wendu/1000;//溫度值百位
- wendushi=wendu%1000/100;//溫度值十位
- wenduge=wendu%100/10;//溫度值個(gè)位
- xiaoshudian=0x2e;//小數(shù)點(diǎn)
- wenduxiaoshu=wendu%10;//小數(shù)位
- }
- }
- void TemperatureDisplay()//LCD1602的溫度顯示函數(shù)
- {
- WriteCommand(0x80+0x48);//LCD1602字符型液晶顯示器第二行第九個(gè)(從第零開(kāi)始數(shù))顯示位
- WriteData(fuhaowei);//符號(hào)位顯示。
- WriteData(0x30+wendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值百位可顯示0到9的數(shù)字。
- WriteData(0x30+wendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值十位可顯示0到9的數(shù)字。
- WriteData(0x30+wenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值個(gè)位可顯示0到9的數(shù)字。
- WriteData(xiaoshudian);//小數(shù)點(diǎn)
- WriteData(0x30+wenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示小數(shù)位可顯示0到9的數(shù)字。
- WriteData(0xdf);//0xdf表示字符庫(kù)中攝氏度左上角的符號(hào)
- WriteData(0x43);//0x43表示字符庫(kù)中大寫(xiě)字母C
- }
- // void SetAlarmTemperatrueFenJie(uint alarmwendu)
- //{
- // fuhaowei=0x20;//無(wú)符號(hào)
- // alarmwendubai=alarmwendu/1000;//溫度值百位
- // alarmwendushi=alarmwendu%1000/100;//溫度值十位
- // alarmwenduge=alarmwendu%100/10;//溫度值個(gè)位
- // alarmxiaoshu=alarmwendu%10;//小數(shù)位
- // }
- void SetTemperatrueInit()//設(shè)溫初始化函數(shù)
- {
- WriteCommand(0x80+0x08);//LCD1602字符型液晶顯示器第一行第九個(gè)(從第零開(kāi)始數(shù))顯示位
- WriteData(fuhaowei);//符號(hào)位顯示。
- WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位變量可顯示0到9的數(shù)字。
- WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位變量可顯示0到9的數(shù)字。
- WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位變量可顯示0到9的數(shù)字。
- WriteData(0x2e);//小數(shù)點(diǎn)
- WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位變量可顯示0到9的數(shù)字。
- WriteData(0xdf);//0xdf表示字符庫(kù)中攝氏度左上角的符號(hào)
- WriteData(0x43);//0x43表示字符庫(kù)中大寫(xiě)字母C
-
- }
- void SetTimeInit()//設(shè)時(shí)初始化函數(shù)
- {
- WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第零開(kāi)始數(shù))顯示位
- WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)十位變量可顯示0到9的數(shù)字。
- WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)個(gè)位變量可顯示0到9的數(shù)字。
- WriteData(0x3a);//0x3a表示字符庫(kù)中冒號(hào)
- WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)分十位變量可顯示0到9的數(shù)字。
- WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)分個(gè)位變量可顯示0到9的數(shù)字。
- WriteData(0x3a);//0x3a表示字符庫(kù)中冒號(hào)
- WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)秒十位位變量可顯示0到9的數(shù)字。
- WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)秒個(gè)位位變量可顯示0到9的數(shù)字。
- }
- void TimeBaoJing()//時(shí)間報(bào)警函數(shù)
- {
- if(S2numflag==1||S3numflag==1)//判斷增加鍵標(biāo)志位變量是否為1或減少鍵標(biāo)志位變量是否為1
- {
- if(setsecondflag==1&&setminutanflag==0&&sethourflag==0&&setsecond>0&&TR0flag==1&&miaoflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為0和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為0和設(shè)時(shí)秒鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量置是否為0
- {
- if(miao==setsecond)//判斷走時(shí)秒鐘是否等于設(shè)時(shí)秒鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(setminutanflag==1&&setsecondflag==0&&sethourflag==0&&setminutan>0&&TR0flag==1&&fenflag==0)//判斷設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘標(biāo)志位變量是否為0和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為0和設(shè)時(shí)分鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和分鐘標(biāo)志位變量置是否為0
- {
- if(fen==setminutan)//判斷走時(shí)分鐘是否等于設(shè)時(shí)分鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(sethourflag==1&&setsecondflag==0&&setminutanflag==0&&sethour>0&&TR0flag==1&&shiflag==0)//判斷設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘標(biāo)志位變量是否為0和設(shè)時(shí)分鐘標(biāo)志位變量是否為0設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和時(shí)鐘標(biāo)志位變量置是否為0
- {
- if(shi==sethour)//判斷走時(shí)時(shí)鐘是否等于設(shè)時(shí)時(shí)鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(setsecondflag==1&&setminutanflag==1&&setsecond>0&&setminutan>0&&TR0flag==1&&miaoflag==0&&fenflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)分鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量置是否為0和分鐘標(biāo)志位變量是否為0
- {
- if(miao==setsecond&&fen==setminutan)//判斷走時(shí)秒鐘和分鐘是否等于設(shè)時(shí)秒鐘和分鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(setsecondflag==1&&sethourflag==1&&setsecond>0&&sethour>0&&TR0flag==1&&miaoflag==0&&shiflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
- {
- if(miao==setsecond&&shi==sethour)//判斷走時(shí)秒鐘和時(shí)鐘是否等于設(shè)時(shí)秒鐘和時(shí)鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(setminutanflag==1&&sethourflag==1&&setminutan>0&&sethour>0&&TR0flag==1&&fenflag==0&&shiflag==0)//判斷設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和分鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
- {
- if(fen==setminutan&&shi==sethour)//判斷走時(shí)分鐘和時(shí)鐘是否等于設(shè)時(shí)分鐘和時(shí)鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(setsecondflag==1&&setminutanflag==1&&sethourflag==1&&setsecond>0&&setminutan>0&&sethour>0&&TR0flag==1&&miaoflag==0&&fenflag==0&&shiflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)分鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量是否為0和分鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
- {
- if(miao==setsecond&&fen==setminutan&&shi==sethour)//判斷走時(shí)秒鐘和分鐘和時(shí)鐘是否都等于設(shè)時(shí)秒鐘和分鐘和時(shí)鐘
- {
- timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- }
- }
- void TemperatrueBaoJing()//溫度報(bào)警函數(shù)
- {
- if(S2numflag==1||S3numflag==1)//判斷增加鍵標(biāo)志位變量是否為1或減少鍵標(biāo)志位變量是否為1
- {
- if(settemperatureflag==1)//判斷設(shè)溫標(biāo)志位變量是否為1
- {
- if(wendu-10>settemperature)//判斷溫度變量減10后是否大于設(shè)溫變量,其中的10分別表示設(shè)溫個(gè)位數(shù)1與設(shè)溫小數(shù)位0,實(shí)際上表示1攝氏度,相當(dāng)于溫差報(bào)警溫度,這么做的原因是因?yàn)樵O(shè)溫?cái)?shù)值和溫度數(shù)值都帶有小數(shù),通過(guò)數(shù)值取整運(yùn)算,把設(shè)溫?cái)?shù)值和溫度數(shù)值換算成整數(shù)來(lái)計(jì)算溫差,這樣便于處理設(shè)溫?cái)?shù)值與溫度數(shù)值的溫差值。
- {
- temperatruebaojingflag=1;//溫度報(bào)警標(biāo)志位變量置1,進(jìn)行溫度報(bào)警。
- TR0=0;//關(guān)定時(shí)器0
- }
- }
- if(wendu<10&&settemperatureflag==1)//判斷溫度變量是否小于10和設(shè)溫標(biāo)志位變量是否為1,其中的10分別表示設(shè)溫個(gè)位數(shù)1與設(shè)溫小數(shù)位0,實(shí)際上表示1攝氏度,相當(dāng)于溫差報(bào)警溫度,這么做的原因是因?yàn)樵O(shè)溫?cái)?shù)值和溫度數(shù)值都帶有小數(shù),通過(guò)數(shù)值取整運(yùn)算,把設(shè)溫?cái)?shù)值和溫度數(shù)值換算成整數(shù)來(lái)計(jì)算溫差,這樣便于處理設(shè)溫?cái)?shù)值與溫度數(shù)值的溫差值。
- {
- temperatruebaojingflag=0;//溫度報(bào)警標(biāo)志位變量置0,不進(jìn)行溫度報(bào)警。
- TR0=1;//開(kāi)定時(shí)器0
- }
- }
- }
- void main()//主函數(shù)
- {
- LCD1602Init();//LCD1602字符型液晶顯示器初始化函數(shù)
- Timer0Init();//定時(shí)器0初始化函數(shù)
- LCD1602Display();//LCD1602字符型液晶顯示器顯示函數(shù)
- DS18B20Init();//DS18B20初始化函數(shù)
- SetTimeInit();//設(shè)時(shí)初始化函數(shù)
- SetTemperatrueInit();//設(shè)溫初始化函數(shù)
- while(1)//死循環(huán)
- {
- SumKeyScan();//總按鍵掃描函數(shù)
- if(qitingflag==1)//判斷啟停標(biāo)志位變量是否為1
- {
- TimeBaoJing();//時(shí)間報(bào)警函數(shù)
- if(timebaojingflag==1)//判斷時(shí)間報(bào)警標(biāo)志位變量置是否為1
- {
- FengNingQi_Alarm(80);//報(bào)警
- settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
- tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
- }
- TemperatrueBaoJing();//溫度報(bào)警函數(shù)
- if(temperatruebaojingflag==1)//判斷溫度報(bào)警標(biāo)志位變量是否為1
- {
- FengNingQi_Alarm(80);//報(bào)警
- settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
- settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
- tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
- temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,限制操作溫度分解函數(shù)和溫度顯示函數(shù)。
- }
- if(settimedisplayflag==0)//判斷設(shè)時(shí)顯示標(biāo)志位變量是否等于0
- {
- SetTimeKeyScan();//設(shè)時(shí)按鍵掃描函數(shù)
- }
- if(settemperaturedisplayflag==0)//判斷設(shè)溫標(biāo)志位變量是否等于0
- {
- SetTemperatureKeyScan();//設(shè)溫按鍵掃描函數(shù)
- }
- if(tiaotimedisplayflag==0)//判斷調(diào)時(shí)標(biāo)志位變量是否等于0
- {
- TiaoTimeKeyScan();//調(diào)時(shí)按鍵掃描函數(shù)
- }
- // SetAlarmTemperatrueFenJie(alarmwendu);
- if(lcd1602displaytimeflag==0)//判斷液晶顯示器顯示時(shí)間標(biāo)志位變量是否等于0
- {
- if(miao<=60)//判斷秒鐘變量是否小于等于60
- LCD1602DisplayTime(0x06,miao);//秒鐘顯示兩位數(shù)分解函數(shù)
- if(fen<=60)//判斷分鐘變量是否小于等于60
- LCD1602DisplayTime(0x03,fen);//分鐘顯示兩位數(shù)分解函數(shù)
- if(shi<=24)//判斷時(shí)鐘變量是否小于等于24
- LCD1602DisplayTime(0x00,shi);//時(shí)鐘顯示兩位數(shù)分解函數(shù)
- }
- if(temperaturedisplayflag==0)//判斷溫度顯示標(biāo)志位變量是否等于0
- {
- TemperatureFenJie();//溫度分解函數(shù)
- TemperatureDisplay();//溫度顯示函數(shù)
- }
- }
- }
- }
復(fù)制代碼
圖片113.png (79.2 KB, 下載次數(shù): 15)
下載附件
2020-4-24 21:28 上傳
圖片114.png (80.58 KB, 下載次數(shù): 14)
下載附件
2020-4-24 21:29 上傳
|
評(píng)分
-
查看全部評(píng)分
|