我无线电不懂,红外写过51单片机的收发程序,可我不会制作遥控器···我怎么不能追问啊 51单片机红外遥控程序

\u7528c51\u5355\u7247\u673a\u53ef\u4ee5\u7f16\u5199\u7ea2\u5916\u7ebf\u63a5\u6536\u5934\u7684\u7f16\u7801\u7a0b\u5e8f\uff0c\u4ece\u800c\u53ef\u4ee5\u505a\u7ea2\u5916\u7ebf\u9065\u63a7\u5668\u6765\u63a7\u5236\u7535\u5668\u8bbe\u5907\u3002\u4e0d\u77e5\u9053\u7528plc

\u8fd9\u4e2a\u76f4\u63a5\u7528\u7ea2\u5916\u63a5\u6536\u5934\u63a5\u5230PLC\u4e0a\u7f16\u7a0b\u5b9e\u73b0\u662f\u5f88\u590d\u6742\u7684\uff0c\u4e0d\u597d\u505a\u3002
\u6211\u80fd\u60f3\u5230\u7684\u529e\u6cd5\u662f\u752851\uff0c\u6216\u8005\u5176\u4ed6\u5355\u7247\u673a\uff0c\u505a\u4e00\u4e2a\u7ea2\u5916\u63a5\u6536\u89e3\u7801\u7684\u89e3\u7801\u5668\u7a0b\u5e8f\uff0c\u7136\u540e\u628a\u89e3\u7801\u5668\u6302\u5230MODBUS\u4e00\u7c7b\u7684\u901a\u8baf\u7ebf\u4e0a\uff0c\u63a5\u5165PLC\u7cfb\u7edf\u3002\u8fd9\u4e2a\u76f8\u5bf9\u6765\u8bf4\u8981\u7b80\u5355\u7684\u591a\u3002
\u6216\u8005\u6709\u8fd9\u7c7b\u73b0\u6210\u7684\u89e3\u7801\u6a21\u5757\uff0c\u4f46\u6211\u786e\u5b9e\u6ca1\u542c\u8bf4\u8fc7\uff0c\u4f60\u53ef\u4ee5\u627e\u627e\u770b\uff0c\u6709\u73b0\u6210\u7684\u6700\u597d\uff0c\u6ca1\u6709\u73b0\u6210\u7684\u53ea\u6709\u81ea\u5df1\u505a\u4e86\u3002

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^7;
sbit lcdrs = P2^6;
sbit lcdwr = P2^5;
sbit IR = P3^2;
uchar IRCOM[6];//\u6570\u7ec4\uff0c\u7528\u4e8e\u5b58\u50a8\u7ea2\u5916\u7f16\u7801
uchar code table1[] = "remote control";
uchar code table2[] = "CODE:";
void delayms(uchar x)// \u5ef6\u65f6x*0.14ms
{
uchar i;
while(x--)
for(i=0;i<13;i++){}
}
void delay(uchar x)//\u5ef6\u65f6xms
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/****************************LCD\u90e8\u5206***********************************************/
void write_com(uchar com)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0;//\u522b\u5fd8\u4e86lcden\u62c9\u4f4e
}
void write_date(uchar date)
{
lcden = 0;
lcdrs = 1;
lcdwr = 0;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void lcd_init(void)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
delay(5);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*****************main()************************/
void main(void)
{
uchar count=0;
IR = 1;
lcd_init();
write_com(0x80);
while(table1[count]!='\0')
{
write_date(table1[count]);
count++;
delay(5);
}
count = 0;
write_com(0x80+0x40);
while(table2[count]!='\0')
{
write_date(table2[count]);
count++;
delay(5);
}

IE = 0x81; //\u5f00\u4e2d\u65ad
TCON = 0x01;//\u8109\u51b2\u8d1f\u8fb9\u6cbf\u89e6\u53d1
while(1);

}
/*********************\u7ea2\u5916\u4e2d\u65ad**************************/
void IR_time() interrupt 0
{
uchar i,j,TimeNum=0;//TimeNum\u7528\u6765\u8ba1IR\u9ad8\u7535\u5e73\u6b21\u6570 \u4ece\u800c\u5224\u65ad\u662f0\u8fd8\u662f1
EX0 = 0; //\u5173\u95ed\u4e2d\u65ad
delayms(5);
if(1 == IR)
{
EX0 = 1;
return;
}
while(!IR) //\u8df3\u8fc79ms\u524d\u5bfc\u4f4e\u7535\u5e73
delayms(1);
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR) //\u8df3\u8fc74.5ms\u7684\u524d\u5bfc\u9ad8\u7535\u5e73
delayms(1);
while(!IR) //\u8df3\u8fc70.56ms\u7684\u4f4e\u7535\u5e73
delayms(1);

while(IR)
{
TimeNum++; //\u8ba1\u65f6\u9ad8\u7535\u5e73\u65f6\u95f4\u4ece\u800c\u5224\u65ad\u8bfb\u53d6\u7684\u662f0\u8fd8\u662f1
delayms(1);
}
if(TimeNum>=30)//\u6309\u952e\u6309\u4e0b\u65f6\u95f4\u8fc7\u957f \u8df3\u8fc7
{
EX0 = 1;
return;
}
IRCOM[i] = IRCOM[i]>>1;
if(TimeNum >= 8) //8*0.14ms \u8fd9\u65f6\u8bfb\u53d6\u7684\u662f1\uff1b
{
IRCOM[i] = IRCOM[i]|0x80;
}
TimeNum = 0;
}
}
if(IRCOM[2]!=~IRCOM[3])//\u5224\u65ad\u516b\u4f4d\u6570\u636e\u548c\u516b\u4f4d\u6570\u636e\u53cd\u7801\u662f\u5426\u76f8\u7b49
{
EX0 = 1;
return;
}
IRCOM[4] = IRCOM[2]&0x0f;//\u53d6\u4f4e\u56db\u4f4d
IRCOM[5] = IRCOM[2]>>4; //IRCOM[5]\u53d6IRCOM[2]\u9ad8\u56db\u4f4d
if(IRCOM[4] > 9) //\u8f6c\u6362\u6210\u5b57\u7b26
{
IRCOM[4] = IRCOM[4] + 0x37;
}
else
IRCOM[4] = IRCOM[4] + 0x30;
if(IRCOM[5] > 9)
{
IRCOM[5] = IRCOM[5] + 0x37;
}
else
IRCOM[5] = IRCOM[5] + 0x30;
delay(5);
write_com(0x80 + 0x40 + 5);
write_date(IRCOM[5]);
write_date(IRCOM[4]);
EX0 = 1; //\u91cd\u65b0\u5f00\u542f\u5916\u90e8\u4e2d\u65ad
}

