基于单片机的时间控制器.docx

上传人:b****6 文档编号:12981240 上传时间:2023-06-09 格式:DOCX 页数:57 大小:1.06MB
下载 相关 举报
基于单片机的时间控制器.docx_第1页
第1页 / 共57页
基于单片机的时间控制器.docx_第2页
第2页 / 共57页
基于单片机的时间控制器.docx_第3页
第3页 / 共57页
基于单片机的时间控制器.docx_第4页
第4页 / 共57页
基于单片机的时间控制器.docx_第5页
第5页 / 共57页
基于单片机的时间控制器.docx_第6页
第6页 / 共57页
基于单片机的时间控制器.docx_第7页
第7页 / 共57页
基于单片机的时间控制器.docx_第8页
第8页 / 共57页
基于单片机的时间控制器.docx_第9页
第9页 / 共57页
基于单片机的时间控制器.docx_第10页
第10页 / 共57页
基于单片机的时间控制器.docx_第11页
第11页 / 共57页
基于单片机的时间控制器.docx_第12页
第12页 / 共57页
基于单片机的时间控制器.docx_第13页
第13页 / 共57页
基于单片机的时间控制器.docx_第14页
第14页 / 共57页
基于单片机的时间控制器.docx_第15页
第15页 / 共57页
基于单片机的时间控制器.docx_第16页
第16页 / 共57页
基于单片机的时间控制器.docx_第17页
第17页 / 共57页
基于单片机的时间控制器.docx_第18页
第18页 / 共57页
基于单片机的时间控制器.docx_第19页
第19页 / 共57页
基于单片机的时间控制器.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的时间控制器.docx

《基于单片机的时间控制器.docx》由会员分享,可在线阅读,更多相关《基于单片机的时间控制器.docx(57页珍藏版)》请在冰点文库上搜索。

基于单片机的时间控制器.docx

基于单片机的时间控制器

摘要

本设计详细介绍了利用AT89C51单片机设计时间控制器的方法。

该时间控制器是以AT89C51单片机为核心,扩展一片XICOR公司的X5045组成的小系统,控制一路继电器:

可以设定一天中的时间,设定继电器的开启时间和关闭时间,可以清除不需要的定时,能够紧急启动:

所有的设定均通过键盘实现,按键具有连击功能,每个状态都有指示灯提示。

我们设计的作息时间控制是用单片机实现的,是为了更好的对时间控制智能化。

时间控制器包括硬件和软件。

硬件部分包括继电器,存储器和显示器接口芯片。

软件部分,主要是主程序设计。

软硬件结合在一起,先调试子程序,然后逐级叠加调试,最后系统调试通过。

时间控制系统可以准确的显示时间,在定时时间到时发出悦耳的铃声提醒同学们按时上下课。

关键词:

单片机,控制,时间

Abstract

ThisdesignUSESAT89C51isintroducedtimecontrollerdesignmethod.ThetimecontrollerbasedonAT89C51single-chipmicrocomputerasthecore,expandingaXICORX5045consistingofsmallsystems,controlrelayalltheway:

youcansetthetimeofday,settherelayopentimeandclosetime,timing,canremovedon'tneedtostarttheemergency:

allsetbykeyboardandbuttonswithfunctionsofcombo,eachstatehasalighthint.Ourdesignworkandresttimecontrolareimplementedusingsinglechipmicrocomputer,isintelligentinordertobettercontrolovertime.Timecontrollerincludeshardwareandsoftware.Hardwarepartincludesrelay,storageanddisplayinterfacechip.Softwarepart,mainlyisthemainprogramdesign.Hardwareandsoftwaretogether,debuggingsubroutinefirst,andthenoverlaydebuggingstepbystep,finallysystemdebuggingthrough.Timecontrolsystemcanaccuratelydisplaythetimeintheregulartimewhenamelodiousbellremindstudentsaddinganddroppingclassesontime.

 

1.系统设计方案与论证……………………………………………………………………3

2.1设计要求…………………………………………………………………………………3

2.2系统设计总体方案…………………………………………………………………..….3

2 系统的硬件设计与实现………………..…………………………………………………4

2.1.1时钟芯片DS12887性能简介……………………………………………………….4

2.1.2时钟芯片读写时序……………………………………………………………….…6

2.1.3时间寄存器地址……………………………………………………………………6

2.1.4特殊控制寄存器功能………………………………………………………………7

2.2.1液晶SYB12864介绍………………………………………………………………8

2.2.2液晶与单片机的接口………………………………………………………………8

2.2.3液晶写操作时序……………………………………………………………………9

2.3.1红外发送与接收……………………………………………………………………10

2.3.2遥控码数据分析……………………………………………………………………10

2.3.3接收电路……………………………………………………………………………11

2.4.1电源部分电路图……………………………………………………………………11

