《单片机技术》课程设计说明书基于单片机的电子钟的设计副本.docx
《《单片机技术》课程设计说明书基于单片机的电子钟的设计副本.docx》由会员分享,可在线阅读,更多相关《《单片机技术》课程设计说明书基于单片机的电子钟的设计副本.docx(28页珍藏版)》请在冰点文库上搜索。
![《单片机技术》课程设计说明书基于单片机的电子钟的设计副本.docx](https://file1.bingdoc.com/fileroot1/2023-6/2/4376a3cb-f92b-40a9-85c8-2f8ce4ae586a/4376a3cb-f92b-40a9-85c8-2f8ce4ae586a1.gif)
《单片机技术》课程设计说明书基于单片机的电子钟的设计副本
课程设计(论文)
题目名称单片机电子时钟课程设计
课程名称单片机原理及应在电气测控学科中的应用
学生姓名
学号
系、专业电气工程系自动化
指导教师朱群峰
2011年7月1日
邵阳学院课程设计(论文)任务书
年级专业
学生姓名
学号
题目名称
基于89C51的电子时钟设计
设计时间
2012年5月21日—2012年6月1日
课程名称
单片机原理及应在电气测控学科中的应用
课程编号
121200105
设计地点
数字控制与PLC实验室(305)
一、课程设计(论文)目的
课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。
单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象.《单片机课程设计》是继《电子技术》、和《单片机原理与应用》课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。
二、已知技术参数和条件
1、电子时钟见第三项“任务和要求”具体参数
2、89C51系列单片机;
3、KEIL软件;Wave软件
4、THKSCM-1型单片机实验系统。
三、任务和要求
设计要求:
熟悉单片机的I/O口原理;掌握LED驱动电路和LED显示的原理;掌握定时计数器的使用;掌握汇编语言程序设计方法。
设计任务:
设计一个电子时钟,
要求实时显示时间(时钟/分钟/秒钟)
要求可以通过按键设置当前时间。
1、要求设计出电气原理图;
2、要求设计出程序流程图和程序;
3、要求设计出实物仿真模拟调试。
注:
1.此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效;
2.此表1式3份,学生、指导教师、教研室各1份。
四、参考资料和现有基础条件(包括实验室、主要仪器设备等)
1、单片机课程设计指导,北京航空航天大学出版社,楼然苗等2007年7月
2、单片机实验与实践教程,北京航空航天大学出版社,何立民等2004年7月
3、THKSCM-1型单片机实验系统实验指导书、KEIL软件,WAVE软件
4、数字控制与PLC实验室”THKSCM-1型单片机实验系统”。
五、进度安排
2012年5月21日-22日:
收集和课程设计有关的资料,熟悉课题任务何要求总体方案设计
2012年5月23日-25日:
硬件电路设计
2012年5月26日-28日:
软件设计
2012年5月29日-30日:
系统调试改进
2012年5月31日:
整理书写设计说明书
2012年6月1日:
答辩并现场考核
六、教研室审批意见
教研室主任(签名):
年月日
七|、主管教学主任意见
主管主任(签名):
年月日
八、备注
指导教师(签字):
学生(签字):
邵阳学院课程设计(论文)评阅表
学生姓名学号
系电气工程系专业班级1
题目名称单片机电子时钟设计课程名称单片机
一、学生自我总结
经过自己的努力和同一组类的同学的合作,我们根据具体要求,准备好材料,并设计好原理图,程序框图,分析并编好程序,经过调试,完成好了程序的设计。
然后按照设计图纸焊接好电路板,经过一系列测试,终于圆满完成了基于单片机89C51的电子时钟设计。
做出实物交上去后并通过了答辩,现在也已完成了论文。
可以称得上算是很好的完成了老师交给的任务,同时也亲身体验了自己做实物的乐趣,我们对单片机这门课程也有了更深一层次的认识,也激发了我们的学习兴趣,所以,我觉得我经过了这次电子时钟的设计,获益颇丰。
学生签名:
年月日
二、指导教师评定
评分项目
平时成绩
论文
答辩
综合成绩
权重
30
40
30
单项成绩
指导教师评语:
指导教师(签名):
年月日
注:
1、本表是学生课程设计(论文)成绩评定的依据,装订在设计说明书(或论文)的“任务书”页后面;
2、表中的“评分项目”及“权重”根据各系的考核细则和评分标准确定。
摘要
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?
这就要求人们不断设计出新型时钟。
数字电子钟的设计方法有多种,其中,利用单片机实现的电子钟具有编程灵活,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号,精确度高等特点,同时可以用该电子钟发出各种控制信号。
本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
与传统机械表相比,它具有走时精确,显示直观等特点。
它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能等特点。
该电子钟可以做到的功能:
上电或按键复位后能自动显示系统提示符“P.”进入时钟准备状态2.第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态。
再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
通过设置的A、B、C、D四个键来调整运行,并且利用了8位LED显示时分秒。
此电子钟严格按照要求设计,最终达到预期的效果,能够正确显示“P”点以及时分秒的计时,算是一次比较成功的设计了。
关键词:
电子钟;单片机;汇编
第1章电子钟功能及总体方案的介绍
1.1电子钟功能介绍
1.1.1基本功能要求
可调整运行的电子钟具有三种工作状态:
“P.”状态、运行状态、调整状态。
(1)、“P.”状态,依靠上电或按复位键进入,在此状态下,按B、C、D键均无效,按A键有效,进入运行状态;
(2)、运行状态,按奇数次A键进入,在此状态下,按B、C、D键均无效,只有按A键有效,按下A键后,退出运行状态,进入调整状态;
(3)、调整状态,按偶数次A键进入,在此状态下,按A、B、C、D键均有效。
如按下A键,则退出调整状态,进入运行状态;按下B、C、D键,则分别对时、分、秒加1,调整结束后必须按A键,即可退出调整状态,进入运行状态。
基本功能要求:
“P.”稳定地显示在LED显示器的最左端数码管(LED5)上,无A键按下(在“P.”状态下,按下B、C、D键无效),则不进入电子钟的运行状态,继续显示“P.”。
按下A键后,电子钟以起始时间:
00时00分00秒开始运行。
再次按下A键后,电子钟退出运行状态,进入调整状态,利用B、C、D键把电子钟的显示时间修改为当前实时时间,时间修改正确后可再次按下A键,电子钟则退出调整状态,进入运行状态。
注意:
每次按下B、C、D键,只允许加一,不允许连加。
1.1.2扩展功能要求
(1)、在调整状态下,按下B、C、D键,允许连加,而A键无论在何种状态下,均不允许连击;
(2)、时、分、秒的间隔符“。
”以一定频率闪烁;
(3)、时间显示以“灭零”方式进行;
(4)、可调整运行的电子钟用两个按键(例如:
A键、B键)来控制。
1.2总体方案介绍
1.2.1计时方案
利用AT89C51单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
1.2.2键盘/显示方案
AT89C51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口,P2口作六个LED数码管的位控输出线,P1口外接四个按键A、B、C、D构成键盘电路。
AT89C51是一种低功耗,高性能的CMOS8位微型计算机。
它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。
简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本书中采用此的设计方案,结构如图1-1如示。
第2章电子钟的工作原理
2.1实现时钟计时的基本方法
利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现时钟计数。
(1)计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。
假设使用T/C0,方式1,50ms定时,fosc=12MHz。
则初值X满足(216-X)×1/12MHz×12μs=50000μs
X=15536→0011110010110000→3CB0H
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3)从秒到分和从分到时的计时是通过累加和数值比较实现。
2.2电子钟的时间显示
电子钟的时钟时间在六位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共8个单元。
LED8LED7LED6LED5LED4LED3LED2LED1
37H36H35H34H33H32H31H30H
时十位时个位分隔分十位分个位分隔秒十位秒个位
2.3电子钟的启、停及时间调整
电子钟设置4个按键通过程序控制来完成电子钟的启、停及时间调整。
A键控制电子钟的启、停;
B键调整时;
C键调整分;
D键调整秒。
第3章电子钟原理图及元件清单
3.1电子钟电路原理图
电子钟原理图(见附录1)
3.2元件清单
电子钟元件清单如表1所示:
表1 电子钟元器件清单
元件名称
规格型号
数量(个)
单片机
AT89C51
1
显示驱动芯片
74LS245
2
8位一体的共阳LED显示器
7SEG-MPX8-CA-BLUE
1
晶振
12MHz
1
电容
33pF
2
电容
22μF
1
按键
BUTTON
5
电阻
0.2K
1
电阻
1K
1
上拉电阻
10K
4
限流电阻
0.1K
8
排阻
RESPACK-8/10K
1
第4章软件系统设计
4.1电子钟程序流程框图
4.1.1主程序流程框图
见图4-1所示
图4-1主程序流程框图
4.1.2键扫子程序流程框图
见图4-2所示
4.1.3中断服务程序流程框图
见图4-3所示
4.1.4“P.”点显示子程序流程框图
见图4-4所示
4.1.5显示子程序流程框图
见图4-5所示
4.1.6加一子程序流程框图
见图4-6所示
4.2电子钟总体程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^0;//各引脚定义//液晶
sbitrw=P3^1;
sbiten=P3^2;
sbits1=P1^0;//键盘
sbits2=P1^1;
sbits3=P1^2;
sbitbeep=P1^3;//蜂鸣器
uintshi,fen,miao,s1num=0,num=0;
voiddelay(uintx)//延时程序
{
uinti,j;
for(i=0;i<110;i++)
for(j=0;j}
voidlaba()//蜂鸣器程序
{
beep=1;
delay(100);
beep=0;
}
voidwrite_com(ucharcommand)//液晶写命令
{
rs=0;
en=0;
rw=0;
P2=command;
delay
(2);
en=1;
delay
(2);
en=0;
delay
(2);
}
voidwrite_date(uchardate)//液晶写数据
{
rs=1;
en=0;
rw=0;
P2=date;
delay
(2);
en=1;
delay
(2);
en=0;
delay
(2);
}
voidinit()//液晶初始化
{
write_com(0x30);
write_com(0x0c);
write_com(0x01);
delay
(2);
}
voidwrite_sfm(ucharadd,uchardate)//数据分离、显示
{
ucharsi,ge;
si=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+si);
write_date(0x30+ge);
}
voidkeyscan()//键盘扫描
{
if(s1==0)
{
delay(5);
if(s1==0)
{s1num++;
while(!
s1);
laba();
if(s1num==1)
{
TR0=0;
write_com(0x80+0x06);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x03);
}
if(s1num==3)
{
write_com(0x80+0x00);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}
}
if(s1num!
=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!
s2);
laba();
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(6,miao);
write_com(0x80+6);
}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(3,fen);
write_com(0x80+3);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(0,shi);
write_com(0x80+0);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!
s3);
laba();
if(s1num==1)
{
miao--;
if(miao==-1)
miao=59;
write_sfm(6,miao);
write_com(0x80+0x06);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(3,fen);
write_com(0x80+0x03);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(0,shi);
write_com(0x80+0x00);
}
}
}
}
}
voidmain()//主程序
{
miao=0;fen=0;shi=0;
init();
write_sfm(0x06,miao);
write_com(0x80+0x05);
write_date(':
');
write_sfm(0x03,fen);
write_com(0x80+0x02);
write_date(':
');
write_sfm(0x00,shi);
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
keyscan();
}
}
voidT0_time()interrupt1//定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(0x00,shi);
}
write_sfm(0x03,fen);
}
write_sfm(0x6,miao);
}
}
第5章电子钟的使用说明及调试运行
5.1使用说明书
5.1.1操作说明
(1)时间显示:
电子钟上电后,8个数码管显示初始状态即最左边的一个数码管显示P.。
如果未显示P.,只需按一下复位键即可使其显示出P.。
按下A键后电子钟进入自动计时状态,电子钟显示00时00分00秒并开始运行。
(2)时间调整:
若要进行时间调整,则需再次按下A键,进入时间调整状态,然后分别按下B键调时,按下C键调分,按下D键调秒,按下B、C、D键并松开可使电子钟的时,分,秒分别加一。
调整好时间后,按下A键就可以回到调整好的时间为基础的自动计时状态。
无论是在自动计时,还是在调整校正时,都可按下复位键使系统回到显示P.的初始状态。
其中B键显示范围为0-23,0为24点;C,D键显示范围为0-59,0为60分。
5.2电子钟运行结果
5.2.1待机
(如图5-1所示)
5.2.2启动
(如图5-2所示)
图5-2启动
5.2.3运行
(如图5-3所示)
第6章误差分析
在调试运行过程中,在所有参数正确的情况下,我的结果仍出现运行缓慢情况。
产生误差的主要原因是我们用软件计时,计时1秒是采用定时器的中断服务程序。
当电子钟运行1秒,执行中断程序需要一定时间,这个时间就是所产生的误差,这个误差是不可避免的。
同时,单片机工作也会受到环境的影响,比如温度、湿度,以及其它电子设备的干扰。
因此,应该让电子钟工作在适度温度、干燥和电子干扰较少的环境下,还有一种方法就是采用实时时钟芯片,这样可以使误差降低到最少。
参考资料
[1]胡辉,单片机应用系统设计与训练[M],中国水利水电出版社,2004.9.
[2]曹巧媛,单片机原理及应用[M],北京:
电子工业出版社,1997.7.
[3]赵秀珍,单永磊,单片微型计算机原理及其应用[M],北京:
中国水利水电出版社,2001.8.
[4]张毅刚,修林成,胡振江,MCS-51单片机应用设计[M],哈尔滨:
哈尔滨工业大学出版社,1990.8.[5]张洪润,兰清华,单片机应用技术教程[M],北京:
清华大学出版社,1997.11.
[6]李华,MCS-51系列单片机实用接口技术[M],北京:
北京航空航天大学出版社,1993.8.
附录
致谢
这次的课程设计,所谓是一波三折啊。
但终于还是完成了!
这个历史性时刻的来临,要感谢的人太多太多!
首先,感谢我们尊敬的老师,有了他的谆谆教诲,处处提点,我才得以成功的完成。
是他在课堂上将电子钟的原理及设计思路详细讲解给我们听,也是王老师一次次给我们指出原理图的错误,让我们修改再重新绘制。
老师在课堂上严格要求我们,这是对我们的负责,毕竟严师出高徒。
而我自由散漫的性格弱点也说明了我需要这样的老师来对我进行督促和鞭策,我学到的不仅仅只有书本上的知识,还有做人的道理。
他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。
在此谨向王老师致以诚挚的谢意和崇高的敬意。
其次,是我亲爱的寝室兄弟们,如果没有她们的对我的帮助和关照还有鞭策,我想,我对KEIL和PROTEUS这些软件根本就不会这么熟练起来的。
最后要感谢徐述,是他在我搞设计感到很郁闷的时候,开导我,让我心情保持舒畅,我才得以更好的完成这次设计。
谢谢他!