单片机时钟报告.docx
- 文档编号:29259772
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:29
- 大小:662.62KB
单片机时钟报告.docx
《单片机时钟报告.docx》由会员分享,可在线阅读,更多相关《单片机时钟报告.docx(29页珍藏版)》请在冰豆网上搜索。
单片机时钟报告
湖南工业大学
课程设计
资料袋
电气与信息工程学院3学年第1学期
课程名称单片机课程设计指导教师凌云职称教授
学生姓名专业班级电气1102学号113019102
题目数字钟
成绩起止日期2013年12月23日~2014年1月10日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
2
课程设计说明书
3
课程设计图纸
张
4
心得体会
湖南工业大学
课程设计任务书
2013—2014学年第1学期
电气与信息工程学院电气自动化专业电气班
课程名称:
单片机系统课程设计
设计题目:
数字钟
完成期限:
自2013年12月23日至2014年1月10日共3周
内
容
及
任
务
1.1单片机硬件显示装置制作(基本要求)
1.1.12人一组自行购买元器件,在焊接板上焊接一个单片机硬件显示装置,显示器至少能够显示2位数字。
1.1.2编写程序,在自己焊接的单片机硬件显示装置上,至少显示自己学号的最后2位。
程序可以用汇编语言或者是C51语言编写。
1.2数字钟设计(发挥要求)
在自己焊接的单片机硬件显示装置上,采用单片机内部的定时器设计24小时制数字钟,数字钟有6位数子显示,要求采用2个按键实现对钟校时。
单片机外接晶体振荡器频率准确稳定时,要求保证数字钟没有计时误差。
程序可以用汇编语言或者是C51语言编写。
1.3独立撰写完成课程设计说明书(课程设计报告)
进
度
安
排
起止日期
工作内容
2013.12.23~2013.12.29
焊接单片机硬件显示装置,编写程序
2013.12.30~2014.01.04
完成系统调试,课程设计软件、硬件验收
2014.01.05~2014.01.10
撰写课程设计报告
主
要
参
考
资
料
[1]欧伟明,何静,凌云.单片机原理与应用系统设计.电子工业出版社,2009年
[2]凌云等.单片机原理与技能训练.电子工业出版社,2012年
[3]刘苗生,潘宗预.单片机测控系统设计.中国物质出版社,2006年
单片机系统课程设计说明书
数字钟
起止日期:
2013年12月23日至2014年1月10日
学生姓名
班级
电气
学号
成绩
湖南工业大学电气与信息工程学院
2014年1月10日
摘要
数字钟在日常生活中最常见,应用也最为广泛。
作为一种定时工具被广泛的使用在生产生活的各方面。
人类最初靠太阳的角度进行定时,所以受天气的影响比较大,为了克服依靠自然现象定时的缺点人们发明了一系列的机器钟表,数字钟表等定时工具。
而数字钟具有价格便宜,质量轻,定时误差小等优点,被广泛的应用在生产,生活的各方面。
由于数字钟能够提供精确定时又被广泛应用在测量之中。
此数字钟采用单片机设计,8段数码管通过单片机进行刷新显示。
其设计的产品除了单片机外没有使用其它的集成块,使其成本可以大大降低,而其便于维修。
成品可以广泛用于公共场所,教学等方面。
本次主要是设计一款数字钟,以AT89C51单片机为核心,配备LED显示模块,按键输入等功能模块。
数字钟24小时制方式显示时间,定时信息等功能。
数字钟的设计给人们的生活带来了极大的方便,因此,研究数字钟及扩大其应用有着非常现实的意义。
关键词:
开关电源,反激式,单片机AT89C51,共阴极LED数码显示器
目录
摘要I
第1章系统主要功能及设计方案1
1.1系统功能1
1.2系统设计方案1
1.2.1计时方案1
1.2.2显示方案1
第2章系统的硬件设计1
2.1单片机AT89S521
2.2按键电路1
2.3晶振电路1
2.4显示电路1
2.5下载端口1
2.6声音电路1
2.7供电电路1
第3章系统的软件设计1
3.1主程序模块1
3.2计时模块1
3.3时间设置模块1
3.4时间设置模块1
3.4系统源程序1
结论1
参考文献1
致谢1
附录1硬件电路原理图1
第1章系统主要功能及设计方案
1.1系统功能
自动显示二十四小时制当前时间,按键调整时间。
数字钟的图片如图1.1所示,利用6个八段LED数码管实现数字钟的时,分,秒。
图1.1
1.2系统设计方案
本次设计时钟电路,使用了ATC89S52单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:
按键、芯片、扬声器、LED显示即可满足设计要求。
系统原理框图如1.2所示。
1.2.1计时方案
利用单片机内部的定时计数器进行中端定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,但程序设计较为复杂。
1.2.2显示方案
对于实时时钟而言,显示显然是另一个重要的环节。
通常LED显示有两种方式:
动态显示和静态显示。
静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。
但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。
需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。
当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。
LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。
本系统需要采用8位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。
图1.2
第2章系统的硬件设计
2.1单片机AT89S52
AT89S52单片机是由深圳宏晶公司代理销售的一款MCU,是由美国设计生产的一种低电压、高性能CMOS8位单片机,片内含8kbytes的可反复写的FlashROM和128bytes的RAM,2个16位定时计数器[5]。
AT89S52单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0~P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。
这些部件通过内部总线联接起来,构成一个完整的微型计算机。
其管脚图如图2.1所示。
VCC:
电源。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
如图2.2
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
2.2按键电路
系统按键电路使用了3个独立按键,3个按键并且接到单片机AT89352的P1口。
按键1与P1.0口相连,按键2与P1.1口相连,按键3与P1.2口相连。
3个按键的作用都是用来调节数字钟的时间,按键1调节数字钟的时钟,按键2调节数字钟的分钟,按键3调节数字钟的秒钟。
2.3晶振电路
本设计晶振电路采用12M的晶振。
晶振的作用是给单片机正常工作提供稳定的时钟信号。
单片机的晶振并不是只能用12M,只要不超过20M就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12M的话,一个时钟周期为12us,那么定时器计一次数就是1us了,电容范围在20-40pF之间,这里连接的是30pF的电容。
机器周期=10*晶振周期=12*系统时钟周期
2.4显示电路
就时钟而言,通常可采用液晶显示或数码管显示。
由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。
另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。
数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。
对于实时时钟而言,显示显然是另一个重要的环节。
通常LED显示有两种方式:
动态显示和静态显示。
静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。
但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。
需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。
当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。
LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。
本系统需要采用6位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。
2.5下载端口
设计用到的STC89C52单片机芯片的ISP下载线是通过单片机的TXD,RXD引脚把程序烧进去的。
管脚TXD和RXD用于异步串行通信。
其实STC89C52单片机的ISP下载线就是一个max232芯片连接STC和计算机的串行通信口。
计算机把程序从九针串口送到max232芯片,电平转换后送进单片机的串行口,也就是TXD和RXD。
然后单片机的串行模块把数据送到程序区。
2.6声音电路
电路接法:
三极管选定PNP型,基极e连接5V电压,b极连接一个4.7K左右的电阻后接I/O口,集电极C连接蜂鸣器后接地。
单片机在复位后的个I/O口是高电平,此时三极管是截止的,编写程序使选定的I/O为低电平,此时三极管导通,导通后蜂鸣器与电源正极连通,构成一个工作回路,从而发出滴滴的响声。
其中电阻R1在电路里起分压限流的作用,PNP三极管起到模拟开关的作用。
2.7供电电路
外接电源电路用于连接外部5V电源与电子时钟电路,通过自锁开关控制电路的导通与断开,当开关闭合时,电路导通,外部电源给电路正常供电,电子时钟正常工作。
当开关断开时,电路停止工作。
图2.2
图2.3
图2.4
图2.5
图2.6
图2.7
第3章系统的软件设计
3.1主程序模块
主程序主要用于系统初始化:
设置计时缓冲区的位置及初值,设置8155的工作方式、定时器的工作方式和计数初值等参数。
主程序流程如图3.1。
图3.1图3.2
3.2计时模块
系统使用6MHz的晶振,假设定时器0工作在方式1,则定时器的最大定时时间为65.536ms,这个值远远小于1s。
因此本系统采用定时器与软件循环相结合的定时方法。
设定时器0工作在方式1,每隔50ms溢出中断一次,则循环中断20次延时时间是1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:
00:
00。
因定时器0工作在方式1,则50ms定时对应的定时器初值为:
65536-50ms/2us=40536=9E58H,即TH0=9EH,TH0=58H。
但应当指出:
CPU从响应T0中断到完成定时器初值重装这段时间,定时器T0并不停止工作,而是继续计数。
计时模块如图3.2所示。
3.3时间设置模块
该模块由键盘输入相应的数据来设置当前时间。
程序通过调用一个键盘设置子程序通过键盘扫描将键入的6位时间值送入显示缓冲区。
设置时间后,时钟要从这个时间开始计时,而时分秒单元各占一个字节,键盘占6个字节。
因此程序中要调用一个合字子程序将显示缓冲区中的6位BCD码合并为3位压缩BCD码,并送入计时缓冲区,作为当前计时起始时间。
该程序同时要检测输入时间值的合法性,若键盘输入的小时值大于23,分、秒值大于59,则不合法,将取消本次设置,清零重新开始计时。
时间设置和键盘设置子程序的流程图如图3.3所示。
调用键盘设置子程序
调用子程序
返回
图3.3
3.4时间设置模块
该模块完成时分秒6位LED的动态显示。
因为显示为6位,二计时是个字节单元,为此,必须将3字节计时缓冲区中的时分秒压缩BCD码拆分为6字节BCD码,并送入显示缓冲区中。
当按下调整时间键后,在6位设置完成之前,这6个LED应该显示键人的数据,不显示当前的时间。
时间设置模块如图3.4所示。
N
Y
图3.4
3.4系统源程序
#include
sbitsmg1=P2^7;
sbitsmg2=P2^6;
sbitsmg3=P2^4;
sbitsmg4=P2^3;
sbitsmg5=P2^1;
sbitsmg6=P2^0;
charcflag=0;
unsignedcharh_H,h_L,m_H,m_L,s_H,s_L,H,M,S,count;
unsignedcharflag=0,countflag=0;
unsignedintcountn;
unsignedchartable[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
voidss();
voiddelay()
{
unsignedintcount=220;
while(count--);
}
voidyiwei()//位置移动
{
if(k1==0)
{
delay();
if(k1==0)
{
flag=++flag%7;
TR0=0;//关闭定时器
}
while(k1==0);//松手检测
}
}
voidqueren()//确认键
{
if(k3==0)
{
delay();
if(k3==0)
{
flag=0;
TR0=1;
cflag=0;
}
while(k3==0);
}
}
voidjiashu()//数字加
{if(k2==0)
{delay();
if(k2==0)
{
switch(flag)
{
case0:
break;
case1:
S++;break;
case2:
S=S+10;if(S/10==6)S=0;break;
case3:
M++;break;
case4:
M=M+10;if(M/10==6)M=0;break;
case5:
H++;break;
case6:
H=H+10;if(H/10==3)H=0;if((h_H*10+h_L)>24)H=0;break;
default:
break;
}
while(k2==0);
}
}
}
voidsmgdisplay(unsignedcharwei,unsignedcharf)
{
switch(wei)
{
case6:
smg2=1;smg3=1;smg4=1;smg5=1;smg6=1;if(f==1)smg1=0;elsesmg1=1;P0=table[h_H];break;
case5:
smg1=1;smg3=1;smg4=1;smg5=1;smg6=1;if(f==1)smg2=0;elsesmg2=1;P0=table[h_L];break;
case4:
smg1=1;smg2=1;smg4=1;smg5=1;smg6=1;if(f==1)smg3=0;elsesmg3=1;P0=table[m_H];break;
case3:
smg1=1;smg2=1;smg3=1;smg5=1;smg6=1;if(f==1)smg4=0;elsesmg4=1;P0=table[m_L];break;
case2:
smg1=1;smg2=1;smg3=1;smg4=1;smg6=1;if(f==1)smg5=0;elsesmg5=1;P0=table[s_H];break;
case1:
smg1=1;smg2=1;smg3=1;smg4=1;smg5=1;if(f==1)smg6=0;elsesmg6=1;P0=table[s_L];break;
}
}
voiddisplay()
{
smgdisplay(1,1);
delay();
smgdisplay(2,1);
delay();
smgdisplay(3,1);
delay();
smgdisplay(4,1);
delay();
smgdisplay(5,1);
delay();
smgdisplay(6,1);
delay();
}
voidinit_time0()
{
TMOD=0X01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0=1;
TR0=1;
EA=1;
}
voidmain()
{init_time0();
while
(1)
{
h_H=H/10;h_L=H%10;
m_H=M/10;m_L=M%10;
s_H=S/10;s_L=S%10;
if(count==20)
{
S++;
count=0;
}
if(S>=60)
{
S=0;
M++;
}
if(M>=59&&S>=59)
{
M=0;
H++;
}
if(H>=23&&M>=59&&S>=59)
{
H=0;
}
yiwei();
queren();
jiashu();
if(H>24)H=0;
if(M>59)M=0;
if(S>59)S=0;
if(flag==0)
{
display();
}
elseswitch(flag)
{
case1:
smgdisplay(2,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);break;
case2:
smgdisplay(1,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);break;
case3:
smgdisplay(1,1),smgdisplay(2,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);break;
case4:
smgdisplay(1,1),smgdisplay(2,1),smgdisplay(3,1),smgdisplay(5,1),smgdisplay(6,1);break;
case5:
smgdisplay(1,1),smgdisplay(2,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(6,1);break;
case6:
smgdisplay(1,1),smgdisplay(2,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(6,1);break;
}
ss();
}
}
voidtime0()interrupt1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
count++;
}
voidss()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 时钟 报告