- #include "sysinit.h"
- #include "onewire.h" //单总线函数库
- 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()//关闭蜂鸣器继电器,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; //设置定时器模式
- TL0 = 0x00; //设置定时初值
- TH0 = 0x4C; //设置定时初值
- 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;//任意按键关闭闹钟
- 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();//不加这个会产生一个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以内
- }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)//温度显示的开关
- {
- 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;
- }
- }
复制代码
Keil代码下载:
新建文件夹.zip
(70.87 KB, 下载次数: 11)
|