单片机控制电子时钟及继电器通断大作业(泰职大信息工程学院常猛猛整理).doc_第1页
单片机控制电子时钟及继电器通断大作业(泰职大信息工程学院常猛猛整理).doc_第2页
单片机控制电子时钟及继电器通断大作业(泰职大信息工程学院常猛猛整理).doc_第3页
单片机控制电子时钟及继电器通断大作业(泰职大信息工程学院常猛猛整理).doc_第4页
单片机控制电子时钟及继电器通断大作业(泰职大信息工程学院常猛猛整理).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

泰州职业技术学院信息工程学院课程名称: 单片机原理与应用 课题名称:红外遥控电子时钟及继电器班 级: 11信息(2) 课题小组成员: 常猛猛 靖玲玲 汤刘刘 指导老师: 李平 目录摘要:2关键词:2一、总体方案设计:3二、单元模块电路设计3 液晶显示模块:3 时钟晶振模块:3 红外接收和解码模块:4 红外发射模块:4 继电器模块:4三、系统软件设计4四、系统调试12五、设计总结13六、实物图13摘要:本设计主要是先对红外遥控电子钟进行系统方案的设计,进而进行程序方面的设计。使其具有显示年、月、日、时、分、秒的基本功能之外,还具有控制继电器控制大电流通断功能。 在本设计中首先选用文献法,查找有关红外遥控电子钟设计的资料,了解此次设计中可以应用到的各种单片机、电子时钟芯片等等;然后选用比较法,针对此次设计的要求,逐一进行比较,最后选用实验法进行设计方案的决定。 最终确定本设计的作品用1602液晶显示和红外遥控进行设置的电子钟,以STC89C52RC单片机为控制核心。可以利用红外遥控进行时间的调整。 本次基于单片机设计的红外遥控电子钟与传统的机械钟相比,更具有走时准确、显示直观、性能稳定、携带方便、无机械传动装置等优点,因而得到广泛应用。 关键词:温度计,电子钟,DS1602,红外遥控,STC89C52RC 一、总体方案设计: 液晶显示 继电器模块 控制器 红外解码 时钟晶振模块 红外接收模块 红外发射模块遥控器按键注:NEC遥控器已经集成按键发射红外线一体的功能。二、单元模块电路设计。 液晶显示模块:采用LCD1602液晶显示。由于课程设计用过LCD1602,所以对1602液晶的操作比较熟悉,其显示功能也比较强大,实用性很强。故采用此方案。 时钟晶振模块:采用12Mhz的石英晶体晶振,此晶振在此前的单片机开发板学习中采用过操作比较熟悉故采用此晶振。 红外接收和解码模块:红外解码模块都由自己编程序来实现(查阅资料的方式获得解码程序),红外接收模块采用VS1838BS来实现。 红外发射模块:使用购买的NEC遥控器实现,通过查阅资料的方式获得NEC遥控器的编码方式。 继电器模块:利用开发板上的继电器设计一个遥控器控制大电流开关电路。三、系统软件设计#include#define uchar unsigned char#define uint unsigned intsbit hwx=P33;/红外接收数据引脚,sbit lcdrs=P10;sbit lcdrw=P11;sbit lcden=P12;sbit SMG_q = P10;/定义数码管阳级控制脚(千位)sbit SMG_b = P11;/定义数码管阳级控制脚(百位)sbit SMG_s = P12;/定义数码管阳级控制脚(十位)sbit SMG_g = P13;/定义数码管阳级控制脚(个位)sbit spk=P15;sbit jdq=P14;/sbit s1=P34;/sbit s2=P35;/sbit s3=P36;uchar ly_lhj4;uchar key_cnt;uchar count,s1num,k;bit ly_flag=1;char miao,shi,fen,nian=12,tian=21,yue;uchar code table1=date 2013-01-08;uchar code table2=time 00:00:00;void delay1();void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void write_com(uchar com)P0=com;lcdrs=0;lcdrw=0;lcden=0;delay(2);lcden=1;void write_data(uchar dat)P0=dat;lcdrs=1;lcdrw=0;lcden=0;delay(2);lcden=1;void init()uchar num;lcden=0; write_com(0x38);delay(5);write_com(0x38);delay(5);write_com(0x38);delay(5);write_com(0x38);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0c);write_com(0x80);for(num=0;num15;num+)write_data(table1num);delay(20);write_com(0xc0);for(num=0;num13;num+)write_data(table2num);delay(20);TMOD=0x11; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; EA=1;void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);void write_sfm1(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);void keyscan() switch(ly_lhj2) case 0x09: TR0=0; key_cnt+;if(key_cnt=4)key_cnt=0;if(key_cnt=0) TR0=1;spk=0;delay(1000);spk=1; break; case 0x04: if(key_cnt=1) write_com(0x0f); TR0=0; miao+; if(miao=60) miao=0; write_sfm(11,miao); write_com(0x80+0x40+12); spk=0;delay(100);spk=1; if(key_cnt=2) write_com(0x0f); TR0=0; fen+; if(fen=60) fen=0; write_sfm(8,fen); write_com(0x80+0x40+9); spk=0;delay(100);spk=1; if(key_cnt=3) write_com(0x0f); TR0=0; shi+; if(shi=24) shi=0; write_sfm(5,shi); write_com(0x80+0x40+6); spk=0;delay(100);spk=1; ;break; case 0x0c: if(key_cnt=1) miao-; if(miao=-1) miao=59; write_sfm(11,miao); write_com(0x80+0x40+12); spk=0;delay(100);spk=1; if(key_cnt=2) TR0=0; fen-; if(fen=-1) fen=59; write_sfm(8,fen); write_com(0x80+0x40+9); spk=0;delay(100);spk=1; if(key_cnt=3) TR0=0; shi-; if(shi=-1) shi=23; write_sfm(5,shi); write_com(0x80+0x40+6);spk=0;delay(100);spk=1; ;break; case 0x00: k+; if(k=1) jdq=1; P2=0xff; if(k=2) k=0; jdq=0; P2=0; void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; miao+; if(miao=60) miao=0;fen+; if(fen=60) fen=0;shi+; if(shi=24) shi=0;tian+;if(tian=30) tian=0;yue+;if(yue=12) yue=0;nian+;if(nian=50) nian=0; write_sfm1(7,nian); write_sfm1(10,yue); write_sfm1(13,tian);write_sfm(5,shi);write_sfm(8,fen);write_sfm(11,miao); void main() init();EA=1;/首先开启总中断EX1=1; /开启外部中断1,红外接收数据引脚IT1=1; /设置成下降沿触发方式TMOD=0X11;/定时器1的方式1,16位计数器,用来计数时间 while(1) if(ly_flag) ly_flag=0; keyscan(); /*外中断1入口函数,P33引脚,红外线接收IC数据脚*/void hongwai(void) interrupt 2unsigned char i,ia;/*开始判断是否为NEC波形引导码的前9MS和后4.5MS*/TL1=0;TH1=0;/定时/计数器1初始值TR1=1;/定时器以12M晶振12分频计数,即1us计数while(!hwx);TR1=0;/信号翻转停止计数if(TH140)/NEC引导码前9MS,计数约9000,TH1约等于35,给个误差值,用30-40之间来判断return;TH1=0;/定时/计数器1初始值TR1=1;while(hwx)delay1();if(TH122)/NEC引导码引导码的后4。5MS,计数约4500,TH1约等于17return;TR1=0;if(TH112)/NEC引导码引导码的后4。5MS,计数约4500,TH1约等于17return;/*开始接收四个字节内容*/for(i=0;i4;i+)for(ia=0;ia15)return;TR1=0;/高电平结束,判断数据1或0向变量移入ly_lhji=1;/数据由高位移入低位if(TH14)/时间量TH1高于4,即高于1MS判断为1ly_lhji|=0x80;ly_flag=1;/接收成功TF1=0;void delay1(void)unsigned char i=10;while(i-);四、系统调试最开始在下载至开发板测试时,按键按下后,调节光标乱跳,无法正常显示。后来听老师的讲解,分析是程序的错。在进行对红外遥控进行编程的时候,根据在网上找到的有关遥控器讲解的视频的学习,最后学习其编程方法,对此次设计中的红外遥控进行编程并下载到板子上调试,但是结果却不对。于是查阅有关红外遥控发射与接收的资料,发现此板子所带的遥控器与网上视频所讲的遥控器在红外编码方面有些不同,于是把程序中有关红外编码的地方改成适合此次所用的遥控器的红外编码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论