单片机数字钟课件

上传人:风*** 文档编号:241647655 上传时间:2024-07-12 格式:PPTX 页数:34 大小:836.19KB
返回 下载 相关 举报
单片机数字钟课件_第1页
第1页 / 共34页
单片机数字钟课件_第2页
第2页 / 共34页
单片机数字钟课件_第3页
第3页 / 共34页
点击查看更多>>
资源描述
江江阴阴职职业业技技术术学学院院电电子子工工程程系系第第3章章 数字钟系统设计数字钟系统设计本章主要内容本章主要内容一一目的和要求目的和要求二设计原则二设计原则三三 各模块的设计各模块的设计四四 总调试和小结总调试和小结第3章 数字钟系统设计本章主要内容1江阴职业技术学院电子工程系江阴职业技术学院电子工程系一一 设计目的和要求设计目的和要求1 目的:(1)掌握单片机硬件资源的合理运用。(2)掌握模块化程序设计的基本方法和设计过程。(3)比较汇编语言程序与C语言程序的不同。一 设计目的和要求1 目的:2江阴职业技术学院电子工程系江阴职业技术学院电子工程系n2 要求:n芯片:AT89C51;n功能:设计完成具有计时、调时、调闹多种功能的产品化的电子钟:上电即开始计时,用S0实现设置/工作状态的转换;S1 实现闹钟设置/工作状态的转换,S2实现时、分、秒的+1调整。用LED0LED5实现时、分、秒的显示,修改“时”时,加到23后“清0”,再加1;修改“分”时,加到59后“清0”,再加1。2 要求:3江阴职业技术学院电子工程系江阴职业技术学院电子工程系二设计原则二设计原则n 程序整体结构清晰、简洁、流程合理,主程序尽可能简单明了。n 各种功能的实现应采用模块化、子程序化,以便于编制、阅读、连接、移植、修改和调试。n 对各函数功能、参数及返回值类型等要明确,以便于分析调试。n 程序存储区、数据存储区、寄存器区、位寻址区、堆栈区应规划合理,做到既节约资源又不会发生相互间的冲突。n 运行状态标志化管理,对各功能程序的运行结果、操作状态应设置状态标志,以便查询和实现运行控制。n*运用软件或软硬件相结合等方法抑制干扰,提高系统的抗干扰能力。n*必要时可结合硬件采取加密措施。二设计原则 程序整体结构清晰、简洁、流程合理,主程序尽4江阴职业技术学院电子工程系江阴职业技术学院电子工程系数字钟程序模块划分数字钟程序模块划分5江阴职业技术学院电子工程系江阴职业技术学院电子工程系 各模块对应的函数声明如下:void display(unsigned char*p);/6位LED扫描函数,指针p为显示数据区 首地址 unsigned char keytest();/测试键盘有无键按下 unsigned char search();/查键值函数 void alarm();/闹钟判断启动函数 void ftion0();/时钟修改函数 void ftion1();/闹钟修改程序 void cum();/增1程序 void clock()interrupt 1;/中断函数,该函数无需声明 各模块对应的函数声明如下:6江阴职业技术学院电子工程系江阴职业技术学院电子工程系C51程序与汇编语言程序变量定义对应关系程序与汇编语言程序变量定义对应关系 C51程序与汇编语言程序变量定义对应关系 7江阴职业技术学院电子工程系江阴职业技术学院电子工程系C51程序与汇编语言程序变量定义对应关系程序与汇编语言程序变量定义对应关系 C51程序与汇编语言程序变量定义对应关系 8江阴职业技术学院电子工程系江阴职业技术学院电子工程系主程序框图主程序框图9江阴职业技术学院电子工程系江阴职业技术学院电子工程系C51程序源代码程序源代码#pragma SMALL#include REG51.H#include absacc.h/*函数声明*void display(unsigned char*p);/6位LED扫描函数,指针p为显示数据区首地址unsigned char keytest();/测试键盘有无键按下unsigned char search();/键盘扫描程序void alarm();/闹钟程序void ftion0();/时钟修改程序void ftion1();/闹钟修改程序void cum();/增1程序C51程序源代码10江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*全局变量定义*unsigned char clockbuf3=0,0,0;/存放时、分、秒的十进制数unsigned char bellbuf3=0,0,0;/存放闹钟时、分、秒的十进制数unsigned char msec1,msec2;/msec1:10 ms中断次数,msec2:1 s循 环次 数unsigned char timdata,rtimdata;/时钟和闹钟修改位置标志unsigned char count;/闹钟启动后10 s计时单元unsigned char *dis_p;/显示缓冲区指针unsigned char fcount;/闪烁计数单元bit armbit;/闹钟标志,armbit=0,闹钟没有设 定;armbit=1,闹钟已设定bit rtimbit;/闹钟是否启动标志,rtimbit=1,闹钟已启动 bit rhourbit;/闹钟小时修改标志,rhourbit=1,正在修改闹钟小时bit rminbit;/闹钟分修改标志,rminbit=1,正在修改闹钟分钟bit hourbit;/时钟小时修改标志,hourbit=1,正在修改时钟小时bit minbit;/时钟分修改标志,minbit=1,正在修改时钟分钟bit secbit;/时钟秒修改标志bit flash;/闪烁标志位sbit P10=P10;sbit P27=P27;/*全局变量定义*11江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*主函数*main()unsigned char a;armbit=0;/清零闹钟标识位 bellbuf0=23;/设置闹钟单元初值 bellbuf1=59;clockbuf0=23;/设置时钟单元初值 clockbuf1=59;clockbuf2=59;msec1=0;/设置10 ms中断次数初值 msec2=0;/设置1 s中断次数初值 timdata=0;/时钟内容修改位置记忆单元清零 rtimdata=0;/闹钟内容修改位置记忆单元清零 count=0;/闹钟启动后保持10 s计时单元清零 fcount=0;/闪烁计数单元清零 flash=0;/闪烁标志位清零 /*主函数*12江阴职业技术学院电子工程系江阴职业技术学院电子工程系 TMOD=0 x12;/初始化定时器,定时器T0方式2,定时器T1方式1 TL0=0 x06;/定时250 s初始值 TH0=0 x06;TH1=0X3C;TL1=0XB0;EA=1;/中断允许控制断 ET0=1;/定时器0开中断 TR0=1;/启动定时器0 dis_p=clockbuf;/将时钟值送入显示指针dis_p=1;TMOD=0 x12;/初始化定时器,定时器T0方式2,13江阴职业技术学院电子工程系江阴职业技术学院电子工程系 while(1)a=keytest();if(a=0 x07)/调用判别键入测试程序 display(dis_p);/无键输入调用显示程序 if(armbit=1)alarm();/判别闹钟设定否,若设定了,则调闹 钟程序 else display(dis_p);/调用显示程序作为延时去抖动 a=keytest();if(a!=0 x07)/没有抖动,则表示有键按下 a=search();/调用键号测试程序 switch(a)case 0 x00:ftion0();break;/若是时钟参数修改功能键,则调用时 钟修改程序 case 0 x01:ftion1();break;/若是闹钟参数修改功能键,则调用闹钟设定程序 case 0 x02:cum();break;/若是加1功能键,则调用加1修改程序 default:break;while(1)14江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件15江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*6位LED扫描函数*void display(unsigned char*p)unsigned char buffer=0,0,0,0,0,0;unsigned char k,i,j,m,temp;unsigned char led=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;/09的显示码 buffer0=p0/10;/将缓冲区中的数的 十 位和个位分开 buffer1=p0%10;buffer2=p1/10;buffer3=p1%10;buffer4=p2/10;buffer5=p2%10;/*6位LED扫描函数*16江阴职业技术学院电子工程系江阴职业技术学院电子工程系 for(k=0;k3;k+)temp=0 x20;if(flash&secbit)buffer4=10;buffer5=10;if(flash&(minbit|rminbit)buffer2=10;buffer3=10;if(flash&(hourbit|rhourbit)buffer0=10;buffer1=10;for(i=0;i=1;for(m=0;m50;m+);/每一位显示延时 P2=0X80;/灭显示 for(k=0;k3;k+)17江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件18江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*键盘测试函数*unsigned char keytest()unsigned char c;P3=0XFF;c=P3;c=c&0 x07;return(c);/*键盘测试函数*19江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件20江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*扫描键盘得到键值函数*unsigned char search()unsigned char a,b,c,i;P3=0 xff;a=P3&0 x07;while(1)if(a=0 x06)b=0;break;/有s0键按下 else if(a=0 x05)b=1;break;/有s1键按下 else if(a=0 x03)b=2;break;/有s2键按下 do display(dis_p);while(c=keytest()!=0 x07);/等待键释放 for(i=0;i10;i+)display(dis_p);/延时消抖 do display(dis_p);while(c=keytest()!=0 x07);/等待键释放 return(b);/*扫描键盘得到键值函数*21江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件22江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*闹钟函数*void alarm()P10=1;if(clockbuf0=bellbuf0)&(clockbuf1=bellbuf1)P10=0;rtimbit=1;/设置闹钟计时标志,时钟将进行10 s计时 if(count=10)/判断闹钟保持10 s时间到否 count=0;/清除闹钟保持10 s计时 P10=1;/清除闹钟 armbit=0;/清闹钟标识,否则闹钟设置将继续保持有效 rtimbit=0;/*闹钟函数*23江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件24江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*时钟修改函数*/void ftion0()TR0=0;/关定时器 rhourbit=0;/禁止闹钟时间参数修改,清闹钟修改标识 rminbit=0;dis_p=clockbuf;/将时钟缓冲区首地址送显示指针 rtimdata=0;/清闹钟修改位置标识记录 timdata+;/将时钟修改记录值加1 switch(timdata)case 0 x01:secbit=1;ET1=1;flash=1;TR1=1;break;/若记录值为1,则 将时钟秒修改标识置1 case 0 x02:secbit=0;minbit=1;break;/若记录值为2,则将时钟分修改标 识置1 case 0 x03:minbit=0;hourbit=1;break;/若记录值为3,则将时钟时修改 标识置1 case x04:timdata=0;hourbit=0;flash=0;ET1=0;TR1=0;TR0=1;break;/若按4次,则清时钟单元修改位 default:break;/*时钟修改函数*25江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件26江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*闹钟修改函数*void ftion1()secbit=0;/禁止时钟时间修改 minbit=0;hourbit=0;dis_p=bellbuf;/设置闹钟显示标志 timdata=0;/清时钟修改位置标识记录 rtimdata+;/将闹钟修改记录值加1 switch(rtimdata)case 0 x01:rminbit=1;flash=1;ET1=1;TR1=1;break;/若记录值为 1,则将闹钟分修改标识置1 case 0 x02:rminbit=0;rhourbit=1;break;/若记录值为2,则将时 钟分修改标识置1 case 0 x03:rtimdata=0;rhourbit=0;/若按3次,则清闹钟单元修改 位置记录 flash=0;ET1=0;TR1=0;armbit=1;/设置闹钟已设定标志位 dis_p=clockbuf;/恢复时钟显示标志 break;default:break;/*闹钟修改函数*27江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件28江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*增增1函数函数*void cum()if(secbit=1)/若时钟秒修改标识为若时钟秒修改标识为1,则秒单元内容加,则秒单元内容加1 if(clockbuf2=59)clockbuf2=0;else clockbuf2+;else if(minbit=1)/若时钟分修改标识为若时钟分修改标识为1,则分单元加,则分单元加1 if(clockbuf1=59)clockbuf1=0;else clockbuf1+;else if(hourbit=1)/若时钟小时修改标识为若时钟小时修改标识为1,则小时单元内容加,则小时单元内容加1 if(clockbuf0=23)clockbuf0=0;else clockbuf0+;else if(rminbit=1)/若闹钟分修改标识为若闹钟分修改标识为1,则分单元加,则分单元加1 if(bellbuf1=59)bellbuf1=0;else bellbuf1+;else if(rhourbit=1)/若闹钟小时修改标识为若闹钟小时修改标识为1,则小时单元加,则小时单元加1 if(bellbuf0=23)bellbuf0=0;else bellbuf0+;/*增1函数*29江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件30江阴职业技术学院电子工程系江阴职业技术学院电子工程系/*定时器0中断函数*void clock()interrupt 1 EA=0;/关中断 if(msec1!=40)msec1+;/到10 ms否,不到则msec1加1 else msec1=0;if(msec2!=100)msec2+;/到1 s否,不到则msec2加1 else if(rtimbit=1)count+;msec2=0;if(clockbuf2!=59)clockbuf2+;/到1 min否,不到则clockbuf2加1 else clockbuf2=0;if(clockbuf1!=59)clockbuf1+;/到1 h否,不到则clockbuf1加1 else clockbuf1=0;if(clockbuf0!=23)clockbuf0+;/到1 min否,不到clockbuf2加1 else clockbuf0=0;EA=1;/开中断/*定时器0中断函数*31江阴职业技术学院电子工程系江阴职业技术学院电子工程系单片机数字钟课件32p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后经常不断地学习,你就什么都知道。你知道得越多,你就越有力量写33Thank You在别人的演说中思考,在自己的故事里成长Thinking In Other PeopleS Speeches,Growing Up In Your Own Story讲师:XXXXXX XX年XX月XX日Thank You34
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!