#include#define uchar unsigned char#define uint unsigned intuchar code table[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //定义数字显示sbit remote=P3^3; //定义中断源外中断3.3int count=0; //定义全局变量计数计时器bit get_over; //定义读取数据结束int dat[33],ircode[4]; //第一个是直接读取数据,第二个是解码之后的数据void ini_rem(void); //遥控器的初始化void ini_other(void); //其他设定初始化void exchange(void); //编码转换//void timer0(void) interrupt 0 //计时器0中断,计时计算上升沿个数来测定1,0,和开始结束码//void ex_rem(void) interrupt 4 //外中断1,通过上升沿来让定时器计时void dis(void); //显示函数void delay(uint z); //显示延时函数main(){ ini_other(); ini_rem(); while(1) { if(get_over==1) { exchange(); dis(); get_over=0; } }}void ini_other(){ EA=1; //总中断 ET0=1; //定时器0中断 TR0=1; //定时器0中断 TMOD=0X01; //定时器状态 定时器0方式1,16位计数器 TH0=(65535-300)/256; //初值设定为300us=0.30ms TL0=(65535-300)%6; EX1=1; //开启外部中断 1 IT1=1; // 设置成 下降沿触发方式 (为0时为低电平触发) PX1=1; //将外中断设置为高优先级}ex_rem(void) interrupt 2{ bit flag; int i=0; EX1=0; if(flag) { if(count>=27&&count<=33) // 引导码接受成功 { i=0; //给计数标志位 } dat[i]=count; //将计时数存入,备用处理 count=0; //计数清零 i++; //下一次的计时数 if(i==33) //如果一次信号32位全部OK { i=0; //给计数标志位 get_over=1; //置计数标志 } else { count=0; //否则计数清零,置标志位,继续 flag=1; } } EX1=1;} void timer0(void) interrupt 1{ TH0=(65535-500)/256; TL0=(65535-500)%6; //TMOD=0X01; count++;}void exchange(void) //编码子程序从第三个数据开始{ unsigned char i,j,k,val,tmp1; k=1; for(i=0;i<4;i++) { for(j=0;j<8;j++) { tmp1=dat[k]; if(tmp1>4) val=val|0x80; else val=val; if(j<8) val=val>>1; k++; } ircode[i]=val; val=0; }}void dis() //显示子程序 OK{ P1=0XF0; P2=table[ircode[2]/10]; delay(1); P1=0xF1; P2=table[ircode[2]]; delay(1); }void delay(uint z) //延时子函数{ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}
导读:目前正在解读《单片机红外遥控程序beta》的相关信息,《单片机红外遥控程序beta》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机红外遥控程序beta》的详细说明。
简介:本文给大家分享了单片机红外遥控程序beta代码。
提醒:《单片机红外遥控程序beta》最后刷新时间 2024-03-14 01:01:21,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机红外遥控程序beta》该内容的真实性请自行鉴别。