ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:207.94KB ,
资源ID:8960696      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8960696.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计.docx

1、单片机课程设计吉林大学珠海学院课程设计报告专 业 测控技术与仪器班 级 15班学生姓名 吴聪课程名称 单片机课程设计任课老师 刘立勋 张弓设计时间 2014/11/15-2014/11/29设计地点 实验楼吉林大学珠海学院电子信息系 2014 年 11 月 29 日一设计内容及设计任务 二本次课程设计已实现的功能三电路原理图及PCB丝印图(系统概述和细节描述)四软件环境及调配下载工具、软件流程图及设计思想、软件功能及模块描述、主要程序及注释五尚未完成工作的困难及解决思路六本次设计的收获心得 一. 设计内容及设计任务设计内容:基于51构架单片机的电子沙漏设计设计任务:10-99S计时可设置2显示

2、数值永远向上3A组倒计时B组正计时4翻转后计时沙漏式反正5水平放置停止计时6计时溢出蜂鸣报警7LED水滴效果8设定数据掉电可保持*9可设定加减模式、分钟模式*10设计电子钟功能*二本次课程设计已实现的功能 本次课程设计我们组已完成0-99S计时可设置,显示数值永远向上,A组倒计时B组正计时,翻转后计时沙漏反正,水平放置停止计时,计时溢出蜂鸣报警,LED水滴效果等功能三电路原理图及PCB丝印图系统概述:该系统由MCU电路(STC89C52RC),蜂鸣器电路,串口下载电路,复位电路,晶振电路,感应开关电路,两个数码管电路,按键设置电路组成。细节描述:MCU电路:STC89C52RC芯片有40个引脚

3、,其中VCC引脚接+5V,VSS引脚接地,EA/V PP引脚接+5V,并行I/O口中P0口的8个引脚分别接到数码管A,B,C,D,E,F,G,DP端口,用来控制要显示的数字。P2口的8个引脚接到DS1-DS8 8个发光二极管,而P1.5 ,P1.6,P1.7分别接DS9-DS11 3个发光二极管,用来控制发光二极管的亮灭。P1.0,P1.1,P3.6,P3.7分别通过4个三极管控制4个数码管,当其中某位为低电平时,那个位所控制的数码管就会点亮。XTAL1和XTAL2分别接到复位电路的两端。P3.2,P3.3引脚分别接到两个水银开关,P3.0,P3.1分别接到串口下载电路的RX端和TX端。P1.

4、2引脚接到按键电路的KEY1端,P3.5引脚接到蜂鸣器电路的BELL端,RST引脚接到复位电路的RST端。 晶振电路:由两个33pF的电容和一个12M的晶体振荡器组成,为单片机提供时钟号,单片机的工作速度为每秒12M。 复位电路:+5V电压通过10uf电解电容接到单片机的RST引脚,并下拉一个10K电阻。电容在上电瞬间给RST端提供一段时间(大于2个机器周期)的高电平,就能使单片机复位,等电容充电结束,RST变为低电平(=0.5v), 又恢复正常工作。 蜂鸣器电路:1K电阻接到三极管(PNP)的基极,集电极接+5V电压,发射极接蜂鸣器的一端,另一端接地。1K电阻是限流电阻,防止电流过大烧坏单片

5、机。 当P3.5口为低电平时,三极管导通,有源蜂鸣器接电导通,发出响声。 当P3.5口为高电平时,三极管截止,有源蜂鸣器未接电,无响声。 串口下载电路:由STC-ISP四端接口和J2两端接口组成,J2一端接5V电源,一端接STC-ISP的第1端口,TX和RX分别接到第2,3端口,第4端口接地。TX,RX端口作为程序下载端口。J2两端口上有一个短路帽,当短路帽接上则单片机上电,否则则断电。感应开关电路: +5V电压接一个10K电阻再连接到水银开关的一端,另一端口接地。 当水银开关接通时,P3.2,P3.3口为低电平,否则为高电平。可以由此来触发数码的正反向倒计时。设置按键电路:+5V电压接一个1

