基于单片机设计简易数字钟说明书本科学位论文Word文档格式.docx
《基于单片机设计简易数字钟说明书本科学位论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机设计简易数字钟说明书本科学位论文Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
二硬件设计3
2.1单片机3
2.2复位电路4
2.3晶振电路4
2.4键盘调整单元5
2.5数码管与三极管显示6
三软件设计7
3.1系统主程序7
3.2中断程序7
3.3显示函数7
3.4键盘扫描程序8
3.5时钟实现的基本方法8
四心得体会8
n附录源程序9
课程设计的目的
(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制能力;
(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(3)对课题设计方案的分析、选择、比较、熟悉单片机应用系统开发、研制过程,软硬件设计的方法、内容及步骤。
课程设计正文
一系统工作原理
1.1功能说明
全面了解掌握MCS-51的基本知识,由于该系列单片机具有体积小、功耗低、价格便宜、易于产品化等特点,可以更加方便的实现以下特点:
1、准确及时,以数字形式显示一位分、两位秒的时间;
2、分最大计到10,秒的计时要求为60进位;
3、三位数码管,显示分和秒,按键“功能键”依次选择调整“时”、“分”,
按键的“加键”依次加1,按键“减键”依次减1;
4、晶振电路起到减小误差,提高精确度的作用;
5、整分报时。
1.2基本原理
该系统主要由复位电路、晶振电路、按键电路,数码管显示电路和STC80C51单片机组成。
该数字时钟设计采用单片机内部的定时器来定时,,然后通过软件编程来实现时钟的显示,这种设计方案的优点是外围器件少,电路简单清晰,电路焊接容易,出问题的故障几率小。
系统结构图如图1所示。
图1
二硬件设计
2.1单片机
STC90C52系列单片机采用了CMOS技术制造,较之AT89c51系列单片机,集成度高、速度快、功耗低。
主要由9个部件组成,分别是:
1个8位中央处理器;
4KBFlash存储器;
128B的数据存储器;
32条I/O口线;
2个定时器/计数器;
1个具有5个中断源、2个优先级的中断嵌套结构;
全双工UART的串行口;
特殊功能寄存器;
1个片内振荡器和时钟电路。
如图2所示。
s
图2STC80C51单片机
2.2复位电路
STC90C52的复位端高电平有效。
RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。
在复位电路中,下拉电阻具有拉低电平作用,按一下复位开关就使在RST端出现一段时间的高电平。
复位电路如图3所示。
图3复位电路
2.3晶振电路
外接12MHZ晶振和两个30pF电容组成系统的内部时钟电路。
将外部已有信号引入单片机内,这种方式适宜用来使单片机的时钟与外部信号保持同步。
晶振电路如图4所示。
图4晶振电路
2.4键盘调整单元
当要对时钟进行调时时,就要用到键盘进行时间修改。
由于调节信息不多,故采用3个独立键盘即可,分别实现功能、增大、减小等作用。
将所有扫描线置成低电平,检查输入线是否为低电平,若无低电平则不是按键操作,延时一段时间,再次将所有扫描线置成低电平,检查输入线是否为低电平,如果有低电平则是按键操作,若无低电平则不是按键操作,返回,即完成按键扫描。
键盘原理图如图5所示
图5键盘原理图
S1:
接P2.0口,开始功能。
S2:
接P2.1口,具有切换功能,可以切换到时、分,从而实现对时、分的调整,再次按下功能键S2则返回,继续计时。
S3:
接P2.2口,实现时和分的增大
S4:
接P2.3口,实现时和分的减小
2.5数码管与三极管显示
显示单元由3个8段共阴数码管组成,数码管位选端分别接P1.0、P1.1、P1.2用于显示一位分和两位秒;
按照工作方式,数码管显示可以分为静态显示和动态扫描。
所谓静态显示,就是每一个数码管的段码都要独占具有锁存功能的输出口,CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符,直到下一次送出另外一个字码之前,显示的内容一直不会消失;
动态扫描是把所有显示器的8个段码中的A-dp的各个相同段连接在一起,接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。
即让各位数码管按照一定顺序轮流显示,只要扫描频率足够高,由于人眼的“视觉暂留”现象,就能连续稳定的显示动态扫描其特点在于能显著降低显示部分成本,大大减少显示接口的连线结构。
该系统采用动态扫描显示。
三极管放大电路中发射极正向偏置,集电极反向偏置是使三极管工作的必要条件,当PNP管的VC<
VB<
VE时,使得集电结反偏,发射结正偏时,管子的发射极电流流入管子,基极电流和集电极电流流出管子,且集电极电流跟基极电流之间成β关系,三极电流满足IE=IB+IC=IB(1+β·
IB)。
即,基极电流可以控制集电极电流,这种控制作用就称为管子的放大作用,图中1K电阻为了限流。
如图6所示。
图6数码管显示
三软件设计
3.1系统主程序
中需要对各个模块进行初始化,并且判断定时器是否溢出20次,用以确定是否到达1S,初始化主要包括:
设置定时器0和定时器1的工作方式为方式1,定时器赋初值,开总中断,开定时器0和定时器1中断,启动定时器。
3.2中断程序
定时器0中断:
单片机晶振12MHZ,主要是使用定时器0方式1,定时5ms
,用来控制数码管的位选信号。
且分为三种情况,P0口分别输送分钟和秒。
定时器1中断:
单片机晶振12MHZ,主要是使用定时器0方式1,每50ms溢出一次,计数加一次,计数20次,到时1S;
秒加一。
秒钟加到60,分加一,同时秒钟置0,蜂鸣器响。
分加到10,分和秒都置0,
3.3显示函数
本设计采用共阴数码管显示,显示两位秒,为秒钟的个位与十位,second2=second/10;
second1=second%10;
P1控制数码管的位选,如下:
P1=(P1&
0xf0)|0x0e;
P0=minute;
0xf0)|0x0d;
P0=second2;
0xf0)|0x0b;
P0=second1;
3.4键盘扫描程序
键盘采用查询的方式,一旦有s1按键按下,数字钟开始工作,定时器1开始计时。
按一次s2键,是对分钟进行调节,按二次s2键是对秒钟进行调节;
s3,s4键分别是加减键,只有在s2键被按下的前提下,s3,s4键才有效;
3.5时钟实现的基本方法
时钟的最小计时单位是秒,使用定时器0方式1,把定时器的定时时间定为50ms。
这样,计数溢出20次即可得到时钟的最小计时单位:
秒单元满60,则分单元的内容加1;
分单元满10,则将分、秒的内容全部清零。
四心得体会
在基于单片机的数字时钟电路设计过程中,我学到了很多重要的东西,其中最重要的是如何将实践和理论相联系,怎样将我所学到的知识运用到我以后的工作中去。
大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的时钟设计给我奠定了一个实践基础。
本系统的设计应用到了模拟电子技术、数字电子技术、单片机控制技术、电路焊接工艺等多方面的知识,所设计的时钟电路,达到了题目要求。
这次课程设计使我得到了很大收获:
不仅学到了许多了关于单片机方面的知识,还提高了实验技能;
而且也使我的动手能力和电路设计能力得到了极大的提高。
在此次设计中,我的难点是程序的调试,由于以前学业不精,所以编一个完整的程序很是吃力!
但是经过这一段时间的学习,我还是解决了一些问题。
软件调试中也出现了一些问题,就是程序在编译中仿真器的设置出现了错误,从而使系统的编译通不过,给系统的调试带来了极大的不便,所以对软件的使用还须更进一步的熟练掌握。
最后,我要感谢老师在此次课程设计中的悉心指导与帮助,让我的课程设计得以顺利完成。
⏹附录源程序
#include<
reg52.h>
#defineucharunsignedchar
uchards_code=0,second2=0,second1=0,sum=0,F_flag,S_flag;
charminute=0;
charsecond=0;
uchartime_temp=0;
sbitDS0=P1^0;
sbitDS1=P1^1;
sbitDS2=P1^2;
sbitkey1=P2^0;
//开始键
sbitkey2=P2^1;
//功能键
sbitkey3=P2^2;
//加键
sbitkey4=P2^3;
//减键
sbitSPEAKER=P1^4;
//***********延时函数******************
voiddelay(ucharx)
{
unsignedinta,b;
for(a=x;
a>
0;
a--)
for(b=110;
b>
b--);
}
//***********秒显示函数**************
voidsecond_div(void)
second2=second/10;
second1=second%10;
//***************按键扫描函数***************
voidKey(void)
P2=0xff;
if(P2!
=0xff)
{
delay(50);
if(P2!
{
if(key1==0)
{
TR1=1;
}
if(key2==0)
//消抖
while(!
key2);
//松手检测
TR0=1;
TR1=0;
//关闭定时器
sum++;
}
}
if(sum==1)
{
F_flag=1;
S_flag=0;
if(key3==0)
delay(50);
if(key3==0)
while(!
key3);
minute++;
if(minute==10)
{
minute=0;
}
}
if(key4==0)
if(key4==0)
key4);
minute--;
if(minute==-1)
minute=9;
if(sum==2)
F_flag=0;
S_flag=1;
second++;
if(second==60)
second=0;
delay(50);
minute++;
second--;
if(second==-1)
second=59;
minute--;
}
second_div();
if(sum==3)
//打开标志位
S_flag=1;
sum=0;
//Sum清零
TR0=1;
//打开定时器
TR1=1;
//*********************主函数**************
voidmain(void)
SPEAKER=1;
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
TF0=0;
TR0=1;
ET1=1;
TF1=0;
while
(1)
Key();
//**********定时器0***********
voidTimer_0(void)interrupt1
ET0=0;
switch(ds_code)
case0:
P1=(P1&
P0=minute;
break;
case1:
P0=second2;
case2:
P0=second1;
default:
ds_code++;
if(ds_code>
2)
ds_code=0;
//***************定时器1**************
voidTimer_1(void)interrupt3
ET1=0;
time_temp++;
if(time_temp>
=20)
time_temp=0;
second++;
if(second==60)
minute++;
second=0;
if(minute==10)
minute=0;
second=0;
SPEAKER=0;
second_div();
⏹系统原理图以及仿真图
[1].《电力电子技术基础》(第五版)康光华主编高等教育出版社。
[2].《单片机原理及应用》(C语言编程)魏鸿磊主编同济大学出版社。
[3].《PROTEUS入门实用教程》(第二版)周润景蔡雨恬编著机械工业出版社。
课程设计
评语
成绩
指导教师
(签字)
年月日