资源简介
设计一个基于单片机的嵌入式系统,要求具备以下功能:
红外数据的接收及解码,红外发射电路
数码管的显示驱动控制
将接收到的红外数据进行实时显示(限于动态扫描方法)
请根据以上功能要求,进行硬件系统设计,编写软件程序并画出流程图。
实现:本设计利用AT89C52制作红外遥控系统,使用Keil软件编写程序,在Proteus软件中采用IRLINK模块用于接收并解调红外信号,进行程序的仿真。设计中,矩阵键盘充当遥控器,当我们按下某一个键时,经单片机识别,CPU向接有红外发射管的端口发射一定频率的脉冲,该脉冲与38KHz左右的载波脉冲进行调制,然后将已调制的脉冲进行缓冲放大,激励红外发光二极管将电能转化为光能,使得红外发光二极管发射出一定频率的红外线,当接收控制系统接收到该红外光后,由单片机内定时/计数器得到该红外光的频率,然后将该频率送往CPU,由CPU对该信号进行反编码,识别出控制信号,控制LED灯亮,蜂鸣器发声,并从数码管显示出按键值,同时示波器显示红外发射及接受端的脉冲波形,实现红外数据的接收解码与动态显示。
信号波形解码显示都没问题,LED灯和蜂鸣器设计是有点问题的,可以删掉不用不影响。
自己使用的是压缩包里第二个文件的程序,其他包里有额外的参考资料,可借鉴。

代码片段和文件信息
#include
static bit OP; //红外发射管的亮灭
static unsigned int count; //延时计数器
static unsigned int endcount; //终止延时计数
static unsigned char Flag; //红外发送标志
char iraddr1; //十六位地址的第一个字节
char iraddr2; //十六位地址的第二个字节
void SendIRdata(char p_irdata);
void delay();
char getkey()
{
P1=0xfe;P3_6=P3_7=1;P3_3=1;
if(!P1_4)return 1; //ON
if(!P1_5)return 2; //7
if(!P1_6)return 3; //8
if(!P1_7)return 4; //9
if(!P3_6)return 5; //X
if(!P3_7)return 6; //÷
P1=0xfd;
if(!P1_4)return 11; //+-
if(!P1_5)return 12; //4
if(!P1_6)return 13; //5
if(!P1_7)return 14; //6
if(!P3_6)return 15; //-
if(!P3_7)return 16; //MRC
P1=0xfb;
if(!P1_4)return 21; //%
if(!P1_5)return 22; //1
if(!P1_6)return 23; //2
if(!P1_7)return 24; //3
if(!P3_6)return 25; //+
if(!P3_7)return 26; //M-
P1=0xf7;
if(!P1_4)return 31; //□
if(!P1_5)return 32; //0
if(!P1_6)return 33; //.
if(!P1_7)return 34; //=
if(!P3_6)return 35; //+
if(!P3_7)return 36; //M+
P1=0xfF;P3_3=0;
if(!P1_4)return 41; //
if(!P1_5)return 42; //
if(!P1_6)return 43; //
if(!P1_7)return 44; //
if(!P3_6)return 45; //
if(!P3_7)return 46; //
return 0;
}
void main(void)
{
char key;
count = 0;
Flag = 0;
OP = 0;
P3_4 = 1;
EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许
P1=0xff;
TH0 = 0xFF;
TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
TR0 = 1;//开始计数
iraddr1=0xff;
iraddr2=0xff;
do{
key=getkey();
if(key==1)SendIRdata(0x12);//set
if(key==11)SendIRdata(0x0b);//exit
if(key==25||key==35)SendIRdata(0x1a);//+
if(key==15)SendIRdata(0x1e);//-
if(key==6)SendIRdata(0x0e);//↑ ÷
if(key==16)SendIRdata(0x1d);//↓ MRC
if(key==26)SendIRdata(0x1f);//← M-
if(key==36)SendIRdata(0x1b);//→ M+
if(key==32)SendIRdata(0x00);//0
if(key==22)SendIRdata(0x01);//1
if(key==23)SendIRdata(0x02);//2
if(key==24)SendIRdata(0x03);//3
if(key==12)SendIRdata(0x04);//4
if(key==13)SendIRdata(0x05);//5
if(key==14)SendIRdata(0x06);//6
if(key==2)SendIRdata(0x07);//7
if(key==3)SendIRdata(0x08);//8
if(key==4)SendIRdata(0x09);//9
if(key==21)SendIRdata(0x2A);//%
if(key==5)SendIRdata(0x2B);//X
if(key==33)SendIRdata(0x2C);//.
if(key==34)SendIRdata(0x2D);//=
if(key==31)SendIRdata(0x2E);//□
if(key==41)SendIRdata(0x2F);//
if(key==42)SendIRdata(0x30);//
if(key==43)SendIRdata(0x31);//
if(key==44)SendIRdata(0x32);//
if(key==45)SendIRdata(0x33);//
if(key==46)SendIRdata(0x34);//
}while(1);
}
//定时器0中断处理
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
count++;
}
void SendIRdata(char p_irdata)
{
int i;
char irdata=p_irdata;
//发送9ms的起始码
endcount=223;
Flag=1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 149931 2008-08-04 20:07 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\Last Loaded 红外遥控的仿真.DBK
文件 26471 2020-06-28 15:44 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\Last Loaded 红外遥控的仿真.pdsbak
文件 5196 2008-08-04 22:06 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.c
文件 10149 2008-08-04 22:06 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.LST
文件 13217 2008-08-04 22:06 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.OBJ
文件 10482 2007-11-01 21:52 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控
文件 44 2007-11-01 21:52 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.lnp
文件 12468 2007-11-01 21:52 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.M51
文件 1379 2020-06-30 08:59 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.Opt
文件 166 2008-01-15 12:19 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.plg
文件 2091 2020-06-28 10:36 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.Uv2
....... 1381 2020-06-28 21:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控_Opt.Bak
....... 1652 2008-08-04 22:53 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控_Uv2.Bak
文件 149931 2008-11-21 19:17 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.DSN
文件 328 2020-06-28 21:07 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.pdsprj.DESKTOP-EN0H7CH.DELL.workspace
文件 3463 2009-12-07 19:57 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.PWI
文件 22584 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码
文件 3779 2008-08-04 22:06 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.c
文件 7303 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.hex
文件 41 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.lnp
文件 7575 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.LST
文件 24972 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.M51
文件 14968 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.OBJ
文件 1606 2020-06-28 10:36 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.Opt
文件 189 2020-06-28 10:33 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.plg
文件 2107 2020-06-28 10:36 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.Uv2
文件 3609 2008-01-15 13:55 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.c
文件 6629 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.LST
文件 10091 2008-08-04 22:08 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.OBJ
....... 1604 2008-11-21 19:25 红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码_Opt.Bak
............此处省略136个文件信息
相关资源
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- Micrium.RTOS.1.0.0.pack
- ISE_14.7_license.lic
- stm32f103c8t6 4 oled.rar
- mpu6050+hmc5883L.rar
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 嵌入式图形界面MiniGUI的示例程序9例
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 一种红外遥控编解码仿真
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
评论
共有 条评论