6、0K电阻再连接到按键开关的一端,另一端口接地。当按键按下时,P1.2口为低电平,否则为高电平。可以由此来设置数码的长短按模式和加减模式等。 LED灯电路: 分别由DS0-DS11 11个LED二极管(共阳极)一端共同接在+5V电压, 另一端分别接11个1K电阻然后接到单片机的11个端口。 当相应的端口为低电平时,则点亮LED灯,否则灯灭。 数码管电路: 每个数码管分别由一个三极管(PNP)控制,数码的一端接到三极管的发射极,然后三极管的基极通过一个1K电阻接到单片机的一个引脚上 三极管的集电极接+5V电压。当单片机相应的端口为低电平则点亮相应的数码管,否则数码管灭。而数码管的显示数字是由P0口

7、来控制。从而实现数码管的动态显示。四软件环境及调配下载工具、软件流程图及设计思想、软件功能及模块描述、主要程序及注释。 1.软件环境:Keil uVision42.调配下载工具:STC-ISPv6.803.软件流程图: 4.程序代码:ORG 0000HLJMP MAINORG 0100HADD11:LJMP ADD1TIME01:LJMP TIME0MAIN:SETB F0 ;主程序开始 JNB P3.2,ADD11 ;根据水银开关状态判断板的放置状况。正立时,进入预设 JNB P3.3,TIME01 ;倒立时,进入倒计时 LJMP TIME ;平放时,分秒显示ADD1:JNB F0,TIME

8、01 ;用F0区别预设和倒计时 MOV P2,#11000000B MOV R0,#00 ;预设初值为0 LJMP MAIN1LOOP: ;预设值显示 MOV DPTR,#TAB ;A数码管的正向显示 MOV A,R0 MOV B,#10 DIV AB MOVC A,A+DPTR MOV P0,A CLR P1.0 LCALL DELAY SETB P1.0 MOV A,B MOVC A,A+DPTR MOV P0,A CLR P1.1 LCALL DELAY SETB P1.1 MOV A,#100 SUBB A,R0 MOV DPTR,#TAB1 ;B数码管的反向显示 MOV B,#10

9、DIV AB MOVC A,A+DPTR MOV P0,A CLR P3.7 LCALL DELAY SETB P3.7 MOV A,B MOVC A,A+DPTR MOV P0,A CLR P3.6 LCALL DELAY SETB P3.6MAIN1:JB P3.2,TIME02 ;判断板依然正立,若水银开关s1有变化,则退出预设,开始倒计时 JB P1.2,LOOP ;按键加, LCALL DEL10ms ;放置按键抖动 JNB P1.2,LOOP ;按键弹起 MOV A,R0 ADD A,#1 MOV R0,A MOV 65H,A ;R0的内容加1 CJNE R0,#99,LOOP ;

10、当预设值为99时,则清零,重新从零开始加一 MOV R0,#00 LCALL LOOPTIME02:CPL F0TIME0:JB F0,LOOP ; 倒计时 MOV p2,#11110000b clr p1.5 clr p1.6 clr p1.7 MOV A,#99 SUBB A,R0 MOV R7,A loop0:jb p3.2,loop1 ;-判断水银开关s1,为1则转移loop4: jnb p3.3,loop1 ;倒计时,板正立时,A,B数码管显示 mov dptr,#tab ;-显示上面的数字 mov a,r0 mov b,#10 div ab movc a,a+dptr mov p0

11、,a clr p1.0 lcall del setb p1.0 mov a,b movc a,a+dptr mov p0,a clr p1.1 lcall del setb p1.1 mov dptr,#tab1 ;-显示下面的数字 mov a,r7 mov b,#10 div ab movc a,a+dptr mov p0,a clr p3.7 lcall del setb p3.7 mov a,b movc a,a+dptr mov p0,a clr p3.6 lcall del setb p3.6 jb p3.2,loop4 ;-沙漏平放停止计数 djnz r4,A1 ;-稳定数字显示

