第一组电子数字钟课程设计.docx
- 文档编号:11931051
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:26
- 大小:201.82KB
第一组电子数字钟课程设计.docx
《第一组电子数字钟课程设计.docx》由会员分享,可在线阅读,更多相关《第一组电子数字钟课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
第一组电子数字钟课程设计
湖南人文科技学院
课程设计报告
课程名称:
单片机原理及应用设计
设计题目:
电子数字钟
系别:
计算机科学技术系
专业:
计算机应用技术
组别:
第一组
组员:
雷赞、贾晨、蒋小菊、夏欢、彭瑞琨、蒲相印
学号:
08303104、08303124、08303105、08303122、07315318、08303123
起止日期:
2010.12.15-2010.12.31
指导教师:
李芝成
课程设计题目
电子数字钟
组号
第一组
班级
08级计应班
系别
计算机科学技术系
专业
计算机应用技术专业
组长
雷赞
组员
贾晨、蒋小菊、夏欢、彭瑞琨、蒲相印
指导教师
李芝成
课程设计目的
通过电子数字钟设计实验,系统地掌握单片机应用系统的软硬件设计与程序调试方法。
课程设计环境
1.PC兼容机
2.Proteus7.1
3.keilc51v7.06
4.TSC-51/98实验开发系统
5.TMSD集成开发环境
课程设计要求
1.掌握Proteus7.1、keilc51v7.06及单片机开发平台的使用方法;
2.利用现有的实验平台和PC机,根据设计课题要求,组成一个单片机模拟应用系统,结合一个实际的接口技术问题首先在Proteus7.1、keilc51v7.06中调试,再在实验台上编程模拟实现。
3.通过设计掌握单片机硬件电路的设计方法,学会软件程序的编写和调试。
课程
设计
工作
进度
计划
日期
工作内容
2010.12.20-12.21
搜集相关的设计资料,确定选题;
2010.12.22-12.23
搜集并熟悉相关课题资料,整理出设计思路;
2010.12.24
将整体思路模块化,并对本组成员进行工作分组;
2010.12.25-12.27
整理思路,画出工作流程图和设计原理图
2010.12.28-2010.12.29
着重编写和调试运行程序
2010.12.30-12.31
结合硬件配置系统环境,并进行系统验证
任务分配
雷赞
硬件电路
雷赞、贾晨
软件编程
雷赞、夏欢
软件编程
雷赞、蒋小菊
资料整理
彭瑞琨、蒲相印
资料打印
目录
1、引言-2-
1.1电子数字时钟方案-3-
1.2数码管显示方案-3-
1.3系统的简要说明-4-
2、电子数字钟的硬件电路-4-
2.1复位电路-5-
2.3控制电路-6-
3、软件设计分析-8-
3.1地址空间及端口分配-8-
3.2总体架构说明-8-
3.3各子程序功能及出入口地址-9-
3.4程序流程图-10-
3.5源程序-10-
4、调试过程-18-
5、课设结果-19-
6、心得体会-20-
参考文献-20-
附录1-21-
附录2-21-
课程设计任务书及成绩评定-22-
1、设计的目的与要求。
-22-
2、设计进度及完成情况-22-
3、成绩评定-22-
1、引言
1.1电子数字时钟方案
方案一:
本方案采用Dallas公司的专用时钟芯片DS12887A。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
1.2数码管显示方案
方案一:
静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:
动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
1.3系统的简要说明
利用单片机(AT89C51)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。
一个按键用于时间调整。
下图为该数字时钟的系统框图。
图1.1数字时钟的系统框图
2、电子数字钟的硬件电路
2.1复位电路
图2.1复位电路
如图2.1所示,复位电路主要由型号为1N4148的二极管,型号为10UF/16V的电解电容,型号为104的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。
2.2数码管的连接电路
图2.2数码管内部连接电路
图2.3数码管的外部引脚图
图2.3为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89C51控制组合0-9十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。
由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。
2.3控制电路
2.4数字时钟的控制电路
AT89C51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4Kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
如图3-7所示,AT89C51有40引脚,双列直插(DIP)封装,所用引脚功能如下:
1.VCC——运行时加+5V
2.GND——接地
3.XTAL1——振荡器反相放大器及内部时钟发生器的输入端
4.XTAL2——振荡器反相放大器的输出端
5.RST——复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFTAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
6.EA/VPP——片外程序存储器访问允许信号。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
7.P1口,P2口——P1,P2是一组带内部上拉电阻的8位双向I/O口。
运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最大电流的限制,应加上一限流电阻。
P2.0——P2.5口控制数码管的位选,使六个数码管轮流显示数据,等于1时位选三极管导通,等于0时位选三极管截止。
无自锁开关——(S2-P3.7)开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。
图2.5电子钟整体电路图
3、软件设计分析
3.1地址空间及端口分配
30h—37h地址空间分别分配给led1、led2、led3、led4、led8、led5、led6、led7.用于数码管显示。
38h地址空间分配给gn,定义38h空间为按键次数读取的缓存空间。
39h地址空间分配给nao1f,用于存储调整闹钟一分加一按键次数读取缓存。
3ah地址空间分配给nao1s,用于存储调整闹钟一时加一按键次数读取缓存。
3bh地址空间分配给nk1,定义3bh空间是闹钟开启开关按键次数读取缓存空间。
3dh地址空间分配给nao2f,用于存储调整闹钟二分加一按键次数读取缓存。
3eh地址空间分配给nao2s,用于存储调整闹钟二时加一按键次数读取缓存。
50h地址空间用于存放50ms中断寄存。
51h地址空间用与存放秒的十位和个位。
52h地址空间用与存放分的十位和个位。
53h地址空间用与存放时的十位和个位。
p1.1端口分配给zdled,定义灯接到p1.1.利用setb和clrzdled控制灯的亮暗起到整点报时显示作用。
p1.0端口分配给nb,定义蜂鸣器接到p1.0利来实现闹肿
p0端口分配给数码管显示控制
p2端口分配给数码管选择显示控制。
3.2总体架构说明
该时钟程序设计思路如下:
(1)、在程序头将设计中的一些固定空间进行分配并注释。
(2)、初始化程序,如设定时钟初始显示00—59—56以便一开始就能进入整点报时状态,显示该功能;设定使用定时器1;将一些未到时钟设计功能的功能端口关闭等。
(3)开始主程序进行程序扫描,先扫描拆字子程序,将分配好的时分秒等高地位的数字调入到显示子程序中。
——>显示子程序通过分配的空间对应口将拆字子程序的内容在七段数码管上显示相应的时分秒,再调用走时程序使时钟进行读秒等工作。
——>进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。
如进入时间调整、闹钟一设置、闹钟开启与否等。
——>进入闹钟一、二的判断,在时分上与设置的闹铃时间吻合的话就做相对应的判断,再依据是否有开启闹钟而进行响铃与否,如果有响铃则设置其一直响铃知道有人为按取消按键取消闹铃。
——>进入整点报时扫描,判断是否在时分上都进入了整点,如果是就报时显示灯闪烁五下(5s),然后就退出整点报时,等到下一个整点的到来。
——>最后返回主程序头重新依次扫描。
显示过程设有消隐,按键设有去斗。
(4)、子程序部分。
在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。
这些子程序包括显示子程序、拆字子程序、延时子程序、走时间子程序、整点报时子程序、按键处理子程序、调时间子程序、闹钟设置子程序、闹钟子程序、闹钟开启子程序。
3.3各子程序功能及出入口地址
(1)各子程序功能:
显示子程序:
将拆分好的高低位时分秒拆分码放入相对应的数码管,调用tab选通相应的七段数码显示时分秒当前数字。
拆字子程序:
将空间51h、52h、53h内的秒时分拆成高低字节分配到,30h、31h、33h、34h、36h、37h实现时分秒的显示。
延时子程序:
该子程序是为了实现八个七段数码管显示的顺序显示选通时间,2ms的显示时间频率是的显示效果稳定,同时作为按键开关扫描判断去抖
走时间子程序:
该程序功能是使得秒程序走动,走到59后进位分,后变00从新开始计时,分走到59后进位时,分从新开始00计时,时走到23,分走到59,秒走到59后进入从新日期周期计时。
整点报时子程序:
在达到整点时该程序的功能实现报时,报时以led灯闪烁显示为报时信号。
按键处理子程序:
该程序进行按键处理的功能判断分别是有调试按键处理,闹钟设置按键处理,闹钟开启与否按键处理。
调时间子程序:
该程序功能实现时间的调整。
调闹钟子程序:
该程序闹钟程序设计与按键结合实现闹钟设置调整的功能。
闹钟开启子程序:
该功能实现闹钟开启与否而达到闹钟响铃功能。
3.4程序流程图
图3.1电子钟程序流程框图
3.5源程序
;中断入口程序
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断程序入口
LJMPINTT0;跳至INTTO执行
ORG0013H;外中断1中断程序入口
RETI;外中断1中断返回
ORG001BH;定时器T1中断程序入口
LJMPINTT1;跳至INTT1执行
ORG0023H;串行中断程序入口地址
RETI;串行中断程序返回
;主程序
START:
MOVR0,#70H;清70H-7AH共11个内存单元
MOVR7,#0BH;clrP3.7
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H;清20H(标志用)
MOV7AH,#0AH;放入"熄灭符"数据
MOVTMOD,#11H;设T0、T1为16位定时器
MOVTL0,#0B0H;50MS定时初值(T0计时用)
MOVTH0,#3CH;50MS定时初值
MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;50MS定时初值
SETBEA;总中断开放
SETBET0;允许T0中断
SETBTR0;开启T0定时器
MOVR4,#14H;1秒定时用初值(50MS×20)
START1:
LCALLDISPLAY;调用显示子程序
JNBP3.7,SETMM1;P3.7口为0时转时间调整程序
SJMPSTART1;P3.7口为1时跳回START1
SETMM1:
LJMPSETMM;转到时间调整程序SETMM
INTT0:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET0;关T0中断允许
CLRTR0;关闭定时器T0
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0;
MOVTH0,A;重装初值(高8位修正值)
SETBTR0;开启定时器T0
DJNZR4,OUTT0;20次中断未到中断退出
ADDSS:
MOVR4,#14H;20次中断到(1秒)重赋初值
MOVR0,#71H;指向秒计时单元(71H-72H)
ACALLADD1;调用加1程序(加1秒操作)
MOVA,R3;秒数据放入A(R3为2位十进制数组合)
CLRC;清进位标志
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT0;小于60秒时中断退出
ACALLCLR0;大于或等于60秒时对秒计时单元清0
MOVR0,#77H;指向分计时单元(76H-77H)
ACALLADD1;分计时单元加1分钟
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH
ADDHH:
JCOUTT0;小于60分时中断退出
ACALLCLR0;大于或等于60分时分计时单元清0
MOVR0,#79H;指向小时计时单(78H-79H)
ACALLADD1;小时计时单元加1小时
MOVA,R3;时数据放入A
CLRC;清进位标志
CJNEA,#24H,HOUR
HOUR:
JCOUTT0;小于24小时中断退出
ACALLCLR0;大于或等于24小时小时计时单元清0
OUTT0:
MOV72H,76H;中断退出时将分、时计时单元数据移
MOV73H,77H;入对应显示单元
MOV74H,78H
MOV75H,79H
POPPSW;恢复状态字(出栈)
POPACC;恢复累加器
SETBET0;开放T0中断
RETI;中断返回
;闪动调时程序
INTT1:
PUSHACC;中断现场保护
PUSHPSW
MOVTL1,#0B0H;装定时器T1定时初值
MOVTH1,#3CH
DJNZR2,INTT1OUT;0.3秒未到退出中断(50MS中断6次)
MOVR2,#06H;重装0.3秒定时用初值
CPL02H;0.3秒定时到对闪烁标志取反
JB02H,FLASH1;02H位为1时显示单元"熄灭"
MOV72H,76H;02H位为0时正常显示
MOV73H,77H
MOV74H,78H
MOV75H,79H
INTT1OUT:
POPPSW;恢复现场
POPACC
RETI;中断退出
FLASH1:
JB01H,FLASH2;01H位为1时,转小时熄灭控制
MOV72H,7AH;01H位为0时,"熄灭符"数据放入分
MOV73H,7AH;显示单元(72H-73H),将不显示分数据
MOV74H,78H
MOV75H,79H
AJMPINTT1OUT;转中断退出
FLASH2:
MOV72H,76H;01H位为1时,"熄灭符"数据放入小时
MOV73H,77H;显示单元(74H-75H),小时数据将不显示
MOV74H,7AH
MOV75H,7AH
AJMPINTT1OUT;转中断退出
;加1子程序
ADD1:
MOVA,@R0;取当前计时单元数据到A
DECR0;指向前一地址
WAPA;A中数据高四位与低四位交换
ORLA,@R0;前一地址中数据放入A中低四位
ADDA,#01H;A加1操作
DAA;十进制调整
MOVR3,A;移入R3寄存器
ANLA,#0FH;高四位变0
MOV@R0,A放回前一地址单元
MOVA,R3;取回R3中暂存数据
INCR0;指向当前地址单元
SWAPA;A中数据高四位与低四位交换
ANLA,#0FH;高四位变0
MOV@R0,A;数据放入当削地址单元中
RET;子程序返回
;清零程序
CLR0:
CLRA;清累加器
MOV@R0,A;清当前地址单元
DECR0;指向前一地址
MOV@R0,A;前一地址单元清0
RET;子程序返回
;时钟调整程序
SETMM:
CLRET0;关定时器T0中断
CLRTR0;关闭定时器T0
LCALLDL1S;调用1秒延时程序
JBP3.7,CLOSEDIS;键按下时间小于1秒,关闭显示(省电)
MOVR2,#06H;进入调时状态,赋闪烁定时初值
SETBET1;允许T1中断
SETBTR1;开启定时器T1
SET2:
JNBP3.7,SET1;P3.7口为0(键未释放),等待
SETB00H;键释放,分调整闪烁标志置1
SET4:
JBP3.7,SET3;等待键按下
LCALLDL05S;有键按下,延时0.5秒
JNBP3.7,SETHH;按下时间大于0.5秒转调小时状态
MOVR0,#77H;按下时间小于0.5秒加1分钟操作
LCALLADD1;调用加1子程序
MOVA,R3;取调整单元数据
CLRC;清进位标志
CJNEA,#60H,HHH;调整单元数据与60比较
HHH:
JCSET4;调整单元数据小于60转SET4循环
LCALLCLR0;调整单元数据大于或等于60时清0
CLRC;清进位标志
AJMPSET4;跳转到SET4循环
CLOSEDIS:
SETBET0;省电(LED不显示)状态。
开T0中断
SETBTR0;开启T0定时器(开时钟)
CLOSE:
JBP3.7,CLOSE;无按键按下,等待。
LCALLDISPLAY;有键按下,调显示子程序延时削抖
JBP3.7,CLOSE;是干扰返回CLOSE等待
WAITH:
JNBP3.7,WAITH;等待键释放
LJMPSTART1;返回主程序(LED数据显示亮)
SETHH:
CLR00H;分闪烁标志清除(进入调小时状态)
SETHH1:
JNBP3.7,SET5;等待键释放
SETB01H;小时调整标志置1
SET6:
JBP3.7,SET7;等待按键按下
LCALLDL05S;有键按下延时0.5秒
JNBP3.7,SETOUT;按下时间大于0.5秒退出时间调整
MOVR0,#79H;按下时间小于0.5秒加1小时操作
LCALLADD1;调加1子程序
MOVA,R3
CLRC
CJNEA,#24H,HOUU;计时单元数据与24比较
HOUU:
JCSET6;小于24转SET6循环
LCALLCLR0;大于或等于24时清0操作
AJMPSET6;跳转到SET6循环
SETOUT:
JNBP3.7,SETOUT1;调时退出程序。
等待键释放
LCALLDISPLAY;延时削抖
JNBP3.7,SETOUT;是抖动,返回SETOUT再等待
CLR01H;清调小时标志
CLR00H;清调分标志
CLR02H;清闪烁标志
CLRTR1;关闭定时器T1
CLRET1;关定时器T1中断
SETBTR0;开启定时器T0
SETBET0;开定时器T0中断(计时开始)
LJMPSTART1;跳回主程序
SET1:
LCALLDISPLAY;键释放等待时调用显示程序(调分)
AJMPSET2;防止键按下时无时钟显示
SET3:
LCALLDISPLAY;等待调分按键时时钟显示用
AJMPSET4
SET5:
LCALLDISPLAY;键释放等待时调用显示程序(调小时)
AJMPSETHH1;防止键按下时无时钟显示
SET7:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一组 电子 数字 课程设计