3.程序设计…………………………………………………………………………………12

3.主程序流程图……………………………………………………………………………12

3.2按键识别……………………………..……………………………………………..…13

3.3课表计算………………………………………………………………………………13

3.4遥控解码………………………………………………………………………………14

4.系统测试与总结…………………………………………………………………………16

附录1 主要元器件清单………………………………………………………………….…17

附录2 程序清单………………………………………………………………………….…18

附录3 原理图与印制板图………………………………………………………………….35

附录4 系统使用说明……………………………………………………………………….36

附录5 系统实物图片……………………………………………………………………….37

1.系统设计方案与比较

1.1 设计要求

一、时钟功能:

能显示年、月、日、星期、时、分、秒

二、调整功能:

能校正年份、日期、时间等

三、打铃功能:

按指定时间表播放音乐、现场修改作息时间表

四、设置的作息时间表数据在单片机掉电后不会丢失

1.2系统设计总体方案

根据设计要求实现的功能,可以采用不同的设计系统方案如下:

方案一:

采用单片机自带定时器进行计时,外加存储器保存课表数据,普通键盘输入。

由于单片机进行软件计时,硬件成本比较低,但是误差比较大,需要校准,日后的维护

工作量比较大。

可用廉价的AT24C04等存储器保存数据,读写比较容易。

对于普通的独键盘,设置量比较大,改用矩阵键盘又会占用较大的电路板空间。

方案二:

采用实时时钟芯片计时,红外数据输入。

时钟芯片常见的有美信公司的DS1302、DS12887等.前者与后者的最大区别在于有没有自带的备份电池。

前者需要增加额外的电池以及相关的充电电路,后者DS12887本身已经集成了锂电池,而且掉电后相当长一段时间还可以正常走时,最重要的是它还剩下114字节的非易失RAM,由于有备份电池供电,相当于一个存储器,可以充分利用,而不需要增加另外的存储器,减少了外围电路。

电视红外遥控比较常见,只要解码出来,可以充分利用面板上的多个数字键,接收电路也相当简单,另外由于是非接触式按键,避免了普通机械按键的磨损弊端。

故本设计选用第二种方案.总体方框图如下:

 

2.系统的硬件设计与实现

2.1时钟芯片DS12887性能简介

2.1.1时钟芯片特点功能简介及引脚分布如图:

 

2.1.2读写时序

2.1.3时间寄存器地址

值得注意的是上表中最后的寄存器地址0EH--7FH,这里就是剩余的144字节RAM,在本设计中实际使用的是10H—13H四个字节,用于保存课表上午和下午的起始数据。

2.1.4特殊控制寄存器功能

 

2.2液晶显示块部分电路

2.2.1液晶SYB12864功能与技术参数简介

SYB12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成.可完成图形显示,内置汉字库,可以显示8×4个(16×16点阵)汉字.

主要技术参数和性能:

1.电源:

VDD:

+5V;LCD外接驱动电压为3.0∽8.0V

2.显示内容:

128(列)×64(行)点

3.全屏幕点阵

4.七种指令

5.与CPU接口采用8位数据总线并行输入输出和8条控制线.

 

2.2.2液晶与单片机接口

外部接口信号如下表所示:

管脚号

管脚名称

LEVER

管脚功能描述

1

VSS

0V

电源地

2

VDD

5.0V

电源电压

3

V0

-

液晶显示器驱动电压

4

RS

H/L

RS=“H”,表示DB7~DB0为显示数据

RS=“L”,表示DB7~DB0为显示指令数据

5

R/W

H/L

R/W=“H”,E=“H”,数据被读到DB7~DB0

R/W=“L”,E=“H→L”,DB7~DB0的数据被写到IR或DR

6

E

H/L

使能信号:

R/W=“L”,E信号下降沿锁存DB7~DB0

R/W=“H”,E=“H”DRAM数据读到

DB7~DB0

7

DB0

H/L

数据线

8

DB1

H/L

数据线

9

DB2

H/L

数据线

10

DB3

H/L

数据线

11

DB4

H/L

数据线

12

DB5

H/L

数据线

13

DB6

H/L

数据线

14

DB7

H/L

数据线

15

PSB

H/L

H:

8或4位并口,L串口(本设计中硬件置高电平)

16

NC

17

RET

H/L

复位信号,低电平复位(如不需要经常复位可以悬空)

18

VOUT

10V

LCD驱动电压

19

LED+

-

LED背光板电源

20

LED-

-

LED背光板电源

数据线D0~D7与单片机P0口相连,完成数据传送。

单片机P1.0与液晶RS相连,控制显示数据和显示指令数据.单片机P1.1与液晶RW相连,控制数据读写.单片机P1.2与液晶E相连,液晶REST与电源相连,控制液晶复位信号。

