实时电子钟单片机课程设计.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计报告 设计题目: 实时电子钟 班 级: 姓 名: 学 号: 20094082044 指导教师: 调试地点: 调试时间: 2011-11-30 成 绩: 一、设计任务及要求。 1、用单片机定时器设计实时钟程序 2、具有时间调整功能 3、时间尽量准确 二、总体设计思路及功能描述(附框图)。 1、总体方案构思:通过使用定时计数器以及中断溢出,50ms中断溢出一次,溢出20次为1S。所以当定时溢出计数变量temp自加20次时计数变量miao自加1,直到加到第60次时miao(秒)清零,并且计数变量fen自加1,直到fen加到第60次时,fen(分)清零且shi(时)自加1,直到shi加到第24次时,shi(小时)清零。最后经译码后,通过扫描显示模块程序将得到的时钟结果以动态显示的方式显示在8位一体共阳数码管上;通过键盘扫描程序和按键程序实现时间调整功能,当按下键1时,shi加1,当按下键7时,shi减一,当按下键4时,fen加1,当按下键5时,fen减1,当按下键8时,时间清0,从0开始计时。 三、各部分软硬件设计原理及方案详细说明。 硬件原理图如下 显示模块电路 正确计时及显示时间 按键模块电路 对小时,分进行调整,以及对计时进行清0. 系统主源程序流程图如下图所示,源程序见附件。 图4.1 系统主程序流程图 各子程序模块及说明 初始化定义函数 void init() { flag=0; P0=0xff; temp=0; miao=0; fen=0; shi=0; CLK=0; TMOD=0X01;//定时器0初始化 TH0=0x3C; TL0=0xB0; EA=1; ET0=1; TR0=1; } 定时计数器中断函数 重装初值,开始计数 对溢出中断计数,并判断是否为20次,若是则temp清零秒加1;判断秒是否加到59,若秒加到59,则秒清零分加1;判断分是否分是否加到59,若分加到了59,则分清零时加1;判断时是否加到23,若时加到23,则时清零。 void timer0() interrupt 1//定时计数器0中断程序,每当定时计数器溢出时触发中//断,执行该程序 { TH0=0x3C; TL0=0xB0; if(temp==20) { temp=0; if(miao==59) {miao=0; if(fen==59) {fen=0; if(shi==23) shi=0; else shi++; } else fen++; } else miao++; } else temp++; s1=shi/10; s0=shi%10; f1=fen/10; f0=fen%10; m1=miao/10; m0=miao%10; } 显示函数 显示指定的位及数字 void display(char wei,char shu) { uchar m,n; clear164(); DIN=0; for(n=wei;n0;n--)//去掉没有显示的位数 { CLK=0; CLK=1; DIN=1; } CLK=0; CLK=1; P0=tabdu[shu]; //显示号码的位数 delay(1); P0=0xff; for(m=8-wei;m0;m--)//去掉剩下的位数 { DIN=1; CLK=0; CLK=1; } } 按键调整程序 按相应的键,完成对时间的调整。 uchar keyscan() { char i,j; j=0; clear164(); P0=0xff; //清除没有用到的位显示 DIN=0; for(i=0;i8;i++) { CLK=0; CLK=1; DIN=1; if(key==0) //判断检测端口是否为0,若是就为按键值 { delay(10); if(key==0) { while(!key); //松手检测 j=i+1; } } } return j; } void set() { hao=keyscan(); switch(hao) { case 8:{shi=0,fen=0,miao=0}break; case 1:{shi++; if(shi

文档评论(0)

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

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

1亿VIP精品文档

相关文档