作息时间控制器 1.docx
- 文档编号:25248802
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:25
- 大小:298.45KB
作息时间控制器 1.docx
《作息时间控制器 1.docx》由会员分享,可在线阅读,更多相关《作息时间控制器 1.docx(25页珍藏版)》请在冰豆网上搜索。
作息时间控制器1
河南理工大学
单片机e课程s设z计报告
作息时间控制器
姓名:
张春娟
学号:
320319332320
专业班级:
09级电气工程及其自动化
指导老师:
张宏伟
所在学院:
河南理工大学成人教育学院
2009年9月16日
摘要
本设计是基于AT89S52单片机的基本功能实现作息时间控制功能,采用了4位七段数码管,扫描键盘,蜂鸣器和相应的电路对当前时间以及定时时间的控制,并在设定的时间进行提醒。
本设计使用单片机内的定时器实现计时功能,利用按键分别控制切换当前时间和定时时间、小时+1、分钟+1以及关闭蜂鸣器。
试验采用了一个七段LED数码管显示时间,采用一个蜂鸣器进行到时提醒,一个发光二极管闪烁计秒。
本设计由2个30p的电容和一个11.0592MHz的晶振构成时钟电路,由一个按键和10uF电容构成上电加按钮复位,单片机、时钟电路和复位电路共同构成单片机最小系统。
数码管采用共阴极接法由P0口输出字形,P2口中的高四位输出段选。
P1.0~1.3接入按键对时间按进行操作,由P1.4连接发光二极管闪烁读秒,9013驱动蜂鸣器并由P1.5进行控制。
通过对硬件电路的设计和PROTEUS的仿真,本设计基本实现了:
1.使用4位七段显示器来显示现在的时间,显示格式为“时分”,由LED闪动作为秒计数表示。
2.可以设定作息时间,并进行到时提示。
3.能够根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。
4.可以设置现在的时间及显示定时设置时间。
由于单片机的集成度高、功能强、通用性好、体积小巧、重量轻、能耗低、价格便宜、可靠性高、抗干扰能力强和使用方便,使单片机迅速得到了推广应用,所以学好单片机对我们以后的学习和工作有着至关重要的作用。
摘要1
1.概述3
1.1单片机的基本概念5
1.2设计任务及要求5
1.3设计思路5
2.系统总体方案及硬件设计6
2.1系统的总体设计方案6
2.2各模块功能介绍6
2.3各部分电路的硬件设计7
2.3.1时钟电路7
2.3.2复位电路8
2.3.3按键控制电路8
2.3.4读秒指示电路9
2.3.5提醒模块电路9
2.3.6显示模块电路10
3.软件设计11
3.1程序的总流程图11
3.2按键功能子程序流程图12
3.3参数计算12
4.PROTEUS仿真13
4.1仿真过程13
5.课程设计体会15
参考文献17
附录一程序18
附录二PROTEUS图24
1.概述
1.1单片机的基本概念
单片机是一种特殊的计算机,它是在一块半导体芯片上集成了CPU、存储器RAM、ROM以及输入输出接口电路,这种芯片习惯上被称为单片微型计算机,简称单片机。
单片机一词是早期SingleChipMicrocomputer(SCM)的直译,它忠实的反映了早期单片机的形态和本质。
随后,按照面向对象、突出控制功能的要求,在片内集成了许多外围电路及外设接口,如定时器/计数器、串行通信控制器等,部分单片机还集成有A/D、D/A装换器和PMW功能。
在硬件结构、指令系统和I/O等设计上有充分考虑了控制的需要,为控制提供了有效的手段,土坯了传统意义上的计算机结构,发展成Micro-controller的体系结构,因此,目前国外已普遍称之为微型控制器MCU(Micro-controllerUnit),并以此与微型处理器相区别。
1987年以后,它又被一些大的半导体器件公司命名为嵌入式控制器(EmbeddedController)。
因采用嵌入技术,即在一片芯片上除了集成CPU外,还嵌入了RAM/ROM或各种I/O功能。
微型计算机的硬件部分是由CPU、存储器、定时器/计数器、并行输入/输出接口电路、中断控制器等大规模IC芯片安装在一个电路板上,加上键盘、显示器等构成的。
典型的单片机的结构如图1所示。
图1(a)AT89S52的PROTUES示意图13D
图1(b)单片机的结构示意图
1.2设计任务及要求
(1)设计制作一个单片机数字钟及控制电路。
(2)使用4位七段显示器来显示现在的时间。
显示格式为“时分”,由LED闪动作为秒计数表示。
(3)可以设定作息时间,并进行到时提示。
(4)能够根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。
(5)可以设置现在的时间及显示定时设置时间。
1.3设计思路
本设计采用单片机的P0口作为字形输出口,由内部定时器/计数器T0作为计时器,以P2口作为段选,连接七段共阴数码管进行时间显示。
通过设置4个按钮分别实现对当前时间和定时时间的切换、对小时加一、对分钟加一以及关闭蜂鸣器的功能。
通过P1口连接蜂鸣器实现定时提醒的功能。
2.系统总体方案及硬件设计
2.1系统的总体设计方案
图2设计原理框图
本设计采用AT89S52单片机为核心,加上复位电路和时钟电路组成最小系统,在外部连接读秒指示、提醒模块、按键控制以及显示模块,共同实现作息时间控制的基本功能,如图2所示。
2.2各模块功能介绍
读秒指示由单片机输出端连接发光二极管组成,可以实现闪烁计秒功能,即两次闪烁之间间隔一秒。
提醒模块由单片机的输出端驱动蜂鸣器,实现到时提醒的功能。
其中由三极管驱动蜂鸣器,单片机的输出连接三极管的基极。
显示模块采用一个七段共阴数码管,由单片机的P0口输出字形,P2口输出段选信号,用以显示当前时间与定时时间。
按键控制部分使用了4各按键连接单片机的输出口,用以对当前时间和定时时间的切换、小时加一、分钟加一和关闭蜂鸣器。
2.3各部分电路的硬件设计
以下介绍各个部分的电路设计。
2.3.1时钟电路
单片机内部有一个用于构成振荡器的高增益反响放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上接外接时钟源即可构成时钟电路,如图3所示。
图3时钟电路
参数选取:
C1,C2对频率有微调作用,当外接晶振时,C1和C2通常选取10~30pF,当外接陶瓷振荡器时,C1和C2的典型值约为20~50pF。
振荡频率范围一般是1.2~12MHz
2.3.2复位电路
图4复位电路
复位电路采用上电+按钮电平复位,其中电阻的选取R1约为0.2k左右R2约为1k左右。
保证加载RST引脚上的高电平持续两个机器周期,才能使单片机有效地复位如图4所示。
2.3.3按键控制电路
图5按键控制电路
本设计中采用了4个按键进行控制,P1.0-P1.3置为低电平,当按键按下后,相应的端口变为高电平,单片机执行相应的动作。
按键一为时钟与当前时间的切换键,按键二位分钟加一,按键三为小时加一,按键四为蜂鸣器的关闭按钮。
如图5所示。
2.3.4读秒指示电路
图6读秒指示电路
由P1.4口连接发光二极管接地构成读秒指示电路,由程序实现P1.4端口每秒取反,即一秒输出高电平下一秒输出低电平依次循环,二极管亮一秒,暗一秒从而实现读秒功能。
2.3.5提醒模块电路
图7提醒模块电路
提醒模块如图7所示,其中三极管基极连接P1.5,当定时时间与当前时间相同时,P1.5由低电平变为高电平,蜂鸣器工作,实现到时提醒功能。
2.3.6显示模块电路
图8显示模块电路
显示模块由排阻和七段共阴数码管组成,采用动态显示,当要显示信息时,由P0口输出字形段码的低电平,P2口仅一位输出低电平,其余输出高电平,将要显示的字符在LED上显示出来。
在这种显示电路中,一个字位一个字位地轮流点亮各LED,每一个字位停留1ms左右,由于人的视觉暂留,不会察觉有闪烁现象。
这种显示电路简化了硬件线路,降低了成本。
3.软件设计
3.1程序的总流程图
图9程序总流程图
3.2按键功能子程序流程图
该程序除了包括按键功能子程序外,还包括蜂鸣器子程序、显示程序以及延时程序等。
按键功能的流程图如图10所示。
图10按键功能程序流程图
3.3参数计算
计时部分采用了计时器T0,方式一,50ms中断一次,中断20次即为1s,计数器初值的计算应为
4.PROTEUS仿真
4.1仿真过程
做好电路与程序后,通过编译软件编译后倒入单片机中即可进行仿真(由于软件问题并未在图中做出复位)。
第一步,图中发光二极管闪烁发光,未到定时时间,三极管基极为低电平,蜂鸣器不工作。
如图11所示。
第二步,测试各个按键功能,小时加一、分钟加一以及切换当前时间和定时时间均无问题。
第三步,图中已到定时时间,发光二极管闪烁,三极管基极为高电平,蜂鸣器工作。
如图12所示。
第四步,由于蜂鸣器开启之后未增加关闭功能,防止使用者未听到蜂鸣器提醒或无视其存在,故增加一按键关闭蜂鸣器,关闭之后三极管基极为低电平,蜂鸣器停止工作。
如图13所示。
图11仿真过程1
图12仿真过程2
图13仿真过程3
5.课程设计体会
两个星期的课程设计结束了,从中我们学到了很多东西且感悟良多,体会到了课本联系实际,学以至用,设计思想,实际动手能力都有所提高.作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
初学单片机时觉得它深奥难懂,枯燥无味,通过课程设计我们体会到了编程的灵活性并对它产生了浓厚的兴趣.以前所学过的知识,都得到了充分的利用。
课程设计从设计电路到调试结束,我们失败很多次也修改很多次,可谓是屡败屡战,可我们并未气馁,我们坚持到了最后,虽然最后做出的电路板虽然不太让人满意,但总算完成了,总算看到我们的成果了,总算可以高兴一番了.
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
在焊接每个元件的时候一定要注意各个输入、输出引脚,因为每个引脚都是不一样的,只要让各个引脚互相对应,才能得出正确的结果,否则,出现任何一点小的误差就会对整个系统造成毁灭性的打击。
这次课程设计使我懂得了同学间的团结合作,懂得了理论联系实际,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是正确的理论,从而提高自己实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,并决心在以后的学习中加以改正,努力练习,提高自己的动手能力。
在老师的辛勤的指导下,最后我们顺利地完成了这次的课程设计.看见到课本所学知识得以应用,心中满是欢喜,满是激动.这次课程设计让我的实际动手能力得到了大大的锻炼,让我解决实际问题的能力得到了大大的提高,并对本专业的课程充满了浓厚的兴趣,及对以后的学习充满了信心,决定在以后的学习生活中加强练习,端正心态,迎接新的挑战.
参考文献
[1]余发山著.单片机原理及应用技术江苏:
中国矿业大学出版社.2003.97-118
[2]康华光.数字电子技术. 北京:
高等教育出版社,2003
[3]陈伟人编著。
MSC-51系列单片机实用子程序集锦. 北京:
清华大学出版社,1993
附录一程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*七段共阴管显示定义*/
ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定义并初始化变量*/
ucharseconde=0;
ucharminite=0;
ucharhour=0;
ucharmstcnt=0;
ucharflag;
ucharhour1=0;
ucharminite1=1;
ucharflag1;
ucharflag2;
ucharcount;
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_5=P1^5;
/*函数声明*/
voiddelay(uchark);//延时子程序
voidtime_pro();//时间处理子程序
voiddisplay();//显示子程序
voidkeyscan();//键盘扫描子程序
voidspeaker();//蜂鸣器
/*****************************/
/*延时子程序*/
/****************************/
voiddelay(uchark)
{
ucharj;
while((k--)!
=0)
{
for(j=0;j<125;j++)
{;}
}
}
/**************************/
/*时间处理子程序*/
/**************************/
voidtime_pro(void)
{
if(seconde==60)//秒钟设为60进制
{seconde=0;
minite++;
if(minite==60)//分钟设为60进制
{minite=0;
hour++;
if(hour==24)//时钟设为24进制
{hour=0;}
}
}
}
/*****************************/
/*显示子程序*/
/*****************************/
voiddisplay(void)
{
if(flag1==0)
{
P2=0xfe;
P0=dispcode[hour/10];//显示小时的十位
delay(4);
P2=0xfd;
P0=(dispcode[(hour%10)])|0X80;//显示小时的个位
delay(4);
P2=0xfb;
P0=dispcode[minite/10];//显示分的十位
delay(4);
P2=0xf7;
P0=(dispcode[minite%10])|0X80;//显示分的个位
delay(4);
}
if(flag1==1)
{
P2=0xfe;
P0=dispcode[hour1/10];//显示小时的十位
delay(4);
P2=0xfd;
P0=(dispcode[(hour1%10)])|0X80;//显示小时的个位
delay(4);
P2=0xfb;
P0=dispcode[minite1/10];//显示分的十位
delay(4);
P2=0xf7;
P0=(dispcode[minite1%10])|0X80;//显示分的个位
delay(4);
}
}
/*******************************/
/*键盘扫描子程序*/
/*******************************/
voidkeyscan(void)
{
if(P1_0==1)//切换定时与时钟
{
delay(80);
if(P1_0==1)
{
dodelay(3);
while(P1_0!
=0);
flag1=!
flag1;
}
}
if(P1_1==1)//对分调整
{
delay(80);
if(P1_1==1)
{
dodelay(4);
while(P1_1!
=0);
if(flag1==0)
{
minite++;
if(minite==60)
{minite=0;}
}
if(flag1==1)
{
minite1++;
if(minite1==60)
{minite1=0;}
}
}
}
if(P1_2==1)//对小时调整
{
delay(80);
if(P1_2==1)
{
dodelay(4);
while(P1_2!
=0);
if(flag1==0)
{
hour++;
if(hour==24)
hour=0;
}
if(flag1==1)
{
hour1++;
if(hour1==24)
hour1=0;
}
}
}
if(P1_3==1)//蜂鸣器动作的条件
flag2=!
flag2;
}
voidtimer0(void)interrupt1using0//定时器0方式1,50ms中断一次
{
TH0=0x3c;
TL0=0xb0;
mstcnt++;
if(mstcnt==20)
{
seconde++;
P1_4=!
P1_4;//led闪烁
mstcnt=0;//计数器清零
}
}
/**************************/
/*蜂鸣器*/
/**************************/
voidspeaker(void)
{
if(minite1==minite&hour1==hour)
if(flag2==0)
P1_5=1;
elseP1_5=0;
}
/**************************/
/*主函数*/
/**************************/
voidmain(void)
{P1=0x00;//初始化p1口,全设为0
TMOD=1;//time0为定时器,方式1
TH0=0x3c;//预置计数初值
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
keyscan();//按键扫描
time_pro();//时间处理
display();//显示时间
speaker();//蜂鸣器
}
}
附录二PROTEUS图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作息时间控制器 作息 时间 控制器