一、 基本原理
1.1 红外编码原理
常用的红外线信号传输协议有 ITT 协议、 NEC 协议、 Nokia NRC 协议、 Sharp 协议、 Philips RC-5 协议、Philips RC-6协议,Philips RECS-80协议,以及 Sony SIRC 协议等。
1)协议组成 :一般由引导码 ,用户码,数据码,重复码或数据码的反码和结束码构成。
2)载波:常用的有33K,36K,36.6K,38K,40K,56K,无载波
3)占空比:常用的有1/3,1/2,不常用1/4
4)调制方式:脉宽调制,相位调制,脉冲位置调制
1.2 红外解码原理
本次作业选用的是NEC协议编码的,由38K载波调制的红外编码。基于51单片机的编码环境,编程语言为C51。 原理框图如下:
1.3 NEC编码方式
引导码,16bit用户码(地址码),8bit命令码(数据码)及其反码。
1) 引导码由一个9ms的载波波形和4.5ms的关断时间构成
2
2) 地址码共16bit,低8位在前,高8位在后。
3) 8bit命令码及其反码
二、 解码环境
2.1 硬件环境
1、 SST89E58RD单片机开发板
2、 HX1838型红外接收头
1) HX1838型红外接收头外形尺寸及引脚排列:
3
2) 应用电路图
3、 电阻、电容等元件
2.2 软件环境
1) Keil u vision2
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
2) C51
 C51是为51系列单片机设计的一种C语言
 结构化语言,代码紧凑——效率可与汇编语言媲美
 接近真实语言,程序可读性强——易于调试、维护
 库函数丰富,编程工作量小——产品开发周期短
 机器级控制能力,功能很强——适合于嵌入式系统开发
4
 与汇编指令无关,易于掌握——在单片机基础上上手快
三、 解码实现
3.1 程序结构框图
定时器20us发

