51单片机红外遥控程序

51单片机红外遥控程序,第1张

#include<reg52.h>

#include<intrins.h>

#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]//数组,用于存储红外编码

uchar code table1[] = "remote control"

uchar code table2[] = "CODE:"

void delayms(uchar x)// 延时x*0.14ms

{

uchar i

while(x--)

for(i=0i<13i++){}

}

void delay(uchar x) //延时xms

{

uchar i,j

for(i=xi>0i--)

for(j=110j>0j--)

}

/****************************LCD部分***********************************************/

void write_com(uchar com)

{

lcden = 0

lcdrs = 0

lcdwr = 0

P0 = com

delay(5)

lcden = 1

delay(5)

lcden = 0 //别忘了lcden拉低

}

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//开中断

TCON = 0x01//脉冲负边沿触发

while(1)

}

/*********************红外中断**************************/

void IR_time() interrupt 0

{

uchar i,j,TimeNum=0//TimeNum用来计IR高电平次数 从而判断是0还是1

EX0 = 0//关闭中断

delayms(5)

if(1 == IR)

{

EX0 = 1

return

}

while(!IR) //跳祥余孙谨链过9ms前导低电平

delayms(1)

for(i=0i<4i++)

{

for(j=0j<8j++)

{

while(IR) //跳过4.5ms的前导高电平

delayms(1)

while(!IR) //跳毁敬过0.56ms的低电平

delayms(1)

while(IR)

{

TimeNum++//计时高电平时间从而判断读取的是0还是1

delayms(1)

}

if(TimeNum>=30)//按键按下时间过长 跳过

{

EX0 = 1

return

}

IRCOM[i] = IRCOM[i]>>1

if(TimeNum >= 8) //8*0.14ms 这时读取的是1;

{

IRCOM[i] = IRCOM[i]|0x80

}

TimeNum = 0

}

}

if(IRCOM[2]!=~IRCOM[3])//判断八位数据和八位数据反码是否相等

{

EX0 = 1

return

}

IRCOM[4] = IRCOM[2]&0x0f//取低四位

IRCOM[5] = IRCOM[2]>>4 //IRCOM[5]取IRCOM[2]高四位

if(IRCOM[4] >9) //转换成字符

{

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//重新开启外部中断

}

遥控兆闷氏精灵要连接红外设备,可以参考以下方法族散:

工具:手机、遥控精灵

步骤:

第一步:进入遥控精灵界面后,选择添加控制,就可以看见如下图所示。然后在搜索栏里搜索家里自带红外线设备的电器名字

第二步:然后会出现一个官方库,这里就是从官方数据库里导入的遥控器数据

第三步:而用户库则是其他用户添加的数据

第四步:可以自由的从官方库或者用户库里选择一个与自家设备相符合的数据来添加,点击确定即可添加罩孝成功


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12315812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存