网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章 数字钟系统设计.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 数字钟系统设计

第3章 数字钟系统设计 本章主要内容 一目的和要求 二设计原则 三 各模块的设计 四 总调试和小结 一、设计目的和要求 1、目的: (1) 掌握单片机硬件资源的合理运用。 (2) 掌握模块化程序设计的基本方法和设计过程。 (3) 比较汇编语言程序与C语言程序的不同。 2、要求: 芯片:AT89C51; 功能:设计完成具有计时、调时、调闹多种功能的产品化的电子钟:上电即开始计时,用K0实现设置/工作状态的转换;K2 实现闹钟设置/工作状态的转换,K1实现时、分、秒的+1调整,K3实现停闹。。用LED0—LED5实现时、分、秒的显示,修改“时”时,加到23后“清0”,再加1;修改“分”时,加到59后“清0”,再加1。 二、设计原则 ① 程序整体结构清晰、简洁、流程合理,主程序尽可能简单明了。 ② 各种功能的实现应采用模块化、子程序化,以便于编制、阅读、连接、移植、修改和调试。 ③ 对各函数功能、参数及返回值类型等要明确,以便于分析调试。 ④ 程序存储区、数据存储区、寄存器区、位寻址区、堆栈区应规划合理,做到既节约资源又不会发生相互间的冲突。 ⑤ 运行状态标志化管理,对各功能程序的运行结果、操作状态应设置状态标志,以便查询和实现运行控制。 ⑥ 运用软件或软硬件相结合等方法抑制干扰,提高系统的抗干扰能力。 ⑦ 必要时可结合硬件采取加密措施。 三、各模块的设计 1、主函数 2、显示 3、键盘扫描 4、调时、调闹 5、显示缓冲刷新 6、中断服务 7、闹钟比较等 * 江阴职业技术学院电子工程系 * 江阴职业技术学院电子工程系 //调时闹时功能的电子钟 #includereg51.H #define s0 0x01//调时/工作/移位 #define s1 0x02//+1调时、调闹 #define s2 0x10//调闹/工作/移位 #define s3 0x08//停闹 const unsigned char seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char cout=0,sec=0,min=0,hour=0,asec=0,amin=0,ahour=0,time[6]={0}; //时分秒,闹时分秒变量 bit sflag=0,saflag=0,alarm=0; //工作/调时标志,工作/调闹标志,闹有效标志 unsigned char test(void);//键盘测试,返回!0表有键按下 unsigned char scan(void);//键盘扫描,返回键值 void secadd(void);//调时调闹秒+1 void minadd(void); void houradd(void); void display(void);//显示 void delay(void);//延时 void alarmbee(void);//置闹 unsigned char comp();//闹时比较 void change(void);//时分秒对显示缓冲刷新(拆字) void hchange(unsigned char);//时刷新 void mchange(unsigned char);//分刷新 void schange(unsigned char);//秒刷新 main() {unsigned char t,work=0; //WORK为工作状态标志0:准备调时 1:调时,2:调分,3:调秒 TMOD=0X01; TH0=0X3C; TL0=0XB0; TR0=1; ET0=1; EA=1; while(1) { display(); if(alarm){ if(comp())alarmbee(); t=scan(); switch(t) {case s0:if(!saflag) if(work==0){sflag=1;ET0=0;work++;} else if(work=2)work++; else {work=0;ET0=1;sflag=0;}break; case s1:if(work==1)houradd(); else if (work==2)minadd(); else if(work==3)secadd();break; case s2: if(!sflag) i

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档