12、dec r0 inc r7 cpl p2.7 ;灯沙漏动画效果 cpl p2.6 cpl p2.3 cpl p2.4 cjne r0,#0,A1 ;-进行判断 lcall loop2 ;-正向溢出报警loop1:jb p3.3,A1 ;-判断水银开关s2,为1则转移 loop5:JB F0,A1 ;倒计时,板倒立时,A,B数码管显示 jnb p3.2,A1 mov dptr,#tab ;-显示上面数字 mov a,r7 mov b,#10 div ab movc a,a+dptr mov p0,a clr p3.6 lcall del setb p3.6 mov a,b movc a,a+dp

13、tr mov p0,a clr p3.7 lcall del setb p3.7 mov dptr,#tab1 ;-显示下面数字 mov a,r0 mov b,#10 div ab movc a,a+dptr mov p0,a clr p1.1 lcall del setb p1.1 mov a,b movc a,a+dptr mov p0,a clr p1.0 lcall del setb p1.0 jb p3.3,loop5 ;反方向放置 沙漏平放时停止计数 djnz r4,loop1 dec r7 inc r0 cpl p2.7 ;灯沙漏动画效果 cpl p2.6 cpl p2.3 cp

14、l p2.4 cjne r7,#0,loop1 ;反向溢出时报警 ljmp bell2 loop2:ljmp bellloop7:jnb p3.3,loop1 A1:LJMP loop0 del:mov r5,#95 ;数码管延时 d1:mov r6,#4 djnz r6,$ djnz r5,d1 retbell:mov r0,65h ;警报响起后,再次翻转,还可以从预设值起开始倒计时 mov a,#99 subb a,r0 mov r7,a jnb p3.3,loop7 ;判断s2是否为0,0则转移,跳出警报 mov dptr,#tab ;正向时溢出报警 mov a,r0 ;持续显示溢出停止

15、时的数字 mov b,#10 div ab movc a,a+dptr mov p0,a clr p1.0 lcall del setb p1.0 mov a,b movc a,a+dptr mov p0,a clr p1.1 lcall del setb p1.1 mov dptr,#tab1 mov a,r7 mov b,#10 div ab movc a,a+dptr mov p0,a clr p3.7 lcall del setb p3.7 mov a,b movc a,a+dptr mov p0,a clr p3.6 lcall del setb p3.6 jb f0,del3 ;报

16、警铃声 mov 50h,#200del2:cpl p3.5 ;1kz响100ms lcall delay ;延时500us djnz 50h,del2 cpl f0 sjmp belldel3:mov 51h,#200del4:lcall del8 cpl p3.5 ;500kz响200ms lcall delay ;延时1ms lcall delay djnz 51h,del4 cpl f0 sjmp bella3:ljmp loop7bell2:mov r0,65h ;警报响起后,再次翻转,还可以从预设值起开始倒计时 mov a,#99 subb a,r0 mov r7,a jnb p3.

17、2,a3 ;判断s1是否为0,0则转移 mov dptr,#tab1 ;正向时溢出报警 mov a,r1 ;持续显示溢出停止时的数字 mov b,#10 div ab movc a,a+dptr mov p0,a clr p1.1 lcall del setb p1.1 mov a,b movc a,a+dptr mov p0,a clr p1.0 lcall del setb p1.0 mov dptr,#tab mov a,r7 mov b,#10 div ab movc a,a+dptr mov p0,a clr p3.6 lcall del setb p3.6 mov a,b movc

18、 a,a+dptr mov p0,a clr p3.7 lcall del setb p3.7 jb f0,del6 ;报警铃声 mov 53h,#200del5:cpl p3.5 ;1kz响100ms lcall delay ;延时500us djnz 53h,del5 cpl f0 sjmp bell2del6:mov 54h,#200del7:lcall del8 cpl p3.5 ;500kz响200ms lcall delay ;延时1ms lcall delay djnz 54h,del7 cpl f0 sjmp bell2delay:mov 52h,#246 ;延时500us d

