单片机作息时间控制器设计.docx
- 文档编号:3443789
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:26
- 大小:198.54KB
单片机作息时间控制器设计.docx
《单片机作息时间控制器设计.docx》由会员分享,可在线阅读,更多相关《单片机作息时间控制器设计.docx(26页珍藏版)》请在冰豆网上搜索。
单片机作息时间控制器设计
摘要
本文介绍了一款基于AT89C52单片机作息时间控制器的设计,该作息时间控制器由单片机最小系统、按键模块、数码管显示模块、闹钟模块组成。
采用单片机AT89C52与12MHZ晶振相连;通过按键K1、K2、K3、K4控制时间的校正、闹钟时间设定;数码管显示模块用来显示时间,显示格式为“时分”,并能够根据需要显示年、月、日,由数码管小数点闪动作为秒计数;闹钟模块进行到时提醒并作出相应动作:
发光二极管闪亮,同时播放音乐。
本文详细叙述了系统硬件、软件的具体实现过程。
论文重点阐述了时间控制器硬件中主控制模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作。
本设计实现了时间与闹钟的修改功能,语音播报功能,年、月和日等的显示功能。
1.绪论
1.1设计意义
随着科学技术的发展,各行各业技术的不断改进和更新,在时间方面,由于时间多、时间乱等原因,人们不得不去改善时间方面的设备;随着人们生活水平的提高和生活节奏的加快,对时间的要求也越来越高,精准数字计时的消费需求也是越来越多。
单片机时间控制器实现了对时间控制的智能化,摆脱了传统的由人来控制时间的不便,是现代必不可少的设备。
1.2设计思路
在整个设计中,主要用的是单片机的自动控制原理,包括硬件和软件。
在硬件部分,包括按键控制模块、数码管显示模块和闹钟模块;软件部分,主要是主程序设计。
1.3设计要求及功能
本设计是作息时间控制器,设计其实现的功能主要有:
使用4位七段显示器来显示当前的时间,由LED闪动作为秒计数表示,显示格式为“时分”,并可显示日期,显示格式为“月日”,年份单独显示。
由4个按键来作功能设置,可以设置现在的日期、时间及定时设置时间,一旦设置的时间到则作出相应动作:
发光二极管闪亮,同时播放音乐。
2系统总体方案设计
2.1系统总体方案框图
图2-1系统方框图
2.2芯片比较
2.2.1单片机选择
当今单片机厂商琳琅满目,产品性能各异。
常用的单片机有很多种:
Intel8051系列、Atmel的AT89系列、Microchip公司的PIC系列、Zilog的Z8系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。
我们最终选用了ATMEL公司的AT89C52单片机。
AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8Kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和FLASH存储单元,功能强大AT89C52单片机适用于许多较为复杂控制应用场合。
AT89C52的芯片管脚图如图3-1
图3-1
引脚功能说明:
VCC——电源电压
GND——地
P0口——P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口——P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输出口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见下表。
FLASH编程和程序校验期间,P1接收低8位地址。
P1.0和P1.1的第二功能
引脚号
功能特性
P1.0
T2(定时/计数器2外部计数脉冲输入),时钟输出
P1.1
T2EX(定时/计数2捕获/重装载触发和方向控制)
P2口——P2是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
FLASH编程或校验时,P2亦接收高位地址和一些控制信号。
P3口——P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INTO(外中断0)
P3.3
INT1(外中断1)
P3.4
TO(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST——复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
2.2.2显示器接口芯片的选择
LED显示器接口芯片的选择常用的显示器接口芯片有CD4511,CD4513,MC14499,8279,MAX7219,74HC164等,它们的功能有:
1.CPU接受来自键盘的输入数据,并作预处理;
2.数据显示的管理和数据显示器的控制。
CD4511是BCD锁存,7段译码,驱动器,但在显示6和9时,显示为b和q,不是很好看。
CD4513是BCD锁存,7段译码,驱动器(消隐),但现在市面上不好买。
MC14499为串行输入BCD码——十进制译码驱动器,用它来构成单片机应用系统的显示器接口,可以大大减少I/O口线的占用数量。
但是,由片内震荡器经过四分频的信号,经位译码后只能提供4个位控信号,使信号的采集受到限制;并且,MC19944的价格偏高,也不经济。
同样,8279为INTEL公司生产的通用键盘/显示器接口芯片,其内部设有16*8显示数据RAM,若采用8279管理键盘和显示器,可以减少软件程序,从而减轻主机的负担,但我们同时也发现,由于其功能比较强大,不可避免将会使外围设备与操作过程复杂化,同时价格比较贵。
对比一下MAX7219和74HC164其占用资源少,且不需复杂的驱动电路。
但MAX7219虽然比较好用,且一片能驱动四个数码管,但对于我们设计的系统来说,不需要很多数码管,此外MAX7219相对74HC164的价格也比较贵,所以我们最终选用74HC164。
本作息时间控制器利用AT89C52单片机串行口和廉价的74HC164集成块实现多个LED显示的一种简单方法,利用该方法设计的多路LED显示系统具有硬件结构简单、软件编程容易和价格低廉的特点。
下面简单的介绍一下74HC164。
特点:
(1)与门串行输入;
(2)完全的缓冲时钟脉冲和串行输入;
(3)直接清除
引脚图如图3-11:
图3-11
说明:
这些8位移位寄存器的特点是具有与门串行输入和不同步的清除输入(CLR)。
门电路串行输入(A和B)允许对输入数据的完全控制;低电平加在输入端可以抑制新数据的进入;高电平输入能使输入有效。
串行输入的数据当CLK是高电平或低电平时可以改变。
89C52单片机串行口方式0为移位寄存器方式,外接3片74LS164作为3位LED显示器的静态显示接口,把89C51的RXD作为数据输出线,TXD作为移位时钟脉冲。
74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。
其中A、B(第1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信号时可并接。
T(第8脚)为时钟输入端,可连接到串行口的TXD端。
每一个时钟信号的上升沿加到T端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。
R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。
Q1…Q8(第3-6和10-13引脚)并行输出端分别接LED显示器的hg···a各段对应的引脚上。
在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲,第一个脉冲就会从最高位移出,搞清了这一点,下面让我们来看电路,6片7LS164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三片74LS164中。
3.硬件设计
3.1单片机
AT89C52提供以下标准功能:
8K字节FLASH闪存,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
3.2按键控制模块
图2-2按键控制模块
按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按键控制模块主要有由四个按键组成:
K1、K2、K3、K4、。
其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。
时间校正:
当我们需要正确的显示时间即可进行时间校正,按一下K1即进入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即可进行分钟校正,校正原理同小时校正相同
闹钟设定:
当我们需要闹钟提醒时即可使用此功能,连续按三下K1键即可进入闹钟小时设定状态,通过K2键加一或K4键减一,进行小时设定,再按一次K1键即可进行分钟设定,其设定原理与小时设定原理相同,按一下K3键,则时间设定完毕,到时会自动响铃。
日期校正:
当我们需要与当前日期保持一致时,则可以使用日期校正功能,连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。
年份校正:
当我们需要保持年份与当前年份一一致时,则可以进行年份校正。
连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行校正。
闹钟响铃:
当我们设定的时间与当前时间一致时,则闹钟就会自动响铃提示,与此同时发光二极管闪亮,一分钟后响铃停止,发光二极管熄灭,若在此期间按下闹钟使能键K3同样能使响铃停止,发光二极管熄灭。
3.3数码管显示模块
图2-3显示模块
时间显示模块主要由四位七段数码管来显示,配合按键控制模块的校正与设定时间,相应的显示。
时间正常显示时,LED每闪动60次,分钟自动加一;每六十分钟小时自动加一;每24小时天自动加一。
3.4闹钟模块
图2-4闹钟音乐模块
闹钟模块快的主要功能即闹铃。
当设定时间与当前时间一致时,则闹钟自动闹铃进行提示,同时二极管闪亮一分钟后,自动退出响铃状态,若按K3键,闹钟退出响铃状态。
3.5系统原理图
系统原理图
4.软件设计
单片机作息时间控制的动作利用时间计时处理来做秒计数,当所设置的时间到了,则发出一阵声响。
单片机定时器负责定时的计数,不会因为按键处理而中断时间秒数的增加,时,分,秒数据是存在变量内并写入七段显示器的缓冲区内,而由显示器扫描程序中定时扫描而显示出时间。
4.1主程序设计
在主控程序循环中主要工作为扫描是否有按键,若有按键则应做相应的功能处理,同时也扫描显示器显示时间数据,并检查所设置的时间是否到了,时间计时处理程序是等过了1S后,则更新时间数据,将最新的时,分,秒的数据转换为数字数据并显示在七段显示器上。
程序中是这样判断是否过了1S的:
设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1S,要做相关程序时间处理了。
图3-2主程序流程图
4.2中断子程序
中断子程序的主要功能:
提供时间基准。
当连续中断20次时,即为一秒,此时秒加一;当秒值为60时,分钟加一,同时秒清零;当分钟值为60时,小时加一,同时分钟值清零;当小时为24时,天值加一,同时小时清零;由于每月天数不定,1、3、5、7、8、10、12月为31天,当计数到此类月份时,天值为32时,月值加一,同时天值为1;4、6、9、11月为30天,当计数到此类月份时,天值为31时,月值加一,同时天值为1;如果是闰年,则2月为29天,当计数到此类月份时,天值为30时,月值加一,同时天值为一;如果不是闰年,则2月为28天,当计数此类月份时,天值为29时,月值加一,同时天值为一;当月值为13时,则年值加一,同时月值为一。
图3-3定时器中断函数
4.3按键扫描子程序
按键扫描子程序是程序计中相当重要的一部分。
按键扫描子程序的功能是:
扫描是否有按键按下,若有键按下,则执行相应功能。
图3-4按键扫描子程序
5.软件硬件联调
5.1软件调试
采用模块化程序设计思想,首先调试子程序,然后逐级叠加调试。
5.2系统调试
软硬件结合在一起,看是否能工作正常,是否符合设计基本要求,即可以实现24小时计时方式;可使用按键开关时间、日期调整以及设置闹铃。
参考文献
1刘勇编数字电路电子工业出版社2004
2陈正振编电子电路设计与制作广西交通职业技术学院信息工程系2007
3杨子文编单片机原理及应用西安电子科技大学出版社2006
4王法能编单片机原理及应用科学出版社2004
5张友德、赵志英等编单片微型机原理、应用与实验上海:
复旦大学出版2003第四版
6钱晓揭.16/32位微机原理、汇编语言及接口技术[M].机械工程出版社2005年
7吴金.8051单片机实践与应用[M].清华大学出版社,2002年
8谢自美.电子线路设计试验测试(第二版)[M].华中科技出版社2002年
9张疑坤,陈善久,裘雪红.单片微型计算机原理及应用[M].西安电子科技大出版社2003年
10马忠梅编著《单片机的C语言应用程序设计》北京航空航天大学出版社,1999年
11王幸之编著《单片机应用系统抗干扰技术》北京航空航天大学出版社,2000年
12]赵茂泰.智能仪器原理及应用.电子工业出版社,2004:
100-1562010年4月10日
附1:
源程序代码
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*************************************************************************************
sbitK1=P1^4;
sbitK2=P1^5;
sbitK3=P1^6;
sbitK4=P1^7;
sbitsd=P3^6;
sbitBEEP=P3^7;
ucharm=5,h=20,sec=58,cnt=0,x,y,qian,bai,shi,ge;
ucharset_h=12;
ucharset_m=58;
ucharmonth=7;
ucharday=5;
ucharth0_f;
uchartl0_f;
uintyear=2010;
voiddelay(uchart);//延时函数
voidscankey(void);//按键扫描函数
voidinit(void);//初始化函数
voiddisplay(void);//显示函数
voidset_time(void);//设定时间显示辅助函数
voidset_day(void);//设定日期显示辅助函数
voidm_choose(void);//月份选择函数
voidbianhuan(void);//年份显示辅助函数
voidbianhuan1(void);//时间显示辅助函数
changedata(uchar*song,uchar*diao,uchar*jie);//音乐符号串解释函数
voidplay(uchar*songdata);//奏乐函数
//世上只有妈妈好
ucharcodemamahao[]={
"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|"
"2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"
};
ucharcodefreq[36*2]={
0xA9,0xEF,//00220HZ,1//0
0x93,0xF0,//00233HZ,1#
0x73,0xF1,//00247HZ,2
0x49,0xF2,//00262HZ,2#
0x07,0xF3,//00277HZ,3
0xC8,0xF3,//00294HZ,4
0x73,0xF4,//00311HZ,4#
0x1E,0xF5,//00330HZ,5
0xB6,0xF5,//00349HZ,5#
0x4C,0xF6,//00370HZ,6
0xD7,0xF6,//00392HZ,6#
0x5A,0xF7,//00415HZ,7
0xD8,0xF7,//00440HZ1//12
0x4D,0xF8,//00466HZ1#//13
0xBD,0xF8,//00494HZ2//14
0x24,0xF9,//00523HZ2#//15
0x87,0xF9,//00554HZ3//16
0xE4,0xF9,//00587HZ4//17
0x3D,0xFA,//00622HZ4#//18
0x90,0xFA,//00659HZ5//19
0xDE,0xFA,//00698HZ5#//20
0x29,0xFB,//00740HZ6//21
0x6F,0xFB,//00784HZ6#//22
0xB1,0xFB,//00831HZ7//23
0xEF,0xFB,//00880HZ`1
0x2A,0xFC,//00932HZ`1#
0x62,0xFC,//00988HZ`2
0x95,0xFC,//01046HZ`2#
0xC7,0xFC,//01109HZ`3
0xF6,0xFC,//01175HZ`4
0x22,0xFD,//01244HZ`4#
0x4B,0xFD,//01318HZ`5
0x73,0xFD,//01397HZ`5#
0x98,0xFD,//01480HZ`6
0xBB,0xFD,//01568HZ`6#
0xDC,0xFD,//01661HZ`7//35
};
//******************************
//音乐符号串解释函数
changedata(uchar*song,uchar*diao,uchar*jie)
{
uchari,i1,j;
chargaodi;
ucharbanyin;
ucharyinchang;//Òô³¤
ucharcodejie7[8]={0,12,14,16,17,19,21,23};
*diao=*song;
for(i=0,i1=0;;)
{
gaodi=0;
banyin=0;
yinchang=4;
if((*(song+i)=='|')||(*(song+i)==''))i++;
switch(*(song+i))
{
case',':
gaodi=-12;i++;
break;
case'`':
gaodi=12;i++;
break;
}
if(*(song+i)==0)
{
*(diao+i1)=0;
*(jie+i1)=0;
return;
}
j=*(song+i)-0x30;i++;
j=jie7[j]+gaodi;
yinc:
switch(*(song+i))
{
case'#':
i++;j++;
gotoyinc;
case'-':
yinchang+=4;
i++;
gotoyinc;
case'_':
yinchang/=2;
i++;
gotoyinc;
case'.':
yinchang=yinchang+yinchang/2;
i++;
gotoyinc;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 作息 时间 控制器 设计