




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* 描述: * AT89S52的数码管电子钟程序 * 技术支持: * 湖南工学院 * * * * * * * * */#include#defineucharunsigned char#define uintunsigned intuchar code num=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x08, 0x8C,0x0C,0xFF,0x89,0xbf; / P, P., 灭,-uchar data ddram8=0,0,20,0,0,20,0,0;bdataf=0;sbit f_1ms=f0;sbit f_10ms=f1;sbit f_100ms=f2;sbit f_100m=f3;sbit f_1s=f4;uchar data t_c_10;uchar data t_c_100;uint data t_c_1s;typedefstruct TIME /定义时间结构体ucharsecond;ucharminute;ucharhour;TIME;TIME time; /时间变量uchar k_val;uint k_t_cn=0;uchar k_cn=0;uchar mode=0;uchar *ad_p;int main(void)void led_display(void); /数码管显示每次只显示一位通过led_p 来循环显示/void init_systerm(void);/主监控程序/void init_tc0(void); /模式一 产生1ms中断void i_tc0(void); /定时器0中断/void clock(void); /时钟进程/void horse(void);/流水灯程序/void key_scan(void); /键扫程序/void fun_act(void);/键执行程序/void time_adjust(void);/调试进程/init_systerm();while(1)horse(); /走马灯/key_scan(); /键扫描/fun_act(); /键执行程序/led_display(); /数码管显示/void led_display(void) /数码管显示每次只显示一位通过led_p 来循环显示static uchar led_p=0; if(f_1ms)f_1ms=0; /当1ms到了,就执行数码管扫描P2=(0x80led_p); /送段控,并循环7次P0=numddramled_p; /送位控,位控为数组嵌套if(led_p+ = 7)led_p=0;void init_systerm(void) / /init_tc0();/void init_tc0(void) / /EA=1;ET0=1;TMOD|=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1; /模式一 产生1ms中断 /void i_tc0(void)interrupt 1/定时器0中断产生 系统时标TH0=(65536-1000)/256;TL0=(65536-1000)%256+14; /软件调试 误差14usf_1ms=1; /产生1ms标志位if(+t_c_10 = 10)f_10ms=1;t_c_10=0;if(+t_c_100 = 100)f_100ms=1;f_100m=1;t_c_100=0; /产生100ms标志位if(+t_c_1s = 1000 )f_1s=1;t_c_1s=0; /产生1m标志位void key_scan(void) /键扫程序uchar readkey; /键盘扫描得到的键值保存与此uchar trg;uchar cont;uchar release; /if(!f_10ms)return;f_10ms=0;readkey=P10xff; /读端口 并取反trg=readkey&(readkeycont);/得到触发按键 release=readkeyconttrg; /保持按键cont=readkey; /释放按键if(trg1) /一、非K0键k_val=trg;else if(trg = 1) /K0首次按下 开始加一 k_t_cn+;else if(k_t_cn) /k_t_cn为0:没有按键按下 或 k0按下且超过1.5s动作过一次 /不为0则表示按下过if(k_t_cn150)if(cont)k_t_cn+; /K0按下且保持但未到1.5selse /二、短按键if(mode) /模式一下 按键次数处理if(k_cn+ = 2)k_cn=1;mode=0;t_c_1s=0;f_1s=0;ddram7=*ad_p%10;elseddramk_cn*k_cn=*ad_p%10; if(k_cn=1) ad_p=&time.minute;elsead_p=&time.second;else/模式 0 下 按键次数处理if(k_cn+ = 1)k_cn=0;k_t_cn=0;else/三、长按键mode=1;k_cn=0;ad_p=&time.hour;k_t_cn=0; /void fun_act(void)/键执行程序if(mode)/模式一 进入调试模式time_adjust();else/模式0 进入数字钟模式if(k_cn)clock();void clock(void)/时钟进程if(f_1s)/到1s加一f_1s=0;if(+time.second = 60)time.second=0;if(+time.minute = 60)time.minute=0;if(+time.hour = 24)time.hour =0;ddram0=time.hour/10;ddram1=time.hour%10;ddram3=time.minute/10;ddram4=time.minute%10;ddram6=time.second/10;ddram7=time.second%10; /void time_adjust(void)/调试进程uchar i;uchar limit;static uchar tc=0;i=3*(k_cn)+1;/得到需要闪烁的位在数组中的标号if(k_cn = 0)limit=24;elselimit=60;/得到时、分、秒、的数值极限if(f_100m)f_100m=0;if(tc+ = 2)/200毫秒闪烁一次/ddrami=(18&*ad_p);同样可以实现闪烁原理暂不详ddrami=(18(*ad_p%10); /通过异或实现在要显示的数字的代码和灭的代码之间的切换tc=0; if(k_val = 2) /KEY1 加k_val=0; if(+(*ad_p) = limit)*ad_p=0;ddrami=*ad_p%10;ddrami-1=*ad_p/10;/更新显示RAMelseif(k_val = 4) /KEY2 减
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版木材行业木材采购合同范本与合作伙伴选择标准
- 2025版房屋租赁合同模板:含租赁期限调整条款
- 二零二五年农村房产抵押合同标准模板下载
- 2025版房屋征收工程监理服务合同范本
- 2025年度高压电缆敷设电力建设工程合同
- 二零二五版新能源电动汽车充电网络创始股东合作协议
- 二零二五年度OEM服装生产加工合作协议书
- 2025年度农村集体产权房屋流转合同
- 2025版煤炭企业废弃物资源化利用煤矸石供应合同
- 二零二五版体育场馆租赁合同
- 数据库发展研究报告(2025年)
- 图片格式教学课件
- 2025中国消防救援政府专职消防员招聘笔试备考试题及答案解析
- 销售管理部部门管理办法
- 电力工程安全生产操作规程
- 翻模安全操作规程
- 产品停产退市管理制度
- 2025-2030中国覆铜板(CCL)行业投资策略与可持续发展建议报告
- 医院低值耗材管理制度
- 2024-2025学年广东省广州市天河区高一上学期期末考试英语试题 (解析版)
- 商业数据分析的数字化工具与应用
评论
0/150
提交评论