本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
我做的是一个四按键的红外发射 下面是程序 可是老是有错误 请给位高手帮忙哈 这是我的毕业设计
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit irout;//红外管状态
sbit ir=P3^5;//红外发射管控制脚
uint count, m;
bit flag,keyflag;//红外发送标志,按键标志位
//uchar irsys[4]={0x1a,0xa1,0xdc,0x03};//26位系统码,最后一个字节只用2位
uchar ircode;
/**********************************************
延时1ms
***********************************************/
void delay1ms(uint t)//延时1ms,晶振12M
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
/**********************************************
按键扫描
**********************************************/
void keywork(void)
{
void delay1ms(10);
unsigned char key;
unsigned char kbscan();
while(1)
{ key=kbscan(); //键盘扫描函数
delay1ms(10); //健消除抖动的延时函数
}
unsigned char kbscan();
{
unsigned char sccode,recode;
P0=0x0c; //发全"0"行扫描,列线输入
if((P0&0x0c)!=0x0c) //有键按下
{ delay10ms(); //延时去抖动
if((P0&0x0c)!=0x0c)
{ sccode =0x0e; //逐行扫描初值
while((sccode&0x04)!=0)/*不到最后一行循环*/
{
P0=sccode; //输出行扫描码
if((P0&0x0c)!=0x0c) //本行有键按下
{ sccode=(P0&0x0c)&0x03;
return((sccode)+(recode)); //返回特征码
}
else
sccode=(sccode<<1)|0x01; //行扫描码左移一位
}
}
}
return (0); //无键按下,返回0
}
/*******************************************
发射函数
*******************************************/
sendcode()
{
ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;ir=0;
for(m=key;m>0;m--)
{
delay1ms(1);
ET1=1;TR1=1;delay1ms(3);ET1=O;TR1=0;ir=0;
}
delay1ms(10);
}
/*******************************************
定时器初始化
*******************************************/
void init_timer()
{
EA=1;
TMOD=0X20;//8位自动重载模式
ET1=1; TR1=1;
TH1=0Xf3;//定时26us,38K红外波,晶振12m
TL1=0Xf3;
}
/*******************************************
主函数
*******************************************/
main()
{
init_timer();
count=0;
flag=0;
irout=1;
while(1)
{
keywork();
if(keyflag)//若有新按键
{
delay1ms(10);
sendcode();//发送红外编码
delay1ms(500);
keyflag=0;//按键标志清零
}
}
}
/*******************************************
定时器中断
*******************************************/
void timer1(void) interrupt 3
{ count++;
if(flag==1)
{ irout=~irout;
}
else
{
irout=1;
}
ir=irout;
} |