ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:237.41KB ,
资源ID:4417510      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4417510.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机c51数字时钟带年月日显示.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机c51数字时钟带年月日显示.docx

1、单片机c51数字时钟带年月日显示【单片机】c51数字时钟(带年月日显示)显示当前时间:9点58分34秒 (第一个零表示闹钟未开启)当前日期:10年4月六日摘要:本设计以单片机为核心,LED数码管动态扫描显示。采用矩阵式键盘输入能任意修改当前时间日期和设定闹钟时间。具有显示年月日(区分闰年和二月),闹钟报警和整点报时功能说明系统的功能选择由7个按键完成。其中P3.0,P3.1分别对应调整当前时间的时和分,P3.2为外部中断0,控制闹钟功能的开启/关闭(开启时数码管第一位显示字母c)P3.3用作外部中断1,当前时间的显示与闹铃时间显示切换,闹钟显示时按P3.0,P3.1可进行闹钟时分的设定,此时,

2、led1灯灭。闹铃时间到切闹钟开关开启时,闹铃响一分钟。P3.5P3.6P3.7对年月日进行调整(第一次按P3.5,就进入了年月日的显示,现在就可对日期进行调整)。按P3.1回到当前时间的显示状态。整点到时:报警对应小时的次数。程序如下:#include#include#include#define uchar unsigned char#define uint unsigned intuchar data keyvalue; /查到的键值uchar data keys; /转换出的数字uchar dis8;uchar code seg=0x3f,0x06,0x5b,0x4f,0x66,0x6

3、d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x39,0xf7; / 0 1 2 3 4 5 6 7 8 9 - 灭灯 cnsbit led_duan=P26;/段选通sbit led_wei=P27;/位选通sbit speaker=P23;/蜂鸣器sbit minitek=P30;/分校正 按键sbit hourk=P31;/小时校正 按键sbit p3_4=P34;/sbit yeark=P35;/年sbit monthk=P36;/月sbit dayk=P37;/日uchar data wei,i;bit leap_year;/闰年标志位bit dis_nyr;bi

4、t cal_year=1;bit calculate=1;/显示年月日 与 当前时间切换标志uchar data c_min;/闹钟分寄存单元uchar data c_hou;/闹钟、小时寄存单元uchar data second;/秒uchar data minite;/分变量uchar data hour;/小时变量uchar data year,month,day;/定义年月日变量uchar data CNTA;uchar data speaker_num; /蜂鸣次数 bit beep; /整点报时标志bit run; /运行标志bit flash; /灭灯标志bit clarm_sw

5、itch; /闹钟开关标志bit baoshi; /报时开关标志sbit led1=P16; / 按键标识指示灯sbit led2=P17; / 运行标志指示灯sbit P3_2=P32;sbit P3_3=P33;uint n,k;/*10微秒级延时*/void delay_10us(uchar n) do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(-n);/*毫秒级延时 */void delay_ms(uint n) do delay_10us(131); while(-n);/* 当前时间转换*/clk_to_dis() dis

6、0=second%10;dis1=second/10; if(flash)dis2=10; else dis2=11;dis3=minite%10;dis4=minite/10;dis5=hour%10;dis6=hour/10;/*定时闹钟显示译码(用于七段码显示)*/clarm_to_dis() dis0=c_min%10;dis1=c_min/10;if(flash)dis2=10;/亮灯 else dis2=11; /灭灯dis3=c_hou%10;dis4=c_hou/10;dis5=10;dis6=13;/*年月日显示译码*/nyr_to_dis() dis0=day%10;dis

7、1=day/10;dis2=10;/显示-dis3=month%10;dis4=month/10;dis5=10; / -dis6=year%10;dis7=year/10;/*主函数*/void main()P2=0xff;P1=0XFF;p3_4=0;run=1;led2=0;/运行指示灯亮led1=1;flash=0x00;dis2=10; /第三位显示“-”wei=0x7f;/选通低位 i=0;second=21;minite=58;hour=9;CNTA=0x00;year=10;month=4;day=5;clk_to_dis();TMOD=0x11;TH0=15560/256;T

8、L0=15560%256;TH1=0xfc;TL1=0x18;EA=1; PT0=1;EX0=1; /开中断;EX1=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1) while(run=1) clk_to_dis(); if(calculate) if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)day+;if(day31)day=0x01;month+; if(month=13)month=1;year+;cal_year=1;led1=0; /指示灯亮 if(month=4|month=6|mon

9、th=9|month=11) day+; if(day30)day=0x01;month+; led1=0; /指示灯亮 if(month=2) if(leap_year=1)day+;if(day=30)day=1;else day+;if(day=29)day=1; while(cal_year) if(year+2000)%400=0) leap_year=1; / 被400整除为闰年 else if(year+2000)%100=0) leap_year=0; /不能被400整除 能被100整除 不是闰年 else if(year+2000)%4=0) leap_year=1; /不能

