基于mcs51单片机的多功能秒表设计微机原理与应用课程设计报告(编辑修改稿)内容摘要:

//测试行 GPIO_KEY=0XF0。 switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue。 break。 case(0Xb0): KeyValue=KeyValue+4。 break。 case(0Xd0): KeyValue=KeyValue+8。 break。 case(0Xe0): KeyValue=KeyValue+12。 break。 } while((a50)amp。 amp。 (GPIO_KEY!=0xf0)) //检测按键松手检测 { Delay10ms(1)。 a++。 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 } a=0。 } } } ( 3) 显示子程序 这里采用动态显示,方便调用,源程序如下: void DigDisplay(void) //显示子程序 { unsigned char i。 unsigned int j。 for(i=0。 i8。 i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0。 LSB=0。 LSC=0。 break。 //显示第 0 位 case(1): LSA=1。 LSB=0。 LSC=0。 break。 //显示第 1 位 case(2): LSA=0。 LSB=1。 LSC=0。 break。 //显示第 2 位 case(3): LSA=1。 LSB=1。 LSC=0。 break。 //显示第 3 位 case(4): LSA=0。 LSB=0。 LSC=1。 break。 //显示第 4 位 case(5): LSA=1。 LSB=0。 LSC=1。 break。 //显示第 5 位 case(6): LSA=0。 LSB=1。 LSC=1。 break。 //显示第 6 位 case(7): LSA=1。 LSB=1。 LSC=1。 break。 //显示第 7 位 } GPIO_DIG=DisplayData[i]。 //发送段码 j=50。 //扫描间隔时间设定 while(j)。 GPIO_DIG=0x00。 //消隐 } } ( 4) 存储子程序 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 当存储 /回放键按下,即 keyvalue=13,且定时器 0为启动状态时,对当前时间进行存储,设置 t1为计时次数。 源程序如下: void cuncu() //存储程序 { t1++。 //t1 为计时次数 a=3*(t11)。 // 修改 1 :原来存储指针计算错误,添加 a=3*(t11)指针计算 if(t1=20) { aa[a]=min。 delay(20)。 a++。 aa[a]=sec。 delay(20)。 a++。 aa[a]=ms_10。 delay(20)。 t11=t1。 } } ( 5) 回放子程序 当存储 /回放键按下,即 keyvalue=13,且定时器 0 为关闭状态时,对当前存储时间进行回放,从最后一次会放至第一次,然后再循环回放,源程序如下: void huifang()//回放子程序 { if(t1==0)t1=t11。 if(t10){b=3*(t11)。 DisplayData[7]=zxma[t1/10]。 //数码管 6显示次数 DisplayData[6]=zxma[t1%10]+128。 DisplayData[5]=zxma[aa[b]/10]。 DisplayData[4]=zxma[aa[b]%10]+128。 //数码管 4显示分钟 b++。 DisplayData[3]=zxma[aa[b]/10]。 //数码管 2显示秒 DisplayData[2]=zxma[aa[b]%10]+128。 b++。 DisplayData[1]=zxma[aa[b]/10]。 //数码管 0显示 10ms DisplayData[0]=zxma[aa[b]%10]。 t1。 } DigDisplay()。 } ( 6) 倒计时子程序 倒计时程序是软件设计的一大难点,也是我新拓展的功能,首先要解决如何用按键赋倒计时初值的问题,其次再实现倒计时也比计时麻烦一些。 我编写的程序相对比较繁琐,也许有待进一步精简完善。 设置 xian()子程序方便调用,源程序如下: void daojis() { ms_10=0,sec=0,min=0,m1=0,m0=0,s1=0,s0=0。 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 while(1){ KeyDown()。 if(KeyValue6){m1=KeyValue。 KeyValue=11。 //第一次按键为秒的低位 while(1){KeyDown()。 if(KeyValue10){m0=KeyValue。 KeyValue=11。 while(1){KeyDown()。 if(KeyValue6){s1=KeyValue。 KeyValue=11。 while(1){KeyDown()。 if(KeyValue10){s0=KeyValue。 while(1) { KeyDown()。 xian()。 if(KeyValue==15){ms_10=1。 F2=1。 TR1=1。 KeyValue=0。 if(F2==1)break。 } // ms_10=1。 } } if(F2==1)break。 xian()。 } xian()。 } if(F2==1)break。 xian()。 } xian()。 } if(F2==1)break。 xian()。 } xian()。 } if(F2==1)break。 xian()。 } } void xian() { min=m1*10+m0。 sec=s1*10+s0。 DisplayData[7]=zxma[min/10%10]。 //分 DisplayData[6]=zxma[min%10]。 //分 DisplayData[5]=0x40。 DisplayData[4]=zxma[sec/10%10]。 //秒 DisplayData[3]=zxma[sec%10]。 //秒 DisplayData[2]=0x40。 DisplayData[1]=zxma[ms_10/10%10]。 // 秒 DisplayData[0]=zxma[ms_10%10]。 // 秒 DigDisplay()。 } ( 7)其他 还有一些比较简单的程序,如延时子程序,蜂鸣器发声子程序等,详见附录三。 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 硬件调试 通电调试,检查开发板是否正常,矩阵键盘按键,各个数码管是否正常工作。 软件调试 软件调试 其实是穿插在软件设计的整个过程当中的,也是课程设计中最难同时也最重要的一步。 由于是第一次做课程设计,当然软件调试中遇到了各种各样的问题: ( 1) 编写好程序后,发现定时器不工作,然后查找原因,发现是定时器初始化有问题,因为一开始我是分别对两个定时器初始化,这样在对第二个定时器初始化时就影响到了定时器 1。 ( 2) 对存储的时间进行回放时,发现回放显示的时间与预期的不一致,与同学讨论之后没能解决,最后联系老师问题才得以解决,原来是存储程序中存储指针计算错误,即 修改 1 : 原来存储指针计算错误,添加 a=3*(t11)指针计算。 ( 3) 秒表倒计时程序编写经过多次调试才得以成功,还有矩阵按键输入初值时,刚开始没有考虑对键值进行约束和清零,消除对后面读取键值的影响。 ( 4) 用 proteus 仿真得到的部分回放结果如图 12 所示: 当前回放至第八次计时,时间为 1:02:21。 图 12 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 再按一次回放键结果如 图 13所示 : 显示第七次计时 ,时间为 1:01:01 图 13 再按一次回放键结果如图 14所示 : 显示第六次计时,时间为 00:44:47 中国矿业大学信息与 电气工程学院《微机原理与应用》课程设计 图 14 通过本次课程设计,我深刻地认识到自己有很多不足之处,比如在自主学习能力方面的不足,实际动手操作能力的不足等。 这次的 微机原理 课程设计是理论与实践相结合的范例。 该设计从头到尾都要 自己参与进来,熟悉了整个设计流程才能更快地设计出方案并完成设计,但是 本次课程设计 我还是也投入了大量的时间。 微机原理 课程早已结束,相关的知识 有些 已经很模糊,导致我在设计硬件电路中遇到了不少麻烦。 首先由于是第一次接触课程设计,很多地方都 不知从何入手。 但是通过分析秒表的多种功能,我试着把每个部分模块化,把任务分解化, 如晶体振荡电路,复位电路,按键电路,显示电路。 完成设计后需要运用 PROTEUS软件进行设计仿真,由于这是第一次接触这个软件,还不知怎样运用它,查阅该软件的相关资料及看过网上的视频后便开始着手画图,接触后觉得还是挺简单的。 从搜索资料到硬件、软件的调试,每一步、每一个细节都经过自己的思考, 经过 各方案的比较选择、硬件、软件的设计和调试,最终 完成了多功能秒表。 在做的过程中不但加深了我们对单片机理论知识的认识和理解还认识到了这门学科在应用方面的广阔前景。 实践是最有高度也是最能体现整体水平的整个设计过程中,设计出了很 多不一样的硬件电路图,写过了很多不一样的程序,正如设计中如何能使硬件电路图简单明了,程序简单而准确,如何能准确的运行,都是通过与同学老师的交流,慢慢摸索出来的。 以上的不断探索, 让我 进一步熟悉和掌握单片机内部结构和工作原理,了解单片机应用系统设计的基本步骤和方法。 通过利用 AT89C51 单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法。 通过设计一个简单的实际应用输入及显示模拟系统,掌握单片机仿真软件 PROTEUS 的使用方法。 此次设计不足之处: ( 1)此次设计由于主要集中在秒表功能的拓展,对秒表供电这一部分没有过多的讨论,还有 待补充; ( 2)我所能想到的秒表应该实现的功能已基本实现,其他功能还可以拓展。 ( 3)该秒表在启动倒计时后,无法立即清零,只有在输入初值,启动倒计时后才可以对其清 零,当然,这不影响秒表的使用。 此次 设计的这种具有 存储 记录, 手动设置初值倒计时 功能的秒表在现实生活中应用广泛 ,如体育项目,因此本次课程设计具有现实意义,我很开心能将知识运用到实践中并在自主学习中收获到那么多。 最后,我要感谢宗伟林老师给与我的支持与帮助,里面几个问题都是 请教老师才得以解决,而且老师给我提供了一些建议,让我在自己的设计上加以改进,例如将启动停止键,存储回放键合二为一,这些改进让多功能秒表更加实用完美。 中国矿业大学信息。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。