基于51单片机的红外遥感电子时钟.docx_第1页
基于51单片机的红外遥感电子时钟.docx_第2页
基于51单片机的红外遥感电子时钟.docx_第3页
基于51单片机的红外遥感电子时钟.docx_第4页
基于51单片机的红外遥感电子时钟.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

/*功能基本已经实现*/*时间显示格式为#-#-#。遥控设置时间。遥控键key1、key2调节小时,key3、key4调节分钟, key5、key6调节秒,退出键控制退出设置。定时器T0用于控制1s,定时器T0和外部输入用于控制红 外接收。 */#include /* 定义变量*/#define uint unsigned int#define uchar unsigned charsbit dula=P10; /段选标志 sbit wela=P11; /位选标志sbit beep=P20; /闹铃标志bit irpro_ok,irok; /红外处理标志 uchar IRcord4; /存储处理后的红外码值数组uchar irdata33; /存储处理前的33位红外码值数组uchar irtime; /红外处理用全局变量 uchar num1,num2,num3,num4,hh,hl,mh,ml,sh,sl,hhc=1,hlc,mhc,mlc,shc,slc;/时分秒用定义全局变量uchar num5,num6,num7,num8,hh1,hl1,mh1,ml1,sh1,sl1,hh2,hl2,mh2,ml2,sh2,sl2;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /0 1 2 3 4 5 6 7 8 9uint key1,key2,key3,key4,key5,key6; /按键定义uint set_sign,clock_sign,settime_ok; /进入设置时间标志/* 函数声明*/void EX0init(); /外部初始化函数void TIM0init(); /T0初始化函数void TIM1init(); /T1初始化 函数 void clock(); /闹钟函数void Hwscan(); /红外扫描函数void Ir_work(); /红外键值散转处理函数void Ircdeal(); /红外码值处理函数void key_work(); /遥控键值操作处理函数void clock_set();/遥控设置闹钟时间函数void delayms(uint); /延迟函数void display(uchar,uchar,uchar,uchar,uchar,uchar);/显示函数/*-主函数-*/void main()TIM1init(); /定时器1初始化TIM0init(); /定时器0初始化EX0init(); /初始化外部中断while(1)Hwscan();/红外扫描display(hh,hl,mh,ml,sh,sl);key_work();clock();/*- 定时器0初始化 (定时器用来计算电平的长度)-*/void TIM0init(void) /定时器0初始化 TMOD=0x12; /定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; /重载值 TL0=0x00; /初始化值 ET0=1; /开中断 TR0=1; /*定时器T1初始化*/void TIM1init()TMOD =0x12; /定时器1工作方式1TH1 =(65536-50000)/256;TL1 =(65536-50000)%256;ET1 =1;TR1 =1;/*- 外部中断0初始化-*/void EX0init(void) IT0 = 1; /指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; /使能外部中断 EA = 1; /开总中断/* 红外扫描函数*/void Hwscan()if(irok) /如果接收好了进行红外处理 Ircdeal();irok=0;if(irpro_ok) /如果处理好后进行工作处理,如按对应的按键后显示对应的数字等 Ir_work();/*定时器T1中断处理函数*/ void T1_time() interrupt 3 /定时器T1TH1=(65536-50000)/256;TL1=(65536-50000)%256;num1+; if(num1=20) /加一为50ms 20次为1秒num1=0;if(set_sign=0)/若进入设置,则时间停止走num2+;if(num2=60) /秒循环进位判断num2=0;num3+;sh=num2/10;sl=num2%10;elsesh=num2/10;sl=num2%10; if(num3=60) /分循环进位判断num3=0;num4+;mh=num3/10;ml=num3%10;elsemh=num3/10;ml=num3%10; if(num4=24) /时循环进位判断num4=0;hh=num4/10;hl=num4%10;elsehh=num4/10;hl=num4%10; /*- 定时器0中断处理-*/void T0_time() interrupt 1 using 1 irtime+; /用于计数2个下降沿之间的时间/*- 外部中断0中断处理-*/void EX0_() interrupt 0 /外部中断0服务函数static uchar i; /接收红外信号处理static bit startflag; /是否开始处理标志位if(startflag) if(irtime=33) /头码是9ms+4.5ms和4.5ms+4.5ms均可 i=0; /头码存储到0位 irdatai=irtime;/存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i+; /跳到下一位 if(i=33) /表示存储32为完毕 irok=1; i=0; else /装回初值 irtime=0; /有其他干扰是不为0startflag=1; /* 红外码值处理-*/void Ircdeal(void) /红外码值处理函数(四个字节一共32位)和量化差不多 unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i4;i+) /控制4个字节共32位for(j=1;j7) /大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差value|=0x80; /| 记毁作前者表示或,后者表右移的意思,针对二进制位进行操作if(j=1;k+;IRcordi=value;value=0; irpro_ok=1;/处理完毕标志位置1/*- 数码管显示函数-*/void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)if(set_sign=1)if(num1=8) /时显示并闪烁dula=1; P0=tablehh;dula=0;P0=0xff; wela=1;P0=0x7f; /0111 1111wela=0;delayms(1);dula=1;P0=tablehl;dula=0;P0=0xff;wela=1;P0=0xbf; /1011 1111wela=0;delayms(1);elsedula=1; /时显示不闪烁P0=tablehh;dula=0;P0=0xff; wela=1;P0=0x7f; /0111 1111wela=0;delayms(1);dula=1;P0=tablehl;dula=0;P0=0xff;wela=1;P0=0xbf; /1011 1111wela=0;delayms(1);if(set_sign=2)if(num1=8) /分显示并闪烁dula=1; P0=tablemh;dula=0;P0=0xff;wela=1;P0=0xef; /1110 1111wela=0;delayms(1);dula=1;P0=tableml;dula=0;P0=0xff;wela=1;P0=0xf7; /1111 0111wela=0;delayms(1);else/分显示不闪烁dula=1; P0=tablemh;dula=0;P0=0xff;wela=1;P0=0xef; /1110 1111wela=0;delayms(1);dula=1;P0=tableml;dula=0;P0=0xff;wela=1;P0=0xf7; /1111 0111wela=0;delayms(1);if(set_sign=3)if(num10;i-)for(j=124;j0;j-);/*- 闹钟函数-*/void clock() if(hh=hhc&hl=hlc&mh=mhc&ml=mlc&sh=shc&sl=slc) if(num1=12)beep=0;elsebeep=1;/if(ml=mlc+1) /响一分钟后关掉蜂鸣器/ beep=1;/*- 闹钟定时函数-*/void clock_set()if(clock_sign=1)settime_ok=0;hh2=hhc,hl2=hlc,mh2=mhc,ml2=mlc,sh2=shc,sl2=slc;hh1=hh,hl1=hl,mh1=mh,ml1=ml,sh1=sh,sl1=sl;num5=num1,num6=num2,num7=num3,num8=num4;if(clock_sign=0)if(settime_ok=1) hhc=hh,hlc=hl,mhc=mh,mlc=ml,shc=sh,slc=sl;else hhc=hh2,hlc=hl2,mhc=mh2,mlc=ml2,shc=sh2,slc=sl2; hh=hh1,hl=hl1,mh=mh1,ml=ml1,sh=sh1,sl=sl1;num1=num5,num2=num6,num3=num7,num4=num8;set_sign=0;/*- 红外键值散转处理函数-*/void Ir_work(void)switch(IRcord2) case 0x0c:if(clock_sign=0) set_sign=0; if(clock_sign=1) clock_sign=0;clock_set(); break;case 0x08:clock_sign=1,clock_set(),set_sign=1;break;case 0x0e:if(set_sign=1)key1=1; if(set_sign=2)key3=1; if(set_sign=3)key5=1;break;case 0x1a:if(set_sign

温馨提示

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

最新文档

评论

0/150

提交评论