- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于单片机课程设计论文.doc
关于单片机课程设计论文
关于单片机课程设计论文导读:
单片机课程设计论文
题 目 基于单片机的数字时钟设计
学 号
姓 名
指导教师 ***
二○一三年十一月
一.基于单片机的数字时钟的基本原理
本设计基于STC89C52单片机,采用内部定时器实现走表,用数码管显示实现的简单的电子数字时钟。由于晶振易受温度等因素的影响,所以会出现走表不准的现象,但是对于单片机初学者来讲,是单片机入门的必经之路。而在一些对时间要求较高的场合,可采用DS1302,DS12C887等类似的专用时钟芯片。
STC89C52单片机具有2个定时器,分为定时器0和定时器1,并且各有4种工作方式。用于定时器/计数器管理的特殊功能寄存器有工作方式寄存器TMOD和控制寄存器TCON,寄存器的值由指令写入。当MCS-51单片机系统复位时,两个寄存器所有位都被清零。
1.工作方式寄存器TMOD
寄存器TMOD是定时器/计数器的工作方式控制寄存器,是一个可编程的特殊功能寄存器,字节地址为89H,不可位寻址。其中低四位控制T0,高四位控制T1,其格式如图所示:
D7 D6 D5 D4 D3 D2 D1 D0
GATE:控制方式选择位,用来控制定时器启动操作方式。
当GATE=0时,只能由软件控制TR0或TR1位来控制定时器的启停。TRi(i=0,1)位为1,定时器启动,开始工作;TRi(i=0,1)为0时,定时器停止工作;
当GATE=1时,定时器的启动要由外部中断引脚和TRi(i=0,1)位共同控制。只有当外部中断引脚为高时,TRi(i=0,1)置1才能启动定
时器工作。
C/T: 计数/定时方式选择位,当C/T=0时设置为定时器工作方式,计数脉冲由内部提供,计数周期等于机器周期。当C/T=1时设置为计数器工作方式,计数脉冲由外部引脚T0或T1引入。
M1,M0:工作方式控制位,这2位可形成四种编码,对应于四种工作方式。4种工作方式对应于下表:
2.控制寄存器TCON
控制寄存器TCON是一个8位特殊功能寄存器,字节地址为88H,可以位寻址,位地址为88H-8FH,用来存放控制字,控制定时器的启停,定时器的溢出标志设置和外部触发方式等。
D7 D6 D5 D4 D3 D2 D1 D0 本设计中用到了两个定时器,并且都用的是方式1,定时器0用来产生秒信号,定时器1用来控制在调表的时候产生闪烁。
程序的初始化如下:
TMOD=0x11;//定时器0,1的工作方式1
TH0=(65535-50000)/256;//定时器0赋初值
PCB板:
EA=1;//打开总中断 TR1=0;//关闭定时器1 TR0=1;//打开定时器0 二.电子时钟的硬件设计 TL1=(65535-50000)%256; TL0=(65535-50000)%256; ET0=1;//打开定时器0的中断 ET1=1;//打开定时器1的中断 TH1=(65535-50000)/256;//定时器1赋初值
本设计的硬件电路主要由上电自动复位电路,时钟电路,74HC573锁存器电路和数码管及按键电路组成。
1.上电自动复位电路在系统上电的时候对单片机复位。 2.晶振电路主要产生单片机的时钟电路。
3.锁存器电路控制数码管可以节省单片机的IO资源,且74HC573提供的电流足以驱动共阳极数码管,且具有控制简单等优点。 元器件清单
三.电子时钟的软件设计
#includelt;reg52.hgt;
#define uint unsigned int
#define uchar unsigned char
sbit con=P3;//控制键
sbit add=P3;//加
sbit sub=P3;//减
sbit gnd=P3;//接地
void keyscan();//键盘扫描函数的声明
uchar hour,minute,second,count,j;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管段码表
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;xgt;0;x--)
for(y=100;ygt;0;y--);
}
void display11()//显示函数
{
if(count!=1)//如果count==1,控制数码管的灭
{
P0=table[hour/10];
P2=0x7f;
dela
文档评论(0)