19、jnz 52h,$ retdel8: cpl p2.0 ;报警溢出时LED灯闪烁 cpl p2.1 cpl p2.2 cpl p2.3 cpl p2.4 cpl p2.5 cpl p2.6 cpl p2.7 cpl p1.5 cpl p1.6 cpl p1.7 retDEL10ms: ;按键时间 MOV R5,#10 ;20次 ;10.262ms=20*511+2*20+1 DEL_1: MOV R6,#255 ;255次 ;511us=255*2+1 DJNZ R6,$ DJNZ R5,DEL_1 RET TIME:MOV R7,#00H ;平放时,分秒显示 MOV R6,#00H MOV

20、63H,#00011111b SETB P1.5 SETB P1.6 SETB P1.7SEE:MOV R5,#2SEE1:MOV R4,#250SEE2:MOV DPTR,#TAB ;把数表的首地址赋给DPTR MOV A,R6 ;显示秒 MOV B,#10 DIV AB MOVC A,A+DPTR MOV P0,A CLR P1.0 LCALL DTIME SETB P1.0 MOV A,B MOVC A,A+DPTR MOV P0,A CLR P1.1 LCALL DTIME SETB P1.1 MOV A,R7 ;显示分 MOV DPTR,#TAB1 MOV B,#10 DIV AB

21、MOVC A,A+DPTR MOV P0,A CLR P3.7 LCALL DTIME SETB P3.7 MOV A,B MOVC A,A+DPTR MOV P0,A CLR P3.6 LCALL DTIME SETB P3.6 DJNZ R4,SEE2 DJNZ R5,SEE1 mov A,63H ;每隔一秒,LED灯变化一次 RL A MOV 63H,A MOV P2,A INC R6 CJNE R6,#10,SEE MOV R6,#60 ;满60秒,秒清零,分加一 INC R7 SJMP SEEDTIME:MOV 60H,#250 ;数码管动态显示 DJNZ 60H,$ RETTAB:

22、DB 11000000B,11111001B,10100100B,10110000B,10011001B,10010010B,10000010B,11111000B,10000000B,10010000B;-数码管正码TAB1:DB 11000000B,11001111B,10100100B,10000110B,10001011B,10010010B,10010000B,11000111B,10000000B,10000010B;-数码管反码End 五尚未完成工作的困难及解决思路 尚未完成的工作:因为这次任务我们是首次使用汇编语言编写程序,对程序编写的技巧没有完全掌握,存在一些编写错误,无法在

23、适当的地方使用恰当的汇编语言,导致程序调试过程麻烦。所以目前我们组尚未完成的工作是单片机断电保持功能,数码管减模式,电子闹钟模式。 解决思路:数码管的减模式可以由水平开关和设置按键两部分结合从而实现数码管的减模式。 可以利用STC89C52RC芯片里已集成的EEPROM(电可擦除可编程只读存储器),EEPROM在写入时能自动完成擦除,可以直接使用单片机系统的+5V电源,使用MOVX DPTR,A MOVX Ri,A指令等将要存储的变量写入EEPROM,这样便能实现掉电保持。通过利用单片机的定时器TO/T1来实现电子闹钟的设计, 每满1秒,则“秒”单元中的内容加1;“秒”单元满60.则“分”单元

24、中内容加1,从而实现分秒模式,再加一个按键功能,实现用户想要设定的时间,然后电子沙漏就能定时闹铃。六本次设计的收获心得 通过此次单片机课程设计,使我对单片机系统有了更深的认识,懂得了单片机的基本工作原理,其中包括构成一个最小系统所需要的晶振电路,复位电路,STC89C52RC各个引脚功能和如何使用汇编语言实现各个模块的功能,知道数码管动态显示的原理和如何利用外部开关实现数码管的正反向计数和停止计数。 此外,通过这次课程设计,我深深体会到了确定整体程序流程图的重要性,只有有了规范,详细的程序流程图,才不会导致在编程过程出现程序累赘,程序杂乱,不易理解。这样编写出来的程序才更容易模块化,便于理解,便于今后系统升级,不会浪费多余的时间在重新理解程序结构。以后在编写较大的程序时尽量使用C语言编写,会更容易检查出错误,更容易模块化,程序代码也会相对少一些。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1