10、被400、100整除 能被4整除 是闰年 else leap_year=0; cal_year=0;calculate=0;led1=1;while(!minitek)for(n=0;n1000;n+);if(!minitek=0)break; /延时防抖minite+;second=0x00;led1=0; for(n=0;n20;n+) speaker=!speaker; delay_10us(50); /蜂鸣器响 if(minite=60)minite=0x00;while(!minitek); /等待键松开 led1=1;/显示灯 while(!hourk)for(n=0;n1000;

11、n+);if(!hourk=0)break;hour+;second=0x00;led1=0;for(n=0;n30;n+)speaker=!speaker;delay_10us(30); /蜂鸣器响if(hour=24) hour=0x00;while(!hourk);led1=1; while(!yeark)/yeark键复用 进入年月日调整for(n=0;n1000;n+);if(!yeark=0)break;dis_nyr=1;while(!yeark);while(dis_nyr) nyr_to_dis(); while(!yeark)for(n=0;n1000;n+);if(!ye

12、ark=0)break;year+;led1=0;for(n=0;n30;n+)speaker=!speaker;delay_10us(30); /蜂鸣器响 if(year+2000)%400=0) leap_year=1; / 被400整除为闰年 else if(year+2000)%100=0) leap_year=0; /不能被400整除 能被100整除 不是闰年 else if(year+2000)%4=0) leap_year=1; /不能被400、100整除 能被4整除 是闰年 else leap_year=0; while(!yeark);led1=1; while(!month

13、k)for(n=0;n1000;n+);if(!monthk=0)break;month+;if(month=13)month=1;led1=0;for(n=0;n30;n+)speaker=!speaker;delay_10us(30); /蜂鸣器响while(!monthk);led1=1; while(!dayk)for(n=0;n31)day=0x01;led1=0; /指示灯亮 if(month=4|month=6|month=9|month=11) day+; if(day30)day=0x01; led1=0; /指示灯亮 if(month=2) if(leap_year=1)d

14、ay+;if(day=30)day=1;else day+;if(day=29)day=1;led1=0;for(n=0;n30;n+)speaker=!speaker;delay_10us(30); /蜂鸣器响while(!dayk);led1=1;while(!hourk) for(n=0;n1000;n+); if(hourk) break; dis_nyr=0; while(!hourk);if(clarm_switch)dis7=12;/开启显示 C else dis7=11;/关闭 不显示 dis6=11; clk_to_dis(); if(clarm_switch)/闹铃时间到,

15、指示灯闪烁 蜂鸣器长响if(c_min=minite&c_hou=hour)speaker_num=60;beep=1;while(beep& clarm_switch)led1=!led1;delay_ms(100);clk_to_dis();led1=1;beep=0; while(run=0)/闹钟时间设定 clarm_to_dis();/while(!minitek)for(n=0;n1000;n+);if(!minitek=0)break;/延时防抖c_min+;led1=0; for(n=0;n20;n+) speaker=!speaker; delay_10us(50);/蜂鸣器

16、响 if(c_min=60)c_min=0x00;while(!minitek); /等待键松开 led1=1;/显示灯 while(!hourk)for(n=0;n1000;n+);if(!hourk=0)break;c_hou+;led1=0;for(n=0;n7)speaker_num=2*hour; /整点到 设定报时次数 蜂鸣标志 置1 beep=1;if(hour=24)hour=0;calculate=1;/0点到,日期标志加一 TR1=1;/*定时器中断T1*/timer1() interrupt 3 using 3 TH1=0xfc; TL1=0x18;P0=0xff;led

17、_wei=1;led_wei=0;P0=segdisi;led_duan=1;led_duan=0;P0=wei;led_wei=1;led_wei=0;if(+i=8)i=0;wei=_cror_(wei,1); /*外中断0*/int_0() interrupt 0 clarm_switch=!clarm_switch;/ 闹钟开关if(clarm_switch)dis7=12;/ 开启显示 开启第一位显示C else dis7=11;/ 关闭 不显示 for(k=0;k40;k+)speaker=!speaker;led1=!led1;delay_ms(5);led1=1;/*外中断1*/int_1() interrupt 2/闹钟时间设置/运行 转换开关run=!run;if(run)led2=0;else led2=1;for(k=0;k90;k+)speaker=!speaker;/ 蜂鸣器响led1=!led1; / 指示灯闪烁delay_10us(100);led1=1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1