- #include "sysinit.h"
- #include "onewire.h" //單總線函數(shù)庫
- sbit key7=P3^0;
- sbit key6=P3^1;
- sbit key5=P3^2;
- sbit key4=P3^3;
- sbit led=P0^0;
- extern void HC138_chose(u8 channel);
- extern void display_a(struct time vaul,u8 one,u8 two,u8 three);
- extern void display_b();
- void naozhong_task();
- void key5_task();
- void key4_task();
- u8 shanshuo_flag[3]={1,1,1};
- u8 naozhong_start=0;//鬧鐘開始響
- void sys_init()//關(guān)閉蜂鳴器繼電器,LED
- {
- HC138_chose(5);
- P0=0XA0;
- HC138_chose(4);
- P0=0XFF;
- HC138_chose(0);
- }
- void led_on()
- {
- HC138_chose(4);
- P0=0XFE;
- HC138_chose(0);
- }
- void led_off()
- {
- HC138_chose(4);
- P0=0XFF;
- HC138_chose(0);
- }
- void led_shan()
- {
- HC138_chose(4);
- P0|=0xFE;
- led=~led;
- //HC138_chose(0);
- }
- void led_offf()
- {
- HC138_chose(4);
- P0|=0xFE;
- led=1;
- HC138_chose(0);
- }
- void led_onn()
- {
- HC138_chose(4);
- P0|=0xFE;
- led=0;
- HC138_chose(0);
- }
- void Timer0Init(void) //50毫秒@11.0592MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設(shè)置定時器模式
- TL0 = 0x00; //設(shè)置定時初值
- TH0 = 0x4C; //設(shè)置定時初值
- TF0 = 0; //清除TF0標志
- TR0 = 1; //定時器0開始計時
- EA=1;
- ET0=1;
- }
- u8 key_scan(u8 mode)//哪個獨立按鍵按下就顯示哪個值
- {
- static u8 key=1;
- if(mode)key=1;
- if((key4==0||key5==0||key6==0||key7==0)&&key==1)
- {
- Delay10ms();
- if(naozhong_start==1)
- {
- naozhong_start=0;//任意按鍵關(guān)閉鬧鐘
- led_offf();
- return 0;//按鍵退出鬧鐘閃爍模式
- }
- key=0;
- if(key4==0)return 4;
- else if(key5==0)return 5;
- else if(key6==0)return 6;
- else if(key7==0)return 7;
- }
- else if(key4==1&&key5==1&&key6==1&&key7==1)
- {
- key=1;
- }
- return 0;
- }
- struct time vaul={23,59,50};
- struct time naozhong={0,0,0};
- bit one=1,two=1,three=1;//到哪一位
- u8 set_flag=0;//
- bit naozhong_set=0;//鬧鐘和正常顯示切換
- bit wendu_flag;
- bit deng;
- unsigned char wendu_value=0;
- u8 wendu_ms=0;
- void main()
- {
- u8 key_vaul=0;
- sys_init();
- Timer0Init();
- wendu_value=rd_temperature();//不加這個會產(chǎn)生一個85;
-
- while(1)
- {
- // display_b();
- if(naozhong_set)
- {
- display_a(naozhong,one,two,three);
- }else display_a(vaul,one,two,three);
- if(deng&&naozhong_start)
- {
- led_onn();
- }else if(deng==0&&naozhong_start)
- {
- led_offf();
- }
- naozhong_task();
- key_vaul=key_scan(0);
- if(key_vaul==7)//時間模式
- {
- set_flag++;//移動表示哪一位在閃爍
- set_flag&=0x03;//限制在3以內(nèi)
- }else if(key_vaul==6)
- {
- set_flag=0;
- naozhong_set=!naozhong_set;//選擇當前模式
- }else if(key_vaul==5)//時間加
- {
- key5_task();
- }else if(key_vaul==4)
- {
- key4_task();
- if(set_flag==0)//溫度顯示的開關(guān)
- {
- while(!key4)
- {
- //EA=0;
- // Delay1ms();
- display_b();
- if(wendu_ms>=20)
- {
- wendu_value=read_data();
- wendu_ms=0;
- }
- }
- // EA=1;
- }
- }
-
- }
-
- }
- void time_0() interrupt 1
- {
- static u8 count=0,i=0;
- count++;
- wendu_ms++;
- if(naozhong_start)
- {
- i++;
- if(i%4==0)
- {
- deng=!deng;
- //led_shan();
- }
- if(i>100)
- {
- i=0;
- naozhong_start=0;
- led_offf();
- }
- }
- if(count>=20)
- {
- count=0;
- switch(set_flag)
- {
- case 1:one=!one;two=1;three=1;break;
- case 2:two=!two;one=1;three=1;break;
- case 3:three=!three;one=1;two=1;break;
- default:one=1;two=1;three=1;break;
- }
- vaul.sec++;
- if(vaul.sec>=60)
- {
- vaul.sec=0;
- vaul.minute++;
- if(vaul.minute>=60)
- {
- vaul.minute=0;
- vaul.hour++;
- if(vaul.hour>=24)vaul.hour=0;
- }
- }
- }
- }
- void key5_task()
- {
- if(naozhong_set)//時鐘位
- {
- if(set_flag==1)
- {
- naozhong.hour++;
- if(naozhong.hour>=24)naozhong.hour=0;
- }else if(set_flag==2)
- {
- naozhong.minute++;
- if(naozhong.minute>=60)naozhong.minute=0;
- }else if(set_flag==3)
- {
- naozhong.sec++;
- if(naozhong.sec>=60)naozhong.sec=0;
- }
- }else //鬧鐘位
- {
- if(set_flag==1)
- {
- vaul.hour++;
- if(vaul.hour>=24)vaul.hour=0;
- }else if(set_flag==2)
- {
- vaul.minute++;
- if(vaul.minute>=60)vaul.minute=0;
- }else if(set_flag==3)
- {
- vaul.sec++;
- if(vaul.sec>=60)vaul.sec=0;
- }
- }
- }
- void key4_task()
- {
- if(naozhong_set)//時鐘位
- {
- if(set_flag==1)
- {
- naozhong.hour--;
- if(naozhong.hour<0)naozhong.hour=23;
- }else if(set_flag==2)
- {
- naozhong.minute--;
- if(naozhong.minute<0)naozhong.minute=59;
- }else if(set_flag==3)
- {
- naozhong.sec--;
- if(naozhong.sec<0)naozhong.sec=59;
- }
- }else //鬧鐘位
- {
- if(set_flag==1)
- {
- vaul.hour--;
- if(vaul.hour<0)vaul.hour=23;
- }else if(set_flag==2)
- {
- vaul.minute--;
- if(vaul.minute<0)vaul.minute=59;
- }else if(set_flag==3)
- {
- vaul.sec--;
- if(vaul.sec<0)vaul.sec=59;
- }
- }
- }
- void naozhong_task()
- {
- if(naozhong.sec==vaul.sec&&naozhong.minute==vaul.minute&&naozhong.hour==vaul.hour)
- {
- naozhong_start=1;
- }
- }
復(fù)制代碼
Keil代碼下載:
新建文件夾.zip
(70.87 KB, 下載次數(shù): 11)
2022-4-9 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|