非常详细 单片机 数码管LED 显示电子钟_第1页
非常详细 单片机 数码管LED 显示电子钟_第2页
非常详细 单片机 数码管LED 显示电子钟_第3页
非常详细 单片机 数码管LED 显示电子钟_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机 数码管LED 显示电子钟(C语言)转载收藏人:shengshiguanjia2010-11-24 | 阅:862 转:50 | 来源| 分享单片机 数码管LED 显示电子钟(C语言)转载2010-10-22 01:32 /* * 标题: 数码管显示电子钟(C语言) * 作者: wentao * 软件: Keil C51 V8.02 * 芯片: AT89X51 * 说明: 实验板实测通过,数码管为8位共阳 * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业 * #include <reg51.h> #include <intrins.h> #de

2、fine uchar unsigned char void delay_ms(uchar ms); / 延时毫秒12M,ms最大值255 void key_scan(); / 按键扫描 void key_to(); / 按键处理 uchar code dis_code11 = 0xc0,0xf9,0xa4,0xb0,0x99, /段 / 0 1 2 3 4 0x92,0x82,0xf8,0x80,0x90,0xbf; / 5 6 7 8 9 - uchar data dis8; / dis0为秒个位值,dis1为秒十位值 / dis2,dis5为'-'段码的偏移量 / dis3

3、为分个位值,dis4为分十位值 / dis6为时个位值,dis7为时十位值 uchar data sec = 0; / 秒计数器(00s-59s) uchar data min = 0; / 分计数器(00m-59m) uchar data hou = 0; / 时计数器)00h-23h) uchar data cou = 0; / 软计数器,对10ms时基信号累加到1s uchar data dis_b; / dis_b为位码选通数码管 uchar data dis_r; / dis_r为取段码时的偏移量 uchar data key_v = 0; / 存储键值 uchar data key

4、_t = 0; / 按键扫描中临时存储键值 void main() P2 = 0xff; / 关所有数码管 P1 = 0xff; / p1为准双向口,作输入时先写1 dis2 = 10; / '-'在段码表中偏移量为10 dis5 = 10; / '-'在段码表中偏移量为10 dis_b = 0x7f; / 初始选通P2.7口数码管 dis_r = 0; / 初始化偏移量为0 TMOD = 0x11; / 定时/计数器0,1工作于方式1 TH0 = 0xd8; / 预置定时常数55536(d8f0),产生10ms时基信号 TL0 = 0xf0; TH1 = 0x

5、fc; / 预置定时常数64536(fc18),产生1ms间隔用于动态显示 TH1 = 0x18; EA = 1; / 开总中断 ET0 = 1; / 定时/计数器0允许中断 ET1 = 1; / 定时/计数器1允许中断 TR0 = 1; / 开闭定时/计数器0 TR1 = 1; / 启动定时/计数器1 while(1) key_t = P1; / 读入键值 if(key_t != key_v) / 键值改变 delay_ms(10); / 延时10ms消抖 key_t = P1; / 再次读入键值 if(key_t != key_v) / 键值仍未改变则不是抖动 key_v = key_t;

6、 / 保存键值 key_to(); / 键处理 void key_to() / 按键处理子程序 if(key_v = 0xef) / P1.4口键值 if(min = 59) / 分计数已加到59 min = 0; / 清零之 else min+; / 否则加1 else if(key_v = 0xdf) if(hou = 23) hou = 0; else hou+; void tiem0(void) interrupt 1 cou+; if(cou = 100) cou = 0; sec+; if(sec = 60) sec = 0; min+; if(min = 60) min = 0;

7、 hou+; if(hou = 23) hou = 0; TH0 = 0xd8; TL0 = 0xf0; / P1.5口键值 / 时计数已加到23 / 清零之 / 否则加1 / T/C0中断服务程序(产生10ms时基信号) / 软计数器加1 / 计数值到100(1s) / 软计数器清零/ 秒计数器加1(进位10ms*100=1s) / 秒计数值到60 / 秒计数器清零/ 分计数器加1(进位60s=1m) / 分计数到60 / 分计数器清零/ 时计数器加1(进位60m=1h) / 时计数到23 / 时计数器清零 / 重置定时常数 void time1(void) interrupt 3 / T/

8、C1中断服务程序(延时1ms数码管动态显示) dis0 = sec % 10; / 秒计数器个位赋绐dis0 dis1 = sec / 10; / 秒计数器十位赋绐dis1 dis3 = min % 10; / 分计数器个位赋绐dis3 dis4 = min / 10; / 分计数器十位赋绐dis4 dis6 = hou % 10; / 时计数器个位赋绐dis6 dis7 = hou / 10; / 时计数器十位赋绐dis7 P0 = dis_codedisdis_r; / 段码送P0口(dis0.dis7) P2 = dis_b; / 位码送P2口 dis_r+; / 偏移量加1,下次中断时显示下个数 dis_r &= 0x07; / dis_r增到8时自动清0(使之在0到7间循环) dis_b = _cror_(dis_b,1); / 位码循环右移,下次中断时选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论