18脚是液晶背光驱动端,通过限流可变电阻调节对比度,由于经过试验测量可变电阻大概是16K,为了方便电路布局,用15K的固定电阻。

液晶与单片机接口图

2.2.3液晶写操作时序

写操作时序

R/W为低电平,CS为低电平写入指令,

R/W为低电平,CS为高电平写入数据

2.3红外遥控

2.3.1发送与接收

通用红外遥控系统由发射和接收两大部分组成。

应用编/解码专用集成电路芯片来进行控制操作,如图所示。

发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。

2.3.2遥控码数据分析

遥控发射器专用芯片很多,这里我们以运用比较广泛,解码比较容易的一类来加以说明,以东芝公司的TC9012组成发射电路为例说明编码原理。

当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。

这种遥控码具有以下特征:

采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图所示。

遥控码的“0”和“1”

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。

一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。

后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。

根据红外编码的格式,发送数据前需要先发送4.5ms的起始码和4.5ms的结果码作为引导码。

遥控串行数据编码波形如下图所示:

 

2.3.3接收电路

接收电路较为简单,采用一体化接收头HS0038,滤波电容在这里可以减少电源带来的干扰。

如图:

 

2.4电源

2.3.3接收电路

2.4.1电源部分电路图

为达到提供稳定5V供电电压,变压器采用了玩具车电池充电适配器,由于此电源只包含了全波整流电路,在此加上滤波电路和稳压电路,如图。

 

3.系统的软件设计

3.1主程序流程图

主程序流程图:

读取课表数据并计算

读取时间

欢迎界面

时钟与液晶复位

上电

 

 

 

显示时间

True

显示课次,播放音乐

False

True

退出菜单

选择修改课表

选择查看课表

选择调整时间

调整时间

上午课表

修改课表

保存设置

下午课表

保存设置

3.2按键识别

为了输入简单,用数字键直接输入要设置的数字,而且没有另外设置专门的光标移位键,即输入一个数字后自动换到一个位置,如果有现成的不需要修改的数字,可以直接按任意非数字键跳过。

由于进行年月日等数据的保存时是以两个键为一个单位(比如23),由此将产生一个问题,怎样保存无效的键值,即如果第一个键是无效键或者第二个键是无效键,这个数据怎么保存。

具体解决办法如下:

从遥控按键解码结果可知,键值和数字键的数字对应关系为:

如果键值小于9(0x09),按键数字就是键值加上1,而键值9对应按键“0”。

所以两个按键的要分九种情况,第一个按键有三种情况,无效键,1~9键,0键,第二个键也有三种情况,考虑到第二个键有可能是无效键,所以按第一个键(十位)时候要保存个位数字,具体赋值如下:

(以年为例,year0,year1,year2分别是原值、第一次按键后赋值、第二次按键后赋值)

第一个按键后赋值如下表:

key>9

(无效键)

year1=year0

key<9

(1~9键)

year1=10*(key+1)+year0%10

key=9

(0键)

year1=year0%10

第二个按键后赋值如下表:

第一个键

第二个键

赋值

无效键

0键

year2=year1/10*10

1~9键

0键

year2=year1/10*10

0键

0键

year2=year1/10*10为方便编程没有用year2=0

无效键

1~9键

year2=year1/10*10+key+1

1~9键

1~9键

year2=year1/10*10+key+1

0键

1~9键

year2=key+1

无效键

无效键

year2=year1

1~9键

无效键

year2=year1

0键

无效键

year2=year1

事实上第二个键是无效键的情况在刚开始已经考虑,所以键值不变,可以不做处理。

3.3课表计算

以上午为例,当设定好第一节课上课时间,以后的时间在此基础上往上加。

第一节课

下课

第二节课

上课

第二节课下课

第三节课上课

第三节课下课

第四节课上课

第四节课下课

小时增量

0

0

1

2

2

2

3

分钟增量

45

55

40

0

45

55

40

实际编写程序计算时,为了对齐,插入了无效的0值,当然如果schedule1[]表同样采用二维数组可避免此弊端,这也是当时编程时候总体设计考虑不周造成的,以至于要修改就要改动其很多的数据。

3.4遥控解码

具体解码过程如下:

通过定时器读出相应的高低电平,先读出低电平,再读出高电平,如果中间有非正常的值则重新接收。

每八个位为一个字节数据,总共四个有效数据,最后在数码管上显示。

#include

#definec(x)(x*110592/120000)//便于数据分析

sbitIr_Pin=P3^6;//接收管脚

unsignedcharcodeLed_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,

0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极数码显示码0-F.

unsignedcharcodeLed_Sel[]={0xfe,0xfd,0xfb,0xf7};//显示位控

unsignedcharLed_Buf[4];//显示缓冲区

unsignedcharLed;//位选

unsignedcharIr_Buf[4];//用于保存解码结果

//===================================================