一次中断
是否有信号
(低电平)
YES NO
判断是否为引导

低电平时间高
于600us
判断命令码为0
或1
储存命令码
解析命令码
在数码管显示
YES
NO
3.2 程序源代码
//NEC 编码红外遥控器解码程序
5
// // 2011-3-26 #include<stdio.h> #include<intrins.h> #include<reg51.h> #define TIMERH 0xed //宏定义定时器高位为237 #define TIMERL 0xed //宏定义定时器低位为237 unsigned char code seg_code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码 unsigned char bcode[32]=0; //定义储存二进制命令码数组 unsigned int count,dcode;//定义变量 // 关键变量说明 //en: 接受命令码使能控制 //flag: 接收完毕符号位 unsigned int i,j,en,k,m,flag; //解码数值和数码管显示段码转换 char code_chg(unsigned char ch) { switch(ch) { case 14:return 0; case 16:return 1; case 17:return 2; case 18:return 3; case 20:return 4; case 21:return 5; case 22:return 6; case 24:return 7; case 25:return 8; case 26:return 9; default :return 0; } } // 显示数字断码 void WriteSegData(unsigned char seg) { if(seg>16) seg = 16;
6
seg = seg_code[seg]; P0 = seg; _nop_(); _nop_(); P2 &= 0x1f; _nop_(); _nop_(); P2 |= 0xe0; } // 显示数字位码 void WriteCsData(unsigned char cs) { cs &= 0x0f; P0 = ~cs; _nop_(); _nop_(); P2 &= 0x3f; _nop_(); _nop_(); P2 |= 0xe0; } //初始化定时器 void InitTimer() { TMOD=0x20; //定时器1,工作方式2 TH1=TIMERH; //定时器高位初始化 TL1=TIMERL; //定时器低位初始化 EA=1; //允许中断 ET1=1; //定时器1开中断 // for(m=0;m<32;m++)//初始化存储二进制命令码数组 { bcode[m]=0; } } //定时器中断函数 void timer() interrupt 3 { if((P1&0x80)==0x00) //判断是否为低电位 { P1=P1&0xfe; //点亮二极管e5
7
if(count<100&&en==1)//判断是否为引导码 { count++; } else if(count>=100) //若是引导码则忽略 { en=0; count=0; } } //命令码高电位开始判断前一低电位持续时间 //若在600——800us之间,则为0 //若在1600——1900us之间,则为1 //此处定义时间段是为了抗干扰 else if(((P1&0x80)==0x80)&&en==1) { P1=P1|0x01; //若为高电位,熄灭LED灯e5 if(i<31) { if(count>30&&count<40) //若在600——800us之间,则为0 { bcode[i]=0; //储存二进制命令码 i++; //储存该位编码后,初始化 en=0; count=0; } else if(count>80&&count<95) //若在1600——1900us之间,则为1 { bcode[i]=1; i++; en=0; count=0; } } } else if(((P1&0x80)==0x80)&&en==0) //命令码之前初始化 { en=1; count=0; } else if(i==31) //接收完毕 { flag=1;
8

