嵌入式系统课程设计作息时间控制器文档格式.docx
《嵌入式系统课程设计作息时间控制器文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计作息时间控制器文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
通过本课程设计使学生加深理解、巩固课堂教学和平时实验内容,使学生初步具备基于C和ARM汇编应用开发的系统分析、系统设计、系统实现与测试的实际能力,强化学生的知识实践意识、提高动手能力,发挥学生的想象力和创新能力,从而培养工程应用型人才。
3设计任务
(1)以我校作息时间为蓝本,控制步进机模拟上下课打铃;
(2)作息时间可以程序调整,每到时间点蜂鸣器发声。
4设计内容
本系统采用STC90C516RD+单片机为核心,制作一个作息时间控制器,设计内容为通过软件编程的方法实现数码管显示时间,蜂鸣器到达提前定好的时间进行响动报时同时用8位7段LED数码管、键盘控制时间和蜂鸣器完成该系统,LED数码管可以显示小时、分钟和秒,键盘设有8个按键可以改变小时、分钟和秒,有走时准确、显示直观、运行稳定等优点。
4.1总体方案设计
本系统完成后,接通电源时,时间会自动在数码管校准并显示,可通过8个按键对相应的数码管显示的时间进行更改,8个按键分别为两行四列矩阵键盘,键盘第一列可改变小时、第二列改变分钟、第三列改变秒钟,蜂鸣器可进行报时,具体为当蜂鸣器到达系统指定时间时,蜂鸣器响动报警,当按下指定按键时蜂鸣器也可响动报警。
4.1.1需求规定
数码管可显示可调整的24小时时钟。
当时钟正常运行时,可调整时钟。
在时钟运行时,以8位数码管的高2位显示小时,4、5位显示分钟,低两位显示秒钟,3、6显示横线用以隔断数字。
可设定作息时间。
由于此作息时间控制系统主要应用与学校,考虑到冬、夏季作息时间的变更,可通过按键来调整作息时间。
在设定作息时间时并不影响时钟的正常运行,八位数码显示已设定好的作息时间,再通过小时、分钟和秒钟调整按键设定作息时间。
具有到时提示功能。
当设定的作息时间与实时时钟的时间相同时,蜂鸣器会发出几秒的提示音。
LED数码管:
通过对LED的使用来实现显示时间的显示。
按键:
通过对按键的使用来完成对实时时间的调整和对作息时间的调整。
蜂鸣器:
通过数码管显示的时间来控制蜂鸣器的响动。
具体硬件关系图如下图4-1所示。
图4-1硬件结构图
4.1.2核心部件选型
本系统采用STC90C516RD+单片机,该单片机是宏晶科技生产的单时钟/机器周期1T的单片机,是高速/低功耗/超强抗干扰的新一代8051系列单片机,指令代码完全兼容传统8051,但速度快8-12倍。
12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。
要求设定的时间到,蜂鸣器会响。
随时对当前时间进行调整。
要实现这一功能,可以接入键盘输入电路。
本系统采用LCD12864数码管,led数码管(LEDSegmentDisplays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
4.1.3系统开发环境
单片机按键输入电路、单片机时钟电路、复位电路、LED显示器段码驱动电路、LED显示器位码驱动电路、8位LED显示电路、蜂鸣器电路。
作息时间控制器其硬件电路方框图如图4-2所示。
图4-2作息时间控制器其硬件电路方框图
4.2硬件设计
基于单片机的作息时间控制器,硬件电路有8个部分组成,即单片机按键输入电路、单片机时钟电路、复位电路、LED显示器段码驱动电路、LED显示器位码驱动电路、8位LED显示电路、蜂鸣器电路。
4.2.1硬件开发环境简介
STC90C516AD单片机是指令代码完全兼容传统的8051单片机,12时钟/周期和6时钟/周期可以任意选择。
芯片内置了64KB的FLASH,4352字节的RAM。
工作频率范围0~40MHz,共有输入输出引脚32个,有EEPROM功能,看门狗功能。
芯片内部集成MAX810专用复位电路,共有3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用;
外部中断4路,8路10位A/D转换。
该单片机引脚图如图4-3所示。
图4-3STC90C51单片机引脚图
4.2.2LED数码管模块设计
led数码管(LEDSegmentDisplays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。
发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。
常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
8位共阳极数码管引脚图如图4-4所示。
图4-48位共阳极数码管引脚图
4.2.3键盘模块设计
键盘:
两行四列矩阵键盘构成一个独立式键盘系统。
键盘带时钟的引脚图如图4-5所示。
图4-5键盘的引脚图
4.2.4蜂鸣器模块设计
设计要求定时时间到,要有到时提示。
可以选择一只蜂鸣器(HA)作为三极管VT1的集电极负载,当VT1导通时,蜂鸣器发出呜叫声;
VT1截止时,蜂鸣器不发声。
R5是限流电阻。
该蜂鸣器驱动电路如图4-6所示。
图4-6蜂鸣器引脚图
4.3软件设计
软件的设计即程序的编写。
程序主要包括一下几个部分:
主程序、LED时钟显示子程序、键盘判断与中断子程序。
在主程序中首先要对实时时钟和定时器进行初始化,利用函数为系统初始化一个初始时间。
再初始化开中断,然后进入一个主循环中,主循环中有两个判断部分,一个是不断的扫描独立按键,当有那个按键被按下后就会响应对应的操作,另一个部分是判断是在可以读取实时时钟的时间时,调用读取时间的函数读取芯片的时间,把读取的时间放到一个数组中,然后判断当前的时间是否和自己设定的作息时间是否一致,一致时便会执行响铃操作。
LED时钟显示子程序中,先初始化复位一个高电平,在执行写时间和读时间程序。
键盘判断中,先初始化变量,当按下按键时,延时,程序会判断是否按下按键,若只是抖动则回到等待区域,若判断为按下按键,则返回按下的数值。
中断子程序,先重置高八位和低八位的数值并给定初值,再循环设置标志位,到并设定循环数值。
4.3.1软件开发环境介绍
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。
DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
本次设计中,使用DS1302提供的RAM区保存5个闹铃数据,达到掉电不丢失功能。
4.3.2主程序设计及流程图
(1)主程序:
voidmain(void)
{
unsignedcharnum;
Init_Timer0();
Ds1302_Init();
Ds1302_Write_Time();
while
(1)//主循环
{
num=KeyScan();
//按键扫描
switch(num)
{
case7:
while(i--){DelayMs
(1);
SPEAKER=!
SPEAKER;
}i=500;
break;
case8:
default:
}
if(ReadTimeFlag==1)
ReadTimeFlag=0;
Ds1302_Read_Time();
TempData[0]=dofly_DuanMa[time_buf1[4]/10];
TempData[1]=dofly_DuanMa[time_buf1[4]%10];
TempData[3]=dofly_DuanMa[time_buf1[5]/10];
TempData[4]=dofly_DuanMa[time_buf1[5]%10];
TempData[6]=dofly_DuanMa[time_buf1[6]/10];
TempData[7]=dofly_DuanMa[time_buf1[6]%10];
TempData[2]=0x80;
TempData[5]=0x80;
if((TempData[0]==0x3f)&
&
(TempData[1]==0x07)&
(TempData[3]==0x6d)&
(TempData[4]==0x6d)&
(TempData[6]==0x3f)&
(TempData[7]==0x3f))
{//07-55-00响铃
while(i--)
{DelayMs
(1);
SPEAKER=!
}
i=500;
if(((TempData[0]==0x3f)&
(TempData[1]==0x7f))&
(((TempData[3]==0x3f)&
(TempData[4]==0x3f))||((TempData[3]==0x66)&
(TempData[4]==0x6d))||((TempData[3]==0x6d)&
(TempData[4]==0x6d)))&
((TempData[6]==0x3f)&
(TempData[7]==0x3f)))
{//08-00-00响铃08-45-00响铃08-55-00响铃
(TempData[1]==0x6f))&
(((TempData[3]==0x4f)&
(TempData[7]==0x3f))||((TempData[3]==0x6d)&
(TempData[7]==0x3f))))
{//09-35-00响铃09-55-00响铃
if(((TempData[0]==0x06)&
(TempData[1]==0x3f))&
(((TempData[3]==0x66)&
(Te