timer0()interrupt1using1     //防止按键时LED显示闪烁

{

TL0=(65536-1000)%256;

TH0=(65536-1000)/256;//定时器0设定约1000us中断一次,用于数码管扫描

P0=0xff;

P2=Led_Sel[Led];//位选

P0=Led_Tab[Led_Buf[Led]];//段选

if(++Led>3)Led=0;  //四个扫描完了,到第一个数码管

}

//===================================================

unsignedintIr_Get_Low()   //获取低电平时间

{

TL1=0;

TH1=0;

TR1=1;

while(!

Ir_Pin);//当P3.6为低等待

TR1=0;

returnTH1*256+TL1;

}

//===================================================

unsignedintIr_Get_High()//获取高电平时间

{

TL1=0;

TH1=0;

TR1=1;

while(Ir_Pin);//当P3.6为高等待

TR1=0;

returnTH1*256+TL1;

}

//===================================================

main()

{

unsignedinttemp;

chari,j;

TMOD=0x11;

TL0=(65536-1000)%256;

TH0=(65536-1000)/256;//定时器0设定约1000us中断一次,用于数码管扫描

EA=1;

ET0=1;

TR0=1;

while

(1)

{

restart:

while(Ir_Pin);

temp=Ir_Get_Low();//允许有一定的误差

if(tempc(5000))continue;//引导脉冲低电平4500

temp=Ir_Get_High();

if(tempc(5000))continue;//引导脉冲高电平4500

for(i=0;i<4;i++)//4个字节

for(j=0;j<8;j++)//每个字节8位

{

temp=Ir_Get_Low();//560us低电平

if(tempc(800))gotorestart;

temp=Ir_Get_High();  //560us或1680us高电平

if(tempc(2000))gotorestart;

Ir_Buf[i]>>=1;//先写“0”  

if(temp>c(1120))

Ir_Buf[i]|=0x80;//再写“1”

}

Led_Buf[0]=Ir_Buf[2]&0x0f;  //低四位数据码   

Led_Buf[1]=Ir_Buf[2]>>4;    //高四位数据码

Led_Buf[2]=Ir_Buf[0]&0x0f;  //低四位系统码

Led_Buf[3]=Ir_Buf[0]>>4;    //高四位系统码

}

}

 

解码结果如下,系统码为0x0E

(由于设置键和屏显键的键值相同,故有同样的功能)

4.总结

经过各方面的测试,达到设计的要求。

一、在系统硬件的设计方面,充分考虑了电路元器件的布局,整个系统板小巧精致。

刚开始用万能板做实验时,红外接收头由于没有使用滤波电路,抗干扰能力比较弱,单片机容易进入死机状态,经过改进后,恢复正常,只有极少数情况下会出现死机,可能是电源干扰所致,如果加入看门狗电路可以避免死机。

在设计的过程中,曾遇到了许多的问题,比如内存溢出、液晶的判忙、按键识别、菜单设置等,经过了大量的调试修改工作,得以解决,在这过程中积累了宝贵的经验。

二、本设计还可以进一步改进和添加新的功能

1、加入温度测量。

采用DS18B20,只占用一根单片机口线,精度也比较高。

2、闹钟功能。

DS12887上自带闹钟功能。

如果只是用来做普通的闹钟,实用性不强,其实在本设计中可以用来打铃,只要把课表计算好,每次上课或者下课后由单片机自动把下一个打铃点设置为闹钟,这样就不用单片机来比较打铃点。

3、加入液晶屏保功能。

在没有操作时把液晶电源关掉,当有按键出现时点亮液晶,可以延长液晶使用寿命,还可以节省电能。

不过具体操作时候必须把液晶的电源和地线全部断开。

4、添加任意打铃点,并可以删除。

其实还有一百多字节的非易失RAM剩余,可以保存数据。

附录1:

主要元器件清单

序号

名称

型号,规格

数量

备注

1

单片机

AT89S52

1

AT89S52

2

电阻

色环电阻

10kΩ

1kΩ

200Ω

15kΩ

1

2

1

1

误差10%

3

电容

0.1uF,

470uF

10uF

33p,

1.01uF

1000uF

2

2

1

2

1

1

104

470uF/25V

10uF/10v

103

1000uF/10V

4

三极管

9012

1

PNP

5

蜂鸣器

1

6

时钟芯片

DS12CR887

1

DS12CR887

7

电视遥控器

1

TC9012

8

液晶

12864

1

12864

9

单片机插座

40座

1

DIP40

10

插座

单排插座

1

SIP20

11

排阻

10K

1

103J

12

发光二极管

红色

发光二极管

13

直流插座

1

三脚直流座

14

晶振

1

12MHZ

16

稳压管

LM7805

1

LM7805

附录2:

程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharweek,key,high;

//12864液晶操作口

sbitrs=P1^0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2