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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

8位数码管显示时钟.docx

1、8位数码管显示时钟8位数码管显示时钟本人依据AT89C51和8位数码管为素材,以最少的见实现最多的功能!本程序开机流动显示学号可实现时钟,日历,定时闹钟,秒表等功能!C程序:#include unsigned char led12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00; /用一维数组定义-9、横杠、全灭unsigned char num12=2,0,0,9,3,5,0,7,0,1,2,0 ;unsigned char a8; unsigned char second=0,minute=0,hour=0,year=

2、0,mon=1,day=1,day1,hsec,sec_m,min_m,N,temp1;unsigned char minute1=0,hour1=0;unsigned char void init1() S_flag=0; /闪烁标志位 TMOD=0x10; /定时器以方式定时 TH1=0xfc; TL1=0x18; EA=1; /打开总中断 ET1=1; /允许定时器中断 TR1=1; /开启定时器(开始定时计数) void init0() TMOD=0x01; /定时器以方式定时 TH0=0xff; TL0=0xff; EA=1; /打开总中断 ET0=1; /允许定时器中断 TR0=0

3、; /关闭定时器(关闭定时计数) void display_led() /流动显示学号 int x; char l,a,m; for(a=0;a21;a+) x=a-8; for(l=0;l6;l+) for(m=0;m=0&x12) P1=lednumx; else P1=led11; delay(10); x+; x-=8; void display() /显示时钟及显示调节位 switch(M) case 0: a0=ledhour/10; a1=ledhour%10; a2=led10; a3=ledminute/10; a4=ledminute%10; a5=led10; a6=le

4、dsecond/10; a7=ledsecond%10; break; case 1: if(S_flag=1) a0=ledhour/10; a1=ledhour%10; else a0=led11; a1=led11; a2=led10; a3=ledminute/10; a4=ledminute%10; a5=led10; a6=ledsecond/10; a7=ledsecond%10; break; case 2: a0=ledhour/10; a1=ledhour%10; a2=led10; if(S_flag=1) a3=ledminute/10; a4=ledminute%10

5、; else a3=led11; a4=led11; a5=led10; a6=ledsecond/10; a7=ledsecond%10; break; case 3: if(S_flag=1) a0=ledyear/10; a1=ledyear%10; else a0=led11; a1=led11; a2=led10; a3=ledmon/10; a4=ledmon%10; a5=led10; a6=ledday/10; a7=ledday%10; break; case 4: a0=ledyear/10; a1=ledyear%10; a2=led10; if(S_flag=1) a3

6、=ledmon/10; a4=ledmon%10; else a3=led11; a4=led11; a5=led10; a6=ledday/10; a7=ledday%10; break; case 5: a0=ledyear/10; a1=ledyear%10; a2=led10; a3=ledmon/10; a4=ledmon%10; a5=led10; if(S_flag=1) a6=ledday/10; a7=ledday%10; else a6=led11; a7=led11; break; case 6: if(S_flag=1) a0=ledhour1/10; a1=ledho

7、ur1%10; else a0=led11; a1=led11; a2=led10; a3=ledminute1/10; a4=ledminute1%10; a5=led10; a6=led11; a7=led11; break; case 7: a0=ledhour1/10; a1=ledhour1%10; a2=led10; if(S_flag=1) a3=ledminute1/10; a4=ledminute1%10; else a3=led11; a4=led11; a5=led10; a6=led11; a7=led11; void key_prc() /时钟和闹钟调节 if(K1=

8、0) delay(10); /延时去抖 if(K1=0) /按K1进行模式切换 M+; if(M=8) M=0; while(!K1);/等待按键释放 if(M!=0) switch(M) case 1: /模式-调时 if(K2=0) delay(10); /延时去抖 if(K2=0) /加键按下 if(hour 0) hour-; else hour=23; while(!K3); break; case 2: /模式-调分 if(K2=0) delay(10); if(K2=0) if(minute0) minute-; else minute=59; while(!K3); break

9、; case 3: /模式-调年 if(K2=0) delay(10); if(K2=0) if(year0) year-; else year=99; while(!K3); break; case 4: /模式-调月 if(K2=0) delay(10); if(K2=0) if(mon1) mon-; else mon=12; while(!K3); if(year%4=0&mon=2)day1=29;/闰年2月为29天 if(year%4!=0&mon=2)day1=28;/非闰年2月为28天 if(mon=4|mon=6|mon=9|mon=11)day1=30; if(mon=1|

10、mon=3|mon=5|mon=7|mon=8|mon=10|mon=12)day1=31; break; case 5: /模式-调日 if(K2=0) delay(10); if(K2=0) if(day1) day-; else day=day1; while(!K3); break; case 6: /模式-闹钟调时 if(K2=0) delay(10); if(K2=0) if(hour10) hour1-; else hour1=23; while(!K3); break; case 7: /模式-闹钟调分 if(K2=0) delay(10); if(K2=0) if(minut

11、e10) minute1-; else minute1=59; while(!K3); break; void display_rq() /年月日显示 if(K2=0) delay(10); if(K2=0) a0=ledyear/10; a1=ledyear%10; a2=led10; a3=ledmon/10; a4=ledmon%10; a5=led10; a6=ledday/10; a7=ledday%10; while(!K2); /等待按键释放 void key_prc2() /秒表模式转换 if(M=0) if(K3=0) delay(10); /延时去抖 if(K3=0) /按

12、K3进行模式切换 N+; if(N=2) N=0; while(!K3);/等待按键释放 void display_sec() /秒表显示 if(N=1) a0=ledmin_m/10; a1=ledmin_m%10; a2=led10; a3=ledsec_m/10; a4=ledsec_m%10; a5=led10; a6=ledhsec/10; a7=ledhsec%10; if(K2=0) delay(10); /延时去抖 if(K2=0) /加键按下 TR0=!TR0; while(!K2); /等待按键释放 void res_sec() /秒表复位 if(K1=0) delay(1

13、0); if(K1=0) min_m=0; sec_m=0; hsec=0; M=0; while(!K1) ; void main() /主程序 display_led(); init0(); init1(); while(1) key_prc(); key_prc2(); if(N=1) display_sec(); res_sec(); else display_rq(); display(); void time1() interrupt 3 /定时器中断函数 if(year%4=0&mon=2)day1=29;/闰年2月为29天 if(year%4!=0&mon=2)day1=28;

14、/非闰年2月为28天 if(mon=4|mon=6|mon=9|mon=11)day1=30; if(mon=1|mon=3|mon=5|mon=7|mon=8|mon=10|mon=12)day1=31; TH1=0xfc; /定时ms TL1=0x18; temp+; if(temp=1000) /配合定时器定时s temp=0; second+; if(second=60) second=0; if(minuteday1) day=1; mon+; if(mon12) mon=1; year+; if(year=99) year=0; if(hour1=hour&minute1=minu

15、te&K0=0) /闹钟时间到 BEEP=!BEEP; if(temp%250=0) /每ms S_flag=!S_flag; /闪烁标志位取反 if(k=8) k=0; P1=ak; P2=bk+; delay(1); P2=0xff; void sec_clo() interrupt 1 /秒表程序中断 TH0=0xff; TL0=0xff; temp1+; if(temp1=150) temp1=0; hsec+; if(hsec=100) hsec=0; sec_m+; if(sec_m=60) sec_m=0; min_m+; if(min_m=100) min_m=0; 仿真电路图:

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

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