用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。下面介绍本人自编的红外遥控解码的c51程序,自认为是可能是史上最简的。此程序是针对upd6121系列的遥控器的取码程序,解码值在im[2]中,当irok=1时解码有效。
/* 51单片机红外遥控解码程序 */
/* 适用upd6121系列 */
#include
#define digport p2
#define wordport p0
unsigned char code led_num[]={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};
#define imax 14000 //此处为晶振为11.0592时的取值,
#define imin 8000 //如用其它频率的晶振时,
#define inum 1450 //要改变相应的取值。
unsigned char im[]={0x00,0x00,0x00,0x00};
unsigned long m,tc;
unsigned char i,irok;
void delaymy(unsigned int t){
while(--t);
}
void display_led(unsigned long num)
{
unsigned int ii;
unsigned int jj=0;
unsigned long aa,bb;
unsigned int xx[8]={0,0,0,0,0,0,0,0};
do {
bb=num/10;
aa=num-bb*10;
xx[jj]=aa;
num=bb;jj++;
}
while(num>0);
digport=0x80;
for(ii=0;ii>1;
};
wordport=0;
}
//外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
tc=th0*256+tl0; //提取中断时间间隔时长
th0=0; tl0=0; //定时中断重新置零
if((tc>imin)&&(tc
if(tc>inum) im[m/8]=im[m/8]>>1|0x80; else im[m/8]=im[m/8]>>1; //取码
if(m==32) if((im[2]|0x01)==~im[3]) irok=1; else irok=0; //取码完成后判断读码是否正确
m++; //准备读下一码
}
/*演示主程序*/
void main(void)
{
m=0;
ea=1;
it1=1;ex1=1;
tmod=0x11;
th0=0;tl0=0;
tr0=1;et0=1;
for(;;){
delaymy(100);
if(irok==1) for(i=0;i<400;i++) display_led(im[2]);
irok=0;
}
}
笼型电动机正反转的控制线路(电路图)
海量数据与高效能运算呼唤次世代存储技术应用
5G共建共享打造中国标准拉动产业链发展,范围有望进一步延展
fil封装是啥意思 fil封装后多久能产币
如何才能更好地做到人机共融
最简单的51单片机红外遥控解码程序
Aroma Bit将气味探测转换为视觉模型
电源设计中关于噪声和尖峰的解决方案
中国移动换帅 布局5G和寻找新增长点
2019年全球穿戴式装置出货量达2.25亿台, 相关PCB供应链有望从中受惠
无人机在智慧城市的设计和管理中的应用和重要性分析
华为MatePad系列将预置基于鸿蒙OS全新平板系统
向潜在提供商提出的5个有关于云存储的隐私问题
GaN将在高功率,高频率射频市场优势明显
第三届世界智能大会展示汽车未来驾驶新亮点
俄罗斯银行Sberbank正在要求客户提供加密货币收入的相关信息
RFMD发表RF5605和RFFM420x系列高功率前端模组
“数字月饼”叫价高达数万元 数字藏品太火爆
一夜真的只耗一度电?
北卡罗来纳州立大学研发新软体机器人:集滚动、旋转、移动功能于一体