红外遥控解码与波形显示介绍:
本硬件电路设计采用一片STC89C52作解码主控芯片,红外接收采用一体红外接收,LCD12864用作显示,5个独立按键为参数设置键,并用24c02作参数存储器。
实现功能:
1.显示遥控解码的编码。通过参数设置菜单设置,可最多显示6字节(48位)遥控编码数据。
2.可对大部分红外遥控发射芯片进行解码,解码方式及解码所用到的参数由菜单设置。程序内置15种编码型号的参数,只需选择型号。另外预留5种自定义供用户设置。(15种波形解码的参数,已在表1列出,其的型号的可参照表1进行设置)。
3.接收的红外波,可按比例缩放(可按键设置1~9 * 50us/象素点或10us/象素点,不足一象素点按一象素点显示)显示波形并可显示当前显示波段第一个周期波的时间,显示的起始波段可按键设置。
4.利用24c02作存储器,对改变过的参数进行存储,确保参数掉电不丢失。
软件设计框图:
程序部分展示,有中文注释,新手容易看懂
void init_lcd(void) //液晶初始化
{
wr_i_lcd(0x06); //光标的移动方向
wr_i_lcd(0x0c); //开显示,关游标
wr_i_lcd(0x30);
wr_i_lcd(0x01);
}
//对液晶写数据
//content为要写入的数据
void wr_d_lcd(unsigned char content)
{
busy_lcd();
rs=1;
rw=0;
lcddata=content;
e=1;
;
e=0;
}
//对液晶写指令
//content为要写入的指令代码
void wr_i_lcd(unsigned char content)
{
busy_lcd();
rs=0;
rw=0;
lcddata=content;
e=1;
;
e=0;
}
//液晶检测忙状态
//在写入之前必须执行
void busy_lcd(void)
{
lcddata=0xff;
rs=0;
rw=1;
e =1;
while(busy==1);
e =0;
}
//指定要显示字符的坐标
void gotoxy(unsigned char y, unsigned char x)
{
if(y==0)
wr_i_lcd(0x80|x);
if(y==1)
wr_i_lcd(0x90|x);
if(y==2)
wr_i_lcd(0x88|x);
if(y==3)
wr_i_lcd(0x98|x);
}
//显示字符串程序
void print(unsigned char *str)
{
while(*str!='\0')
{
wr_d_lcd(*str++);
}
}
//显示十进制数字程序
void show_dec(unsigned int dat,unsigned char stu)
{
unsigned char n;
if(dat < 10)
n = 5;
else if(dat < 100)
n = 4;
else if(dat < 1000)
n = 3;
else if(dat < 10000)
n = 2;
else
n=1;
if(stu > (6 - n))
stu -= 6 - n;
else
stu = 0;
switch(n)
{
case 1:wr_d_lcd(dat / 10000 + 0x30);dat %= 10000;
case 2:wr_d_lcd(dat / 1000 + 0x30);dat %= 1000;
case 3:wr_d_lcd(dat / 100 + 0x30);dat %= 100;
case 4:wr_d_lcd(dat / 10 + 0x30);dat %= 10;
case 5:wr_d_lcd(dat + 0x30);break;