1、单片机课程设计报告题目:数字时钟姓 名: 学 号: 专 业: 自动化 实 验 室: 实训楼307 班 级: A1132 同组成员: 设计时间: 2014 年 4月 14日 2014年4月18 日评定成绩: 审阅教师: * 2014年 4月 18 日14摘 要本次做的单片机课程设计是数字时钟。该时钟是以单片机(STC89C52RC)为核心,结合共阴极LED数码管、锁存器74HC573等元件设计硬件电路,再配以相应的程序,使它具有时,分,秒显示的功能;并且通过按键还可以进行时,分,秒的调整。单片机P0口接74HC373的输入端,发送断段码与位码,P2.6与P2.7连接74HC373的使能端,选择P
2、0口发送断码还是位码。P3.5、P3.6、P3.7连接三个独立按键,P3.5连接按键按下选择进行时调、分调还是秒调;P3.6按键按下进行加一;P3,.7按键按下进行减一。同时还有复位电路。 关键词:单片机 STC89C52RC 共阴极LED数码管 74HC373锁存器目 录一 课题名称、意义、功能及分工11.1课题名称:基于52单片机的数字时钟11.2设计意义11.3功能11.4分工1二 系统基本原理12.1 STC89C52RC单片机介绍22.2 STC89C52RC引脚功能说明2三 硬件设计33.1 单片机最小系统33.2 显示电路33.3按键电路4四 软件设计54.1主程序54.2数码管
3、显示模块54.3定时器/计数器T0中断服务程序54.4主程序流程图64.5 STC89C52引脚分配74.6 变量存储空间说明74.7程序清单7五调试11六故障的检测与分析136.1 指令跳转不到预定的地址136.2 位选地址循环次数错误13七 总结137.1 收获137.2体会137.3建议147.4要求14一 课题名称、意义、功能及分工1.1课题名称:基于52单片机的数字时钟1.2设计意义 在常生活和工作中,我们常常用到定时控制。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性能价格比的不断提高,新
4、一代产品的应用也越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能。小则可以用于家电控制,甚至可以用于儿童电子玩具。它电路简单,功能强大,体积小,质量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。 随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。根据这种实际情况,设计了一个单片机多功能定时系统,它可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行时钟校准和定点打铃。它可以执行不同的时间表(考试时间和常作息时间)的打铃,可以任意设置时间。这种具有人们所需要的智能化特性的产品减轻了
5、人的劳动,扩大了数字化的范围,为家庭数字化提供了可能1.3功能 能实现显示时间的时、分、秒,并具有时、分、秒的设置和调控功能。1.4分工在小组中:*负责负责软件设计,程序调试与仿真图绘制,*负责硬件电路安装,硬件电路的调试,并且和*一起同整体方案设计做出修改,*负责后期的文档编辑及整体方案设计,与撰写实习报告。二 系统基本原理 这里采用应用广泛的STC89C52作为时钟控制芯片,利用单片机内部的定时/计数器T0 实现软时钟的目的。首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,秒计60次形成分,分计60形成小时,小时计到2
6、4。最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。 此外还要实现对时间的调整功能,89C52的P3.5、P3.6、P3.7外接三个独立按键,当按下P3.5按键时,系统进入调时间的状态或启动时间显示的功能;当按下P3.6按键时,对显示的数码管进行加一的功能;当按下P3.7按键时,对显示的数码管进行减一的功能,达到调整时间的目的。2.1 STC89C52RC单片机介绍 STC89C52RC单片机一款高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。STC89C52RC主要特性如下:l 工作电压:5.5
7、V3.3V(5V单片机)/3.8V2.0V(3V单片机)l 工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz。l 用户应用程序空间为8K字节片上集成512字节RAM。l 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。l 共3个16位定时器/计数器。即定时器T0、T1、T2。l 外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。l 通用异步串行口(UART),还可用定时器软件实现多个UART
8、。STC89C52RC单片机的工作模式有掉电模式、空闲模式、正常工作模式。掉电模式,典型功耗0.1A,可由外部中断唤醒,中断返回后,继续执行原程序;空闲模式,典型功耗2mA;正常工作模式,典型功耗4 mA7mA。2.2 STC89C52RC引脚功能说明P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输
9、出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。P2端口(P2.0P2.7,2128引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流
10、方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器和16位地址的外部数据存储器时,P2送出高8位地址。在访问8位地址的外部数据存储器时,P2口引脚上的内容,在整个访问期间不会改变。在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口:P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉
11、电阻,那些被外部信号拉低的引脚会输入一个电流。三 硬件设计本数字时钟系统的硬件电路是由单片机最小系统、按键电路、显示电路三部分组成。具体系统框图如图所示。MCU时钟电路按键复位电路显示电路3.1 单片机最小系统单片机最小系统是由按键复位电路、时钟电路、STC89C52单片机组成,电路图如图3.1所示。图3.1 单片机最小系统图3.2 显示电路该显示电路由6位数码管和、74HC573芯片和8组上拉电阻组成。数码管负责数据显示,74HC573芯片负责扩展单片机端口,8组上拉电阻上拉P0口电流。显示电路电路图如图3.2。图3.2 显示电路电路图3.3按键电路按键电路由三个独立按键组成,可通过按键调节
12、数码管显示的时间。 图3.3 按键电路电路图四 软件设计4.1主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有按键按下时,则转入相应的功能程序。4.2数码管显示模块 本实验有6个数码管,从右到左为妙、分、时。在本系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段表中查出所显示的信息的段码,从P0端口输出,同时在P2.7端口进行数码管显示。4.3定时器/计数器T0中断服务程序 T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序
13、中用一个计数器对50ms计数,计20次则对秒单元加一。秒单元加到60则对分单元加一,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。在对各单元计数的同时,把他们的值放到存储器单元的指定位置。4.4主程序流程图此次系统软件设计是基于汇编语言编写,对于设计的程序见附录。并且主程序流程图如图所示:NNNN开始50ms计数器=20?50ms计数器加一秒单元=60?秒单元加一,50ms计数器清0现场保护,重置初值,启动下一个50ms分单元=60?分单元加一,秒单元清0开始显示单元清0T0、T1设为16位计数模式时单元加一,分单元清0允许T0中
14、断时单元=24?调用显示子程序按下键?是时单元清0进入功能程序中断返回T0中断服务程序主程序流程图 4.5 STC89C52引脚分配引脚功能引脚功能XTAL1时钟电路接口P2.6数码管段码选通位XTAL2时钟电路接口P2.7数码管位码选通位RST按键复位电路P3.5独立按键P1数据输出到数码管P3.6独立按键P3.7独立按键4.6 变量存储空间说明变量名存储空间功能TABDPTR0-9的字段表78H、79H、7AH存取放时、分、秒70H、71H存取秒的低位与高位72H、73H存取分的低位与高位74H、75H存取时的低位与高位7BH存取定时器溢出次数7CH存取按键次数R1读取存放时、分、秒高低位
15、单元的地址R3循环次数R5数码管位选存储地址4.7程序清单ORG 0000HLJMP STARTORG 000BHLJMP INIT0START:MOV R0,#70H ;主程序开始 MOV R7,#0CHINIT: MOV R0,#00H INC R0 DJNZ R7,INIT MOV TMOD,#01H ;选择定时器/计数器T0的方式1 MOV TL0,#0B0H ;对低位赋初值 MOV TH0,#03CH ;高位赋初值 SETB EA SETB ET0 SETB TR0START1:LCALL SCAN LCALL KEYSCAN SJMP START1DL1MS:MOV R6,#14H
16、 ;延时1子程序DL1: MOV R7,#19HDL2: DJNZ R7,DL2 DJNZ R6,DL1RETDL20MS:ACALL SCAN ;延时20ms子程序 ACALL SCAN ACALL SCANRET SCAN:MOV A,78H ;数码管显示程序开始 MOV B,#0AH DIV AB ;时间秒的十位送给A,时间秒的个位送B MOV 71H,A ;时间秒要显示的十位 MOV 70H,B ;时间秒要显示的个位 MOV A,79H MOV B,#0AH DIV AB ;时间分的十位送给A,时间分的个位送B MOV 73H,A ;时间分要显示的十位送地址 MOV 72H,B ;时间
17、分要显示的个位送地址 MOV A,7AH MOV B,#0AH DIV AB ;时间时的十位送给A,时间时的个位送B MOV 75H,A ;时间时显示的十位送地址 MOV 74H,B ;时间时要显示的个位送地址 MOV R1,#70H MOV R5,#0DFH ;位码送到R5 MOV R3,#06H ;置循环次数 SCAN1:MOV A,R5 ;数码管的显示程序 MOV P0,A SETB P2.7 CLR P2.7 MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR ;对字段表取值显示 CJNE R3,#04H,SCAN2 ;分的个位显示点 ADD A,#80H SCA
18、N2:CJNE R3,#02H,SCAN3 ;时的个位显示点 ADD A,#80HSCAN3:MOV P0,A SETB P2.6 CLR P2.6 LCALL DL1MS INC R1 MOV A,R5 RR A ;数码管的位 MOV R5,A DJNZ R3,SCAN1 RET ;09的字段表TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH INIT0:PUSH ACC ;定时/计数器T0中断程序 PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A
19、,7BH CJNE A,#14H,OUTT0 ;50ms是否到20次,没有到就继续执行50ms的延时 MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0 ;一秒的延时是否计到60次,没有就继续执行 MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0 ;60分钟的延时是否计到24次,没有就继续执行程序 MOV 7AH,#00OUTT0:SETB ET0 ;启动定时器T0 POP PSW POP ACC RETIKE
20、YSCAN:CLR EA ;按键处理程序 JNB P3.5,KEYSCAN0 ;P3.5有按键按下则跳转到子程序 JNB P3.6,KEYSCAN1 ;P3.6有按键按下则跳转到子程序 JNB P3.7,KEYSCAN2 ;P3.7有按键按下则跳转到子程序KEYOUT:SETB EA RETKEYSCAN0:LCALL DL20MS ;20ms的延时消抖 JB P3.5,KEYOUTWAIT0: JNB P3.5,WAIT0 ;判断按键是否松手, 松手就往下执行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0 CJNE A,#04H,KEYOUT ;按下第一次、第二次和
21、第三次对时、分、秒选定 MOV 7CH,#00 ;按下第四次时就启动计时 SETB ET0 SETB TR0 SJMP KEYOUTKEYSCAN1:LCALL DL20MS ;按键加一的程序 JB P3.6,KEYOUTWAIT1: JNB P3.6,WAIT1 ;判断按键是否松手, 松手就往下执行程序 MOV A,7CH CJNE A,#03H,KSCAN10 ;如果功能键按下第三次则对秒加一调整 INC 78H MOV A,78H CJNE A,#3CH,KEYOUT ;如果秒加到60则清零 MOV 78H,#00 LJMP KEYOUTKSCAN10: CJNE A,#02H,KSCA
22、N11 ;如果功能键按下第二次则对分加一调整 INC 79H MOV A,79H CJNE A,#3CH,KEYOUT ;如果加到60则清零 MOV 79H,#00 SJMP KEYOUTKSCAN11:CJNE A,#01H,KEYOUT ;如果功能键是按下第一次则对分进行加一调整INC 7AH MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00H SJMP KEYOUTKEYSCAN2:LCALL DL20MS ;延时消抖程序 JB P3.7,KEYOUTWAIT2: JNB P3.7,WAIT2 ;判断是否放开按键 MOV A,7CH CJNE A,#03H
23、,KSCAN20 ;如果功能键是按下第三次对秒进行减一 DEC 78H MOV A,78H CJNE A,#0FFH,KEYOUT MOV 78H,#3BH SJMP KEYOUTKSCAN20:CJNE A,#02H,KSCAN21 ;如果功能键是按下第二次对分进行减一 DEC 79H MOV A,79H CJNE A,#0FFH,KEYOUT MOV 79H,#3BH LJMP KEYOUT KSCAN21: CJNE A,#01H,ZY ;如果功能键是按下第一次则对分进行减一 DEC 7AH MOV A,7AH CJNE A,#0FFH,ZY MOV 7AH,#17H LJMP KEYO
24、UTZY:LJMP KEYOUT ;中间跳转RETEND五调试本系统的软件编写是在keil软件上进行,并在Proteus仿真软件进行硬件设计。为了程序调试方便,将Keil编译后生成的.hex文件加载到Proteus中,点击仿真。仿真出的结果满足大概的要求后,再将.hex文件烧录到单片机开发板内。在单片机开机上电后,时间显示00.00.00。经过1s后,秒加一。当按下按键时,可以实现对时间的调节。系统设计达到实训要求。Proteus仿真图、实际检测图如下。图5.1Proteus仿真图图5.2 具体实验效果图六故障的检测与分析 遇到的问题:由于用汇编语言编写程序,在编程过程中使用到的各种寄存器、存
25、储器地址、变量很多,很难做到对程序的整体把握。6.1 指令跳转不到预定的地址 在编译软件时总是出现错误,检查发现语句没有问题,后经同学提醒发现条件转移指令跳转不到预定的地址,要先跳转到一个可以跳转到的地址,然后再用长跳转跳到预定地址,就正常显示了。6.2 位选地址循环次数错误在第一次仿真时,数码管全部显示0,其后数码管无变化。后经仔细检查发现,是由于位选地址循环次数错误。经修改后,显示准确。七 总结7.1 收获让我更进一步地熟悉了stc89c52rc芯片、数码管的结构和对S51学习板的各部分电路分析,并且还熟练地掌握了各个模块间的工作原理和其具体的使用方法,让我深化了我曾经所学过的关于单片机的
26、构造和其使用的知识。通过编改程序,也让我充分的认识到做好一个软件程序的不易,需要对汇编语言精通学习,对设计流程的精准把握,并且在设计过程中要有十一分的耐心和细心。这次对数字钟的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念。在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。7.2体会课程设计分成了硬件和软件两大模块。总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中。整个设计过程中遇到的最大
27、问题是软件的编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。要了解在整个设计过程中学到了团体精神和独立解决问题的重要性。7.3建议开始以为电路很简单,但是做实物的时候才知道走线的重要性。数码管的走线都弄成一块了,看来确实得多实践。因为电脑上画的图跟实物有很大区别,得要注意好布局。应该多开设些实践课,为以后的求职之路打下了基础。7.4要求 能实现显示时间的时、分、秒,并具有时间的设置和调控功能。五.参考文献1单片机原理与应用 谢维成 杨加国 编著2单片机应用与仿真调试 严天峰 编著3单片机原理接口及应用嵌入式系统技术基础 清华版4单片机课程设计实例指导 北航版6单片机原理及应用 高等教育出版社