1mol;1.204×1024;10mol;17g;HCl;水;硝酸盐;含有氢原子的量0.2mol×3=0.6mol;

  • 鎴戞棤绾跨數涓嶆噦,绾㈠鍐欒繃51鍗曠墖鏈虹殑鏀跺彂绋嬪簭,鍙垜涓嶄細鍒朵綔閬ユ帶鍣...
    绛旓細4锛夎皟鍒舵柟寮:鑴夊璋冨埗,鐩镐綅璋冨埗锛岃剦鍐蹭綅缃皟鍒 1.2 绾㈠瑙g爜鍘熺悊 鏈浣滀笟閫夌敤鐨勬槸NEC鍗忚缂栫爜鐨勶紝鐢38K杞芥尝璋冨埗鐨勭孩澶栫紪鐮併傚熀浜51鍗曠墖鏈虹殑缂栫爜鐜锛岀紪绋嬭瑷涓篊51銆 鍘熺悊妗嗗浘濡備笅锛1.3 NEC缂栫爜鏂瑰紡 寮曞鐮侊紝16bit鐢ㄦ埛鐮侊紙鍦板潃鐮侊級锛8bit鍛戒护鐮侊紙鏁版嵁鐮侊級鍙婂叾鍙嶇爜銆1锛 寮曞鐮佺敱涓涓9ms鐨勮浇娉㈡尝褰...
  • 51鍗曠墖鏈轰腑鏃犵嚎鐢閫氫俊妯$粍鐢ㄦ潵骞蹭粈涔
    绛旓細绠鍗曡灏辨槸涓轰簡杩涜鏃犵嚎閫氫俊銆傚鏋滀綘鎸囩殑鏄崟鐗囨満鍐呴儴鐨勬棤绾挎ā鍧楋紝閭f槸鍘傚涓烘彁楂樹骇鍝侀泦鎴愬害銆佸欢闀夸骇鍝佺嚎閫傚簲甯傚満闇姹傘佺粰鐢ㄦ埛璁捐鍒涢犳柟渚胯屼笓闂ㄨ璁$殑锛屽NRF24LE1锛屼綘鍙互璇村畠鏄泦鎴愪簡51鍗曠墖鏈虹殑鏃犵嚎閫氫俊鑺墖锛屼篃鍙互璇村畠鏄泦鎴愪簡鏃犵嚎閫氫俊妯″潡鐨51鍗曠墖鏈恒傚鏋滀綘鎸囩殑鏄紑鍙戞澘銆佸疄楠屽浠朵箣绫婚厤濂楃殑鏃犵嚎閫氫俊...
  • 51鍗曠墖鏈虹湡鐨勮繃鏃朵簡鍚
    绛旓細搴旇鏉ヨ鏈夌偣杩囨椂浜嗭紝浠讳綍浜嬬墿閮芥湁鐢熷懡鍛ㄦ湡锛屽彧鑳借锛屽ぇ瀛﹁绋嬬殑寮璁句笉鏄竴姝ュ氨鑳藉埌浣嶏紝鐩墠51鍗曠墖鏈哄凡缁忕◢鏄捐繃鏃讹紝鐢变簬涓浗浣撳埗闂锛屾湁鐨勫ぇ瀛﹁佸笀涔熶笉鎯冲啀鏀诲潥鍏朵粬鐗囧瓙锛屽鏍′篃涓嶅彲鑳戒竴涓嬪瓙鎷涘埌鐔熺粌鏂版妧鏈殑鑰佸笀锛屾墍浠ュぇ瀛﹀氨涓鐩村鐨勭湅浼尖滆惤鍚庘濈殑璇剧▼锛屼絾鏄紝澶у瀛︾殑鏄柟娉曪紝瀛︾殑鏄熀纭鐞嗚锛屾湁浜...
  • 姹傜敤鍗曠墖鏈哄仛鐨鏃犵嚎鐢浼犺緭鐨勫彂灏勫拰鎺ユ敹鐢佃矾鍥,鑳借缁嗙偣灏辫缁嗙偣鍟!璺阿...
    绛旓細涓ょ偣锛岋紝1浣犳病鏈夎浣犳兂浣跨敤鐨鏃犵嚎浼犺緭妯″潡锛堟槸NRF2401??),,2:鍗曠墖鏈猴紙51锛燂級
  • 鍗曠墖鏈鏃犵嚎鐢鍙戝皠鐢佃矾?
    绛旓細杩欎釜鏄紶璇翠腑鐨315MHz鏃犵嚎鍙戝皠妯″潡鐨勭數璺紝涓庡崟鐗囨満鎺ュ彛寰堢畝鍗曪紝宸﹁竟鏍囨敞IN鐨勯偅涓鍙d笌鍗曠墖鏈篒O鍙h繛鎺ュ氨琛屼簡锛岀敤51鍗曠墖鏈虹殑P0鍙f椂瑕佸姞澶栭儴涓婃媺
  • 51鍗曠墖鏈虹殑搴旂敤鏂瑰悜?
    绛旓細3.鍦ㄥ鐢ㄧ數鍣ㄤ腑鐨勫簲鐢ㄥ彲浠ヨ繖鏍疯锛岀幇鍦ㄧ殑瀹剁敤鐢靛櫒鍩烘湰涓婇兘閲囩敤浜鍗曠墖鏈烘帶鍒讹紝浠庣數楗銆佹礂琛f満銆佺數鍐扮銆佺┖璋冩満銆佸僵鐢点佸叾浠栭煶鍝嶈棰戝櫒鏉愩佸啀鍒扮數瀛愮Г閲忚澶囷紝浜旇姳鍏棬锛屾棤鎵涓嶅湪銆4.鍦ㄨ绠楁満缃戠粶鍜岄氫俊棰嗗煙涓殑搴旂敤鐜颁唬鐨勫崟鐗囨満鏅亶鍏峰閫氫俊鎺ュ彛锛屽彲浠ュ緢鏂逛究鍦颁笌璁$畻鏈鸿繘琛屾暟鎹氫俊锛屼负鍦ㄨ绠楁満缃戠粶鍜岄...
  • 51鍗曠墖鏈轰腑鏃犵嚎鐢閫氫俊妯$粍鐢ㄦ潵骞蹭粈涔
    绛旓細浣犲ソ锛佹湁鍥剧墖娌★紝杩樻湁璇翠笅浣犳槸鍦ㄥ摢閲岀湅鍒拌繖涓瘝鐨勩傚鏋滀綘鎯抽棶鐨勬槸鏃犵嚎鐢閫氫俊妯″潡鐨勮瘽锛屼互鍚庝綘浼氬鍒板緢澶氱閫氫俊鏂瑰紡锛岃繖鏄叾涓竴涓紝鍙互鐩存帴褰撳仛涓插彛浣跨敤鐨勩傚鏈夌枒闂紝璇疯拷闂
  • 鎯宠51鍗曠墖鏈哄疄鐜颁笂缃,缃戠粶閫氳,鏈夐渶瑕佸摢浜涗笢瑗
    绛旓細涓婄綉锛熶粈涔堟儏鍐靛厔寮 浣犵洿鎺ヨ浣犳兂杈惧埌浠涔堢洰鐨 鍑犱箮涓嶅彲鑳借窡鐢佃剳閭f牱涓婄綉銆傞氳鐨勮瘽鍙互鐢ㄦ墜鏈洪氳繃钃濈墮鎴栬匴i-Fi鎺у埗鍗曠墖鏈猴紝鎴栬鏃犵嚎鐢鍜绾㈠绾裤
  • 51鍗曠墖鏈烘柊棰栧疄渚嬮潪甯稿叆闂ㄤ笌瑙嗛婕旂粌鍓嶈█
    绛旓細鏈功涓昏閽堝宸茬粡鍏峰C璇█鍩虹鐨鍗曠墖鏈虹埍濂借咃紝瀵逛簬鍒濆鑰呭彲鑳戒細鏈変竴瀹氱殑鎸戞垬銆傚湪缂栧啓杩囩▼涓紝浣滆呭弬鑰冧簡銆鏃犵嚎鐢銆嬨併婂崟鐗囨満涓庡祵鍏ュ紡绯荤粺搴旂敤銆嬬瓑璧勬簮锛屼互鍙婁簰鑱旂綉涓婄殑瀹濊吹璧勬枡锛岃櫧鐒堕儴鍒嗚祫鏂欐潵婧愪笉鏄撹拷婧紝浣嗕綔鑰呭湪姝ゅ悜鎵鏈夎祫鏂欐彁渚涜呰〃绀烘劅璋傛湰涔︾敱鍒樺缓娓呫佽淳缁博銆佹潕鍑や紵绛変汉鍏卞悓缂栬憲锛屽垬寤烘竻鍏堢敓璐熻矗...
  • 51鍗曠墖鏈虹▼搴
    绛旓細51鍗曠墖鏈轰笘鐣岋細http://www.mcu51.com/ 51鑰虫満缃戯細http://www.51erji.com/ 鏃犵嚎鐢鏉傚織锛歨ttp://www.radio.com.cn/ 鏃犵嚎鐢靛瓙锛歨ttp://win2000server.vicp.net:88/ 鏃犻檺鐢靛瓙鍒朵綔锛歨ttp://www.wxdzz.com/ 鎴戜滑鐨凙VR锛歨ttp://61.144.28.248/ouravr/index.html 鎴戠埍鍗曠墖鏈猴細http://will...
  • 扩展阅读:工地用红外线仪器 ... 红外报警器接线及安装 ... 红外线扫描仪手机版 ... 红外线报警器安装视频 ... 家用红外线报警器 ... 野外红外线热感应仪 ... 红外线人体感应探测器 ... 红外开关三线接线图 ... 红外入侵探测报警器 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网