




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 1953:2025 EN Coal - Size analysis by sieving
- 房地产买卖合同协议书2025
- 2025昆明聂耳交响乐团编外人员招聘(1人)考前自测高频考点模拟试题及参考答案详解一套
- 2025年滇西科技师范学院公开招聘博士人员(8人)考前自测高频考点模拟试题含答案详解
- 2025福建三明市教育局华东师范大学附属三明中学招聘紧缺急需专业工作人员18人(省外高校专场)考前自测高频考点模拟试题附答案详解(突破训练)
- 2025北京清华附中上庄学校招聘模拟试卷及参考答案详解
- 2025年中国华电集团有限公司宁夏分公司所属基层单位高校毕业生招聘笔试题库历年考点版附带答案详解
- 2025北京市大兴区教育委员会所属事业单位第二批招聘教师251人考前自测高频考点模拟试题及答案详解(新)
- 2025湖北恩施市福牛物业有限公司补招恩施市金满园农业发展有限公司工作人员1人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025福建厦门市翔安招商集团有限公司(第一期)招聘4人考前自测高频考点模拟试题及参考答案详解
- 22G101三维立体彩色图集
- 政工专业人员考核意见表
- 植物生理学植物的抗逆境生理
- 渔业资源与渔场学PPT完整全套教学课件
- GB/T 1871.1-1995磷矿石和磷精矿中五氧化二磷含量的测定磷钼酸喹啉重量法和容量法
- 第五节 重力流输水管线设计计算
- 元数据教学讲解课件
- CCP与备货0403 (华为培训)课件
- 小学数学西南师大四年级上册二加减法的关系和加法运算律简便计算综合练习PPT
- ASCVD时代总体心血管风险评估工具的更新ppt参考课件
- GB 15579.3-2014 弧焊设备 第3部分:引弧和稳弧装置
评论
0/150
提交评论