单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(13页珍藏版)》请在冰点文库上搜索。
![单片机课程设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/22/5a5e8b1f-a38c-47d5-a4b0-3640e2005b25/5a5e8b1f-a38c-47d5-a4b0-3640e2005b251.gif)
单片机课程设计报告
单片机原理及系统课程设计
评语:
考勤(10)
守纪(10)
过程(40)
设计报告(30)
答辩(10)
总成绩(100)
专业:
电气工程及其自动化
班级:
电气1004班
姓名:
***
学号:
***
指导教师:
***
兰州交通大学自动化与电气工程学院
2013年3月7日
基于单片机的电子钟设计
摘要
电子钟是采用数字电路实现对“时”、“分”、“秒”进行数字显示的计时装置。
由于单片机内部具有两个定时器/计数器,所以在这次设计中,我通过对单片机进行编程来实现软件定时,同时采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
关键词:
电子钟;单片机;LED数码管
Abstract
ElectronicClockisadigitalcircuitimplementationofthe"hours","minutes"and"seconds"digitaldisplaydevice.DuetotheSingleChipMicrocomputerinternalhastwoTimer/Counter,inthisdesign,IthroughtheSCMforprogrammingtorealizethesoftwaretiming,atthesametime,IuseLEDdigitaldisplay,seconds,to24-hourtimemode,accordingtodigitalcontroltheorytodynamicdisplaytodisplay.Inthisdesign,thecircuithasthedisplaytimeofthefunction,youcanalsorealizetheadjustmentoftime.
Keywords:
ElectronicClock,MCU,LED
1引言
1.1设计目的
本课程设计是在学习了先修课程《单片机原理及应用系统设计》之后,为了进一步加深对所学知识的理解,培养对所学知识的实际应用能力而开设的综合设计训练环节。
此次课程设计重点强调实际应用技能的训练,包括单片机系统设计的软件和硬件两部分。
通过单片机系统设计的实际应用,旨在掌握单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,提高动手能力和分析问题、解决问题的能力。
1.2设计要求
根据所学《单片机原理及应用系统设计》的基础理论知识,运用MCS-51单片机完成一个电子钟的设计。
要求通过软件实现时间的控制,合理选择显示元件显示时间,并设计外围电路实现时间的调整。
1.3设计方法
本设计是利用AT89C51单片机内部的定时器/计数器中断系统来定时产生单位时间并通过软件控制实现24小时的时间变化,经LED数码管显示,可通过行列键盘设置时间。
2设计方案及原理
2.1设计方案
利用单片机内部的定时器/计数器工作于定时方式,对机器周期定时形成基准时间,然后在中断服务程序中用软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。
另外,设计了简单的按键,可以通过按键实现时、分的调整。
在主程序中对定时器/计数器初始化、调用显示子程序和键盘设置子程序。
LED数码管显示采用软件译码、动态显示方式。
系统组成框图如图2.1所示。
图2.1系统组成框图
2.2设计原理
由于定时器/计数器T0工作于方式1时对12MHz的系统时钟进行定时最大定时时间约65.536ms,因此可以通过对50ms(初值为3CB0H)进行20次计数循环来达到1s。
设计中用片内RAM的7BH单元对50ms计数,计20次使秒计数器78H单元加1,秒计数器加到60则分计数器79H单元加1,分计数器加到60则时计数器7AH单元加1,时计数器加到24则时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位——分十位、分个位——秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
3硬件设计
选用单片机P0口作段控,P2口作位控,P1.0~P1.2接按键行列键盘。
用Proteus软件,根据要求画出电子钟的原理图如图3.1所示。
图3.1硬件连接图
4软件设计
电子钟的软件系统由主程序和子程序两部分组成,具体的汇编语言源程序详见附录。
4.1主程序
主程序首先对显示单元和定时器/计数器进行初始化,然后重复调用LED数码管显示模块和按键处理模块子程序。
当有键按下时,则转入相应的功能程序。
主程序流程图如图4.1所示。
图4.1主程序流程图
4.2数码管显示模块
本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。
采用软件译码动态显示。
4.3按键处理模块
按键处理设置为:
如没有按键,则时钟正常走时。
当按下K0键时,进入调时状态,时钟停止走动;按K1、K2键可进行加1或减1操作;继续按K0键可进行分的调整;最后按K0键将退出调整状态,时钟开始计时运行。
4.4定时器/计数器T0中断服务程序
定时器T0工作于方式1定时,定时时间50ms。
在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。
把各单元计数的值放到存储单元的指定位置。
定时器T0中断服务程序流程图如图4.2所示。
图4.2定时器/计数器T0中断服务程序流程图
5系统仿真及实际调试
根据设计利用Proteus仿真软件进行仿真得到结果如图5.1所示。
图5.1仿真图
6总结
这次单片机课程设计历时两个多星期,通过对所学单片机相关知识的复习之后,我完成了关于电子钟的设计。
在设计中,我主要运用了单片机的定时/计数功能以及键盘显示功能。
宏观上,电路结构比较简单,与我们所学知识接近。
但是,在软件的设计方面,由于对一些知识点理解不透,以及没有很好的编程能力,在设计过程中也遇到了较多的困难,通过查阅相关资料反复修改尝试,并积极地向指导老师请教,最终完成了仿真及整个设计。
总之,我觉得这次单片机课程设计是有意义的。
通过这次课程设计,我学会了运用所学的专业基础知识去分析并解决一个实际问题,不仅巩固了所学理论知识,而且能够把理论知识转化为实际应用,培养了我运用所学知识解决实际问题的能力。
此外,还熟悉了对KeilC及Proteus两个软件的运用。
在以后的学习中,我们要注重理论与实践相结合,达到学以致用的目的。
参考文献
[1]王思明.单片机原理及应用系统设计[M].北京:
科学出版社,2012:
139-168.
[2]李华.单片机原理及应用[M].兰州:
兰州大学出版社,2001:
256-270.
[3]薛均义.单片机微型计算机及其应用[M].西安:
西安交通大学出版社,1997:
214-270.
附录
汇编语言源程序如下:
ORG0000H;主程序
LJMPSTART
ORG000BH;定时器/计数器T0中断程序入口
LJMPINTT0
START:
MOVR0,#70H
MOVR7,#0CH
INIT:
MOV@R0,#00H;显示单元清零
INCR0
DJNZR7,INIT
MOV72H,#10
MOV75H,#10
MOVTMOD,#01H;定时器T0工作在方式1
MOVTL0,#0B0H;对定时器T0赋初值,定时时间为50ms
MOVTH0,#03CH
SETBEA;开总中断
SETBET0;开定时器T0中断
SETBTR0;启动定时器T0
START1:
LCALLSCAN;调用数码管显示子程序
LCALLKEYSCAN;调用调时按键处理子程序
SJMPSTART1
DL1MS:
MOVR6,#14H;延时1MS子程序
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
DL20MS:
ACALLSCAN;延时20MS子程序
ACALLSCAN
ACALLSCAN
RET
SCAN:
MOVA,78H;数码管显示子程序
MOVB,#0AH
DIVAB
MOV71H,A;秒十位存入显示缓冲区相应位置
MOV70H,B;秒个位存入显示缓冲区相应位置
MOVA,79H
MOVB,#0AH
DIVAB
MOV74H,A;分十位存入显示缓冲区相应位置
MOV73H,B;分个位存入显示缓冲区相应位置
MOVA,7AH
MOVB,#0AH
DIVAB
MOV77H,A;时十位存入显示缓冲区相应位置
MOV76H,B;时个位存入显示缓冲区相应位置
MOVR1,#70H;循环扫描显示
MOVR5,#80H
MOVR3,#08H
SCAN1:
MOVA,R5
MOVP2,A;位控
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR;查表
MOVP0,A;段控
MOVA,R5
LCALLDL1MS
INCR1
MOVA,R5
RRA
MOVR5,A
DJNZR3,SCAN1
MOVP2,#00H
MOVP0,#0FFH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;"0~9"及"-"的共阳极字形代码
INTT0:
PUSHACC;定时器/计数器T0中断服务程序
PUSHPSW;现场保护
CLRET0;关闭定时器T0中断
CLRTR0;关闭定时器T0
MOVTL0,#0B0H;重置初值
MOVTH0,#03CH
SETBTR0;启动定时器T0
INC7BH
MOVA,7BH
CJNEA,#14H,OUTT0;50ms计数器不等于20则返回继续定时
MOV7BH,#00;1s时间到则把50ms计数器清零
INC78H;秒单元加1
MOVA,78H;秒写入秒个位和秒十位
CJNEA,#3CH,OUTT0;秒单元不等于60时跳转
MOV78H,#00;秒单元等于60时,秒单元清零
INC79H;分单元加1
MOVA,79H;分写入分个位和分十位
CJNEA,#3CH,OUTT0;分单元不等于60时跳转
MOV79H,#00;分单元等于60时,分单元清零
INC7AH;时单元加1
MOVA,7AH;时写入时个位和时十位
CJNEA,#18H,OUTT0;时单元不等于24时跳转
MOV7AH,#00;时单元等于24时时单元清零
OUTT0:
SETBET0;开定时器T0中断
POPPSW;恢复现场
POPACC
RETI
KEYSCAN:
CLREA;调时按键处理子程序
JNBP1.0,KEYSCAN0;P1^0=0时,跳到按下K0键处理子程序
JNBP1.1,KEYSCAN1;P1^1=0时,跳到按下K1键处理子程序
JNBP1.2,KEYSCAN2;P1^2=0时,跳到按下K2键处理子程序
KEYOUT:
SETBEA;开总中断
RET
KEYSCAN0:
LCALLDL20MS;按K0键处理子程序
JBP1.0,KEYOUT
WAIT0:
JNBP1.0,WAIT0;等待键释放
INC7CH;按K0次数加1
MOVA,7CH
CLRET0;关T0中断
CLRTR0;关闭T0
CJNEA,#03H,KEYOUT;K0按键三次恢复走时
MOV7CH,#00;清零
SETBET0
SETBTR0
SJMPKEYOUT
KEYSCAN1:
LCALLDL20MS;按K1键处理子程序
JBP1.1,KEYOUT
WAIT1:
JNBP1.1,WAIT1;等待键释放
MOVA,7CH
CJNEA,#02H,KSCAN11
INC79H;分加1
MOVA,79H
CJNEA,#3CH,KEYOUT
MOV79H,#00;分等于60分单元清零
SJMPKEYOUT
KSCAN11:
INC7AH;时加1
MOVA,7AH
CJNEA,#18H,KEYOUT
MOV7AH,#00;时等于24时单元清零
SJMPKEYOUT
KEYSCAN2:
LCALLDL20MS;按K2键处理子程序
JBP1.2,KEYOUT
WAIT2:
JNBP1.2,WAIT2;等待键释放
MOVA,7CH
CJNEA,#02H,KSCAN21
DEC79H;分减1
MOVA,79H
CJNEA,#0FFH,KEYOUT
MOV79H,#3BH
SJMPKEYOUT
KSCAN21:
DEC7AH;时减1
MOVA,7AH
CJNEA,#0FFH,KEYOUT
MOV7AH,#17H
SJMPKEYOUT
END