完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我要做的是只能电子钟 有秒表,日期,时钟 闹钟 温度计 ,但是温度计和秒表不知道该怎么弄写 ,求帮忙 !!!(下面我的已经实现时钟 闹钟 日期的显示和调节 )
#include #define uchar unsigned char #define uint unsigned int //可位寻址单元的位定义 ***it LE1= P2^0; ***it LE2= P2^1; ***it KEY1= P2^2; ***it KEY2= P2^3; ***it KEY3= P2^4; ***it KEY4=P2^5; ***it SPEAK= P2^6; ***it KEY5= P2^7; //共阳LED显示代码 uchar LED_Duanxuan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阴LED显示代码 uchar LED_Duanxuan1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //LED位选 uchar LED_weixuan[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //显示缓冲区 uchar LED_DIS[8]={0,0,0,0,0,0,0,0}; uchar LED_Saomiao =0; uchar time_50ms,i=0; uchar second,minute,hour,minute1,day,mon,year,alhour,almin,alsecond; uchar number_key; void delay(void); //延时程序 void display(void); |
|
相关推荐
2个回答
|
|
void key_process(void); //按键处理程序
void Initialize(void); int Leepyear(unsigned int year); void Initialize(void) { second = 0; //秒 minute = 0; //分 hour = 0; day = 1; mon = 1; year = 0; number_key = 0; //按键次数 TH0=(65536-50000)/256; //定时50ms TL0=(65536-50000)%256; EA = 1; //开中断总开关; ET0 = 1; //允许定时器0中断开关; TR0 = 1; //启动定时器T0; LED_DIS[0] = LED_Duanxuan[0]; //显示缓冲区初始化 LED_DIS[1] = LED_Duanxuan[1]; LED_DIS[2] = LED_Duanxuan[2]; LED_DIS[3] = LED_Duanxuan[3]; LED_DIS[4] = LED_Duanxuan[4]; LED_DIS[5] = LED_Duanxuan[5]; LED_DIS[6] = LED_Duanxuan[6]; LED_DIS[7] = LED_Duanxuan[7]; } void key_process(void) { KEY1 = 1; KEY2 = 1; KEY3 = 1; if(KEY4==1&&KEY5==1) {if(KEY1 == 0) { (minute ==59)?(minute = 0):(minute++); while(KEY1 == 0) display(); //等待按键释放; } if(KEY2 == 0) { (hour ==23)?(hour = 0):(hour++); while(KEY2 == 0) display(); //等待按键释放; } if(KEY3==0) {(second==59)?(second=0):(second++) ; while(KEY3==0)display(); } } if(KEY4==0&&KEY5==1) {if(KEY1==0) { (day ==31)?(day = 1):(day++); while(KEY1 == 0) display(); } if(KEY2 == 0) {(mon ==12)?(mon= 1):(mon++); while(KEY2 == 0) display(); } if(KEY3==0) { (year==99)?(year=0):(year++); while(KEY3==0) display(); } } if(KEY4==1&&KEY5==0) {if(KEY1 == 0) //闹钟时分修改 { (almin ==59)?(almin = 0):(almin++); while(KEY1 == 0) display(); } if(KEY2 == 0) { (alhour ==23)?(alhour = 0):(alhour++); while(KEY2 == 0) display(); } } } void alarm() {if((hour==alhour)&&(minute==almin)) SPEAK=1; if (KEY4==0&&KEY5==0) while(KEY4==0&&KEY5==0) display(); SPEAK=0; } void main(void) { Initialize(); while(1) { display(); //调用显示程序 key_process(); //调用按键处理程序 alarm() ; } } void display(void) //动态扫描显示 { uint temp=100; LED_Saomiao++; if(LED_Saomiao == 8) LED_Saomiao=0; P0 = LED_weixuan[LED_Saomiao]; //位选 LE2 = 1; LE2 = 0; P0 = LED_DIS[LED_Saomiao]; //段选 LE1 = 1; LE1 = 0; while(temp--); } void timing(void) interrupt 1 //定时器T0中断,50ms中断一次 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time_50ms++; if(time_50ms==200) { time_50ms = 0; second++; //秒加1; if(second==60) { second = 0; minute++; //分钟加1; if(minute==60) { minute = 0; hour++; if(hour == 24) { hour = 0; day++ ; } if(mon==2&&day==29&&!Leepyear(year)) {day=1; mon++;} if(mon==2&&day==30&&Leepyear(year)) {day=1; mon++;} if((mon==4|mon==6|mon==9|mon==11)&&day==31) {day=1; mon++;} if((mon==1|mon==3|mon==5|mon==7|mon==8|mon==10|mon==12)&&day==32) {day=1; if(mon==12) {mon=1; year++;} else mon++; } } } } if(KEY4==1&&KEY5==1) {LED_DIS[0] = LED_Duanxuan[hour/10]; //时 LED_DIS[1] = LED_Duanxuan[hour%10]; LED_DIS[2] = 0xBF; //- LED_DIS[3] = LED_Duanxuan[minute/10]; //分 LED_DIS[4] = LED_Duanxuan[minute%10]; LED_DIS[5] = 0xBF; //- LED_DIS[6] = LED_Duanxuan[second/10]; //秒 LED_DIS[7] = LED_Duanxuan[second%10]; } if(KEY4==0&&KEY5==1) {LED_DIS[0] = LED_Duanxuan[year/10]; LED_DIS[1] = LED_Duanxuan[year%10]; LED_DIS[2] = 0xBF; LED_DIS[3] = LED_Duanxuan[mon/10]; LED_DIS[4] = LED_Duanxuan[mon%10]; LED_DIS[5] = 0xBF; LED_DIS[6] = LED_Duanxuan[day/10]; LED_DIS[7] = LED_Duanxuan[day%10]; } if(KEY4==1&&KEY5==0) {LED_DIS[0] = LED_Duanxuan[alhour/10]; LED_DIS[1] = LED_Duanxuan[alhour%10]; LED_DIS[2] = 0xBF; LED_DIS[3] = LED_Duanxuan[almin/10]; LED_DIS[4] = LED_Duanxuan[almin%10]; LED_DIS[5] = 0xBF; LED_DIS[6] = LED_Duanxuan[alsecond/10]; LED_DIS[7] = LED_Duanxuan[alsecond%10]; } } int Leepyear(unsigned int year) { if (year%4==0) return 1; else return 0; } |
|
|
|
爱莫能助,不过帮你顶一下~~~
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
106 浏览 0 评论
250 浏览 0 评论
1683 浏览 1 评论
1890 浏览 2 评论
为什么用FatFS在SD卡创建文件,在单片机上读写正常,用读卡器插到电脑上就什么都没有
3042 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11429 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-9 09:09 , Processed in 0.555913 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号