湖州师范学院求真学院信息与工程系课程设计报告.docx
《湖州师范学院求真学院信息与工程系课程设计报告.docx》由会员分享,可在线阅读,更多相关《湖州师范学院求真学院信息与工程系课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
湖州师范学院求真学院信息与工程系课程设计报告
制作和调试(50分)
设计报告(50分)
评定等级
指导教师
湖州师范学院求真学院
信息与工程系
单片机应用系统设计总结报告
题目:
基于STC89C52的数字电子钟设计
专业
班级
姓名
学号
指导教师
信息与工程系
年月日
一、系统总体设计方案
1.系统原理框图如图
(1)所示
图
(1)系统原理框图
2.方案论证与比较
(1)单片机的选型:
方案一:
选用AT89S51单片机。
方案二:
选用STC12C5A16S2单片机。
本系统采用方案二,AT89S51单片机的FlashRom为4K,程序存储量太小,若采用12M晶振,则机械周期为1us。
而STC12C5A16S2单片机FlashRom为16K,程序存储量大,若采用12M晶振,其机械周期可达(1/12)us。
运行速度快12倍。
(2)显示方案
方案一:
选用1602液晶显示。
方案二:
选用4位数码管显示。
本系统采用方案二,1602液晶能显示16x2个字符,能很好的显示时间,但它与数码管相比成本太大。
对于本系统要求的显示内容数码管完全能完成。
成本大大降低。
二、硬件系统分析与设计
本系统由以下各个模块电路构成:
1、单片机最小系统:
包括复位电路、时钟晶振、STC12C5A60S2单片,为主控模块;
2、蜂鸣器电路:
闹铃作用;在本次实验中整点报时以及闹钟闹铃,通过该电路模块实现;
3、矩阵键盘:
按键输入,软件程序通过功能键的设置,实现时钟/秒表等功能切换;
4、数码管:
显示作用,本次实验使用数码管动态扫描方式显示;
键盘扫描原理:
本系统用到4个按键,是3*4矩阵键盘中的4个按键(这里对其定义为1号键,2号键,3号键,4号键)。
由于是矩阵键盘因此键盘的扫描程序十分复杂,如果采用独立按键测编程比较简单,只需要将1至4号键盘的公共端清零,然后检测4个键盘即可;由于本系统采用普通按键,因此当按下按键时会产生机械振动,从而影响单片机对键盘的扫描,为了避免此种情况,本系统采用了软件延时消抖的方法。
数码管显示原理:
本系统时钟数值显示采用动态数码管显示,即4个是数码管依次显示不同的数值,然后重复上述动作通过调试设计者。
本系统使用4个共阳极数码管,并且后2个是倒着装的。
因此在时钟程序显示时,可以定义2个不同的数码显示数组,一个专门为前2位数码管设置,另一组专门为后2位数码管设置。
这样可以形象的显示出时间的跳动。
图2、系统电路图
3、软件系统分析与设计程序流程图:
主流程图:
(1)系统初始化流程图:
(2)按键扫描流程图:
(3)定时器定时及数码管显示流程图
四.程序
ORG0000H
AJMPMAIN
ORG000BH
AJMPIT0P
DPBIT22H.1
----------------------------------------------------------------------主函数
MAIN:
CLRDP
MOVSP,#62H
MOV38H,#12H;小时
MOV39H,#01H;分钟
MOV36H,#12H;闹钟小时
MOV35H,#02H;闹钟分钟
MOVTMOD,#01H;定时器工作方式1
MOV20H,#20
SETBET0;允许T0中断
SETBEA;开中断
MOVTH0,#3CH;给T0设初值
MOVTL0,#0B0H
SETBTR0;启动T0
-------------------------------------------------------------------跳转调用
LOP:
CLRP2.4;清零(开启)
ACALLDATC;调用DATC
ACALLDISP
ACALLKEYSCAN
ACALLRING
ACALLZHENGD
AJMPLOP
-------------------------------------------------------------------赋值
DATC:
JNBF0,LOOP11;F0如果是零直接转移到LOOP11
MOVA,36H
AJMPLOOP12
LOOP11:
MOVA,38H
LOOP12:
ANLA,#0FH
MOV40H,A
JNBF0,LOOP111
MOVA,36H
AJMPLOOP122
LOOP111:
MOVA,38H
LOOP122:
ANLA,#0F0H
SWAPA
MOV41H,A
JNBF0,LOOP13
MOVA,35H
AJMPLOOP14
LOOP13:
MOVA,39H
LOOP14:
ANLA,#0FH
MOV42H,A
JNBF0,LOOP133
MOVA,35H
AJMPLOOP144
LOOP133:
MOVA,39H
LOOP144:
ANLA,#0F0H
SWAPA
MOV43H,A
RET
-----------------------------------------------------------------LED显示
DISP:
MOVDPTR,#TAB1
SETBP1.4
CLRP1.7
MOVA,41H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY1MS
SETBP1.7
MOVDPTR,#TAB1
CLRP1.6
MOVA,40H
MOVCA,@A+DPTR
MOVC,DP
MOVAcc.7,C
MOVP0,A
LCALLDELAY1MS
SETBP1.6
MOVDPTR,#TAB2
CLRP1.5
MOVA,43H
MOVCA,@A+DPTR
MOVC,DP
MOVAcc.7,C
MOVP0,A
LCALLDELAY1MS
SETBP1.5
MOVDPTR,#TAB2
CLRP1.4
MOVA,42H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY1MS
RET
-----------------------------------------------------------------------按键
KEYSCAN:
ACALLDATC
ACALLDISP
MOVA,P2
ANLA,#0FH
CJNEA,#0FH,LOP1
AJMPLOP9
LOP1:
ACALLDELAY10MS
MOVA,P2
ANLA,#0FH
MOVR0,A
CJNEA,#0FH,LOP2;0FH表示功能键
AJMPLOP9
LOP2:
ACALLDATC
ACALLDISP
MOVA,P2
ANLA,#0FH
CJNEA,#0FH,LOP2
MOVA,R0;P2的初始值
CJNEA,#0EH,LOP4;如果A等于0EH的话功能键按下
MOVR1,46H;功能标志寄存器中的值赋给R1
CJNER1,#1,LOP5;功能标志是否为1
MOV46H,#2
AJMPLOP6
LOP5:
MOVR1,46H
CJNER1,#2,LOOP1;功能标志是否为2
MOV46H,#3
AJMPLOP6
LOOP1:
MOVR1,46H
CJNER1,#3,LOOP2;功能标志是否为3
MOV46H,#4
AJMPLOP6
LOOP2:
MOV46H,#1
CLRF0
AJMPLOP6
LOP4:
MOVA,R0
CJNEA,#0BH,LOP7;0BH表示加键
MOV47H,#1
AJMPLOP6
LOP7:
MOVA,R0
CJNEA,#7,LOP8;7H表示减键
MOV48H,#1
AJMPLOP6
LOP8:
MOV49H,#1
LOP6:
ACALLDATC
ACALLDISP
MOVR2,49H
CJNER2,#1,LOP9
MOV49H,#0;确认标志位
MOV46H,#0;功能标志位
MOV47H,#0;加标志位
MOV48H,#0;减标志位
CLRF0
AJMPLOPR
LOP9:
MOVR2,46H
CJNER2,#1,LOP10;功能标志位是否为1
MOVR2,47H
CJNER2,#1,LOP12;加标志位是否为1
MOVA,38H
ADDA,#1
DAA
MOV38H,A
CJNEA,#24H,LOP00
MOV38H,#00H
MOV47H,#0
AJMPKEYSCAN
LOP00:
MOV38H,A;显示小时的加
MOV47H,#0
AJMPKEYSCAN
LOP12:
MOVR2,48H
CJNER2,#1,KEYSCAN1;减标志位是否为1
MOVA,38H
CLRC
SUBBA,#1
ACALLSUBBCD
CJNEA,#99H,LOP02
MOV38H,#23H
MOV48H,#0
AJMPKEYSCAN
LOP02:
MOV38H,A;显示小时的减
MOV48H,#0
AJMPKEYSCAN
LOP10:
MOVR2,46H
CJNER2,#2,LOOP3;功能标志位是否为2
MOVR2,47H
CJNER2,#1,LOP13;加标志位是否为1
MOVA,39H
ADDA,#1
DAA
CJNEA,#60H,LOP01
MOV39H,#00H
MOV47H,#0
AJMPKEYSCAN
LOP01:
MOV39H,A;显示分钟的加
MOV47H,#0
AJMPKEYSCAN
LOP13:
MOVR2,48H;减标志位是否为1
CJNER2,#1,KEYSCAN1
AJMPLOP133
LOP133:
MOVA,39H
CLRC
SUBBA,#1
ACALLSUBBCD
CJNEA,#99H,LOP03
MOV39H,#59H
MOV48H,#0
AJMPKEYSCAN
LOP03:
MOV39H,A;显示分钟的减
MOV48H,#0
AJMPKEYSCAN
LOOP3:
MOVR2,46H
CJNER2,#3,LOOP5;功能标志位是否为3
SETBF0
MOVR2,47H
CJNER2,#1,LOOP4;加标志位是否为1
MOVA,36H
ADDA,#1
DAA
MOV36H,A
CJNEA,#24H,LOP04
MOV36H,#00H
MOV47H,#0
AJMPKEYSCAN
KEYSCAN1:
AJMPKEYSCAN
LOP04:
MOV36H,A;闹钟小时的加
MOV47H,#0
AJMPKEYSCAN
LOOP4:
MOVR2,48H
CJNER2,#1,KEYSCAN1;减标志位是否为1
MOVA,36H
CLRC
SUBBA,#1
ACALLSUBBCD
CJNEA,#99H,LOP05
MOV36H,#23H
MOV48H,#0
AJMPKEYSCAN
LOP05:
MOV36H,A;闹钟小时的减
MOV48H,#0
AJMPKEYSCAN
LOOP5:
MOVR2,46H
CJNER2,#4,LOPR;功能标志位是否为4
SETBF0
MOVR2,47H
CJNER2,#1,LOOP6;加标志位是否为1
MOVA,35H
ADDA,#1
DAA
CJNEA,#60H,LOP06
MOV35H,#00H
MOV47H,#0
AJMPKEYSCAN
LOP06:
MOV35H,A;闹钟分钟的加
MOV47H,#0
AJMPKEYSCAN
LOOP6:
MOVR2,48H
CJNER2,#1,KEYSCAN1;减标志位是否为1
AJMPLOOP7
LOOP7:
MOVA,35H
CLRC
SUBBA,#1
ACALLSUBBCD
CJNEA,#99H,LOP07
MOV35H,#59H
MOV48H,#0
AJMPKEYSCAN
LOP07:
MOV35H,A;闹钟分钟的减
MOV48H,#0
AJMPKEYSCAN
SUBBCD:
JNBAC,XY
DECA
DECA
DECA
DECA
DECA
DECA
XY:
JNCXYZ
CLRC
SUBBA,#60H
XYZ:
RET
LOPR:
RET
-------------------------------------------------------------------闹钟
RING:
MOVA,38H
CJNEA,36H,EXIT2
MOVA,39H
CJNEA,35H,EXIT2
MOVA,37H
CJNEA,#0,EXIT2
CLRP3.2
MOV50H,#1;蜂鸣器的标志位
AJMPEXIT1
EXIT2:
MOV50H,#0
SETBP3.2
EXIT1:
RET
---------------------------------------------------------------整点报时
ZHENGD:
MOVA,39H
CJNEA,#00H,NEXT1
MOVA,37H
CJNEA,#0,NEXT2
CLRP3.2
AJMPNEXT2
NEXT1:
MOVA,50H
CJNEA,#0,NEXT2
SETBP3.2
NEXT2:
RET
-------------------------------------------------------------定时器中断
IT0P:
PUSHPSW;保护中断
PUSHAcc
MOVTH0,#3CH
MOVTL0,#0B0H
MOVA,20H
CJNEA,#10,NEXT
CPLDP
NEXT:
DJNZ20H,RETURN
CPLDP
MOV20H,#20
MOVA,#01H
ADDA,37H
DAA
MOV37H,A
CJNEA,#60H,RETURN
MOV37H,#00H
MOVA,#01H
ADDA,39H
DAA
MOV39H,A
CJNEA,#60H,RETURN
MOVA,#01H
MOV39H,#00H
ADDA,38H
DAA
MOV38H,A
CJNEA,#24H,RETURN
MOV38H,#00H
RETURN:
POPAcc
POPPSW;保护中断
RETI
-----------------------------------------------------------------------------延时
DELAY1MS:
MOVR7,#4
DEL1:
MOVR6,#125
DEL2:
DJNZR6,DEL2
DJNZR7,DEL1
RET
DELAY10MS:
MOVR7,#250
DEL11:
MOVR6,#250
DEL22:
DJNZR6,DEL22
DJNZR7,DEL11
RET
--------------------------------------------------------------------------------段码表
TAB1:
DB0C0H,0F9H,0A4H,0B0H;0123的段码表
DB99H,92H,82H,0F8H;4567的段码表
DB80H,90H,88H,83H;89AB的段码表
DB0C6H,0A1H,86H,8EH;CDEF
DB8CH,0FFH;P全黑
TAB2:
DB0C0H,0CFH,0A4H,86H,8BH,92H;012345倒置数码管段码表
DB90H,0C7H,80H,82H;6789倒置数码管段码表
DB81H,98H,98H,98H,98H,98H;abbbbb倒置数码管段码表
DB0A1H,0FFH;p全黑倒置数码管段码表
END
五、总结
基于STC12C5A16S2单片机的电子时钟,具有时间设置、整点报时、闹铃设置及秒表功能,由4位数码管显示时间。
单片机在日常生活中应用广泛,结合这学期的学习,我们大概的了解了单片机的发展现状和发展趋势,以及在生活中的广泛应用,其实80C51只是我们所接触的一种简单的单片机,在实际应用中,有各个公司生产的不同型号的、针对不同功能设计的、以及根据用户的需要和发展自主研发设计的单片机还有很多,由此设计出来的嵌入式系统更是数不胜数。
能够亲身的进行自我实践,并进行实际的应用,其实使我们对现行单片机的一次深入的了解,并能够提升我们将来在学习工作遇到的单片机设计问题。
在程序设计中,我们更加深入了解了中断的使用与本质,合理利用这些,会使程序简化而不会出错。
比如开始我们把主程序写在中断里面,导致程序运行混乱,而后来发现,只在中断中做少量工作,比如改一下某一个标志,这样比较好。
在这次课题设计过程中,我们合理的分工,适宜的规划进度的进展,不仅仅暗示完成了预先设计的内容。
在这一过程中,我们充分发挥我们的主观能动性,想象创造性,攻克了很多之前都没有想过的难关,真的受益匪浅。
我们理论和实验都有很大的提升,我想这些对于我们今后的学习生活都有很重要的意义,这将是我们在程序设计以及大学学习过程中的宝贵经验和财富。
疑难问题
程序中的软件按键去抖还是有点不稳定,时钟的精确度还不是很高,闹铃时间的长短还不能控制