基于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)该秒表在启动倒计时后,无法立即清零,只有在输入初值,启动倒计时后才可以对其清 零,当然,这不影响秒表的使用。 此次 设计的这种具有 存储 记录, 手动设置初值倒计时 功能的秒表在现实生活中应用广泛 ,如体育项目,因此本次课程设计具有现实意义,我很开心能将知识运用到实践中并在自主学习中收获到那么多。 最后,我要感谢宗伟林老师给与我的支持与帮助,里面几个问题都是 请教老师才得以解决,而且老师给我提供了一些建议,让我在自己的设计上加以改进,例如将启动停止键,存储回放键合二为一,这些改进让多功能秒表更加实用完美。 中国矿业大学信息。基于mcs51单片机的多功能秒表设计微机原理与应用课程设计报告(编辑修改稿)
相关推荐
国内的不少企业也引进了世界上先进的技术,发展前景非常可观。 希望通过不断的努力,使电子密码锁在我国也能得到广泛应 用。 3 2 总体设计方案的确定 电子密码锁设计的具体要求 ( 1)、 本设计为了防止密码被窃取要求在输入密码时在 LCD 屏幕上显示 *号。 ( 2)、 设计开锁密码为六位密码的电子密码锁。 ( 3)、 密码输入正确时 LCD 显示 Unlock OK!,密码错误时显示 ERROR
3。 24 辅助按键部分程序 24 错误处理部分程序 26 EEPROM 读写部分程序 26 结 论 28 参考文献 29 附录 1 系统总体电路图 30 附录 2 系统实物图片 31 致 谢 32 吉林化工学院毕业设计说明书 1 第 1 章 绪 论 按键以简单、灵活、易操作等特性被广泛应用在生活中的方方面面。 其种类繁多,具体有 薄膜按键 、 轻触按键 、 贴片按键 、 直插按键 、自锁按键
式表示 : 湖南工学院(本科)毕业设计论文 7 bbfbf (8) 闭合运算的原理是对图像进行一次膨胀运算后,再对图像进行一次腐蚀运算。 开启运算可以做到磨掉突出图像的外部棱角,闭合运算恰好相反,磨掉的是内部尖角,此外,开闭运算还具有滤波特性。 本章小结 本章所研究的主要是与本课题密切相关的一些基础理论知识,前面两节讲的是对图像进行灰度值处理以及噪声处理
h AT89S52。 3) P0、 P1口介绍 P0 口: P0 口是一组 8 位漏极开路型双向 I/O 口, 也即地址 /数据总线复用口。 作为输出口用时,每位能吸收电流的方式驱动 8 个 TTL逻辑门电路,对端口 P0 写 “1” 时,可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在 Flash
()xn是发送端发送的信息序列, ()hn是传输信道的信道相应, ()dn是信道中加入的噪声, ()yn是接收端所接收到的信息序列, ()wn 是均衡器的抽头系数, ()zn是更新抽头系数时的均衡器输出信息序列, ^()xn是判决器输出的判决序列。 信 道 h ( n ) 均 衡 器+信 道 噪 声d ( n )判 决 器自 适 应 盲 均 衡 算 法^ ()xn xn ()yn ()zn 图
、汽轮机、发电机。 锅炉用燃料燃烧放出的热能将水加热成具有一定压力和温度的蒸汽,然后蒸汽沿管道进入汽轮机膨胀做功,带动发电机一起高速旋转,从而发电。 整个过程中存在三种能量转换过程,在锅炉中燃料的化学能转换成热能,在汽轮机将热能转换成机械能,在大电 机中将机械能转换成电能。 锅炉是发电厂最重要的能量转换设备之一。 锅炉是一种将煤炭、木材、甘蔗渣、石油