永发信息网

我想做个红外线遥控器 单按键 开关控制 一盏 LED的亮灭 发射机 和接收机 的用PIC16F877的单片机 .可以Pro

答案:3  悬赏:50  手机版
解决时间 2021-03-14 21:51
我想做个红外线遥控器 单按键 开关控制 一盏 LED的亮灭 .
发射机 和接收机 用的都是PIC16F877的单片机 .要求可以Proteus 仿真的
谁能设计个程序和电路 啊 或提供个思路啊. 谢谢!
最佳答案
程序:
#include
#include
#define NOP() _nop_()

#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

void delay(uchar x); //x*0.14MS
void delay1(int ms);
void beep(void);

sbit IRIN = P3^2; //红外接收器数据线
sbit RELAY= P1^4; //继电器驱动线
sbit BEEP = P1^5; //蜂鸣器驱动线

uchar IRCOM[7];

uchar cdis1[] = {" REMOTE CONTROL "};
uchar cdis2[] = {" IR-CODE: ----H"};

//LCD IO
sbit LCD_RW = P2^5;
sbit LCD_RS = P2^6;
sbit LCD_EN = P2^7;

unsigned char Y0;








bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}








void lcd_wcmd(uchar cmd)

{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}








void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}







void lcd_init()
{
delay1(15);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x38);
delay1(5);

lcd_wcmd(0x0c); //显示开,关光标
delay1(5);
lcd_wcmd(0x06); //移动光标
delay1(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay1(5);
}







void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}


main()
{
uchar m;

IE = 0x81; //允许总中断中断,使能 INT0 外部中断
TCON = 0x01; //触发方式为脉冲负边沿触发

IRIN=1; //I/O口初始化
BEEP=1;
RELAY=1;

delay1(10); //延时
lcd_init(); //初始化LCD

lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis1[m] != '\0')
{ //显示字符
lcd_wdat(cdis1[m]);
m++;
}

lcd_pos(0x40); //设置显示位置为第二行第1个字符
m = 0;
while(cdis2[m] != '\0')
{
lcd_wdat(cdis2[m]); //显示字符
m++;
}

while(1);

} //end main

void IR_IN(void) interrupt 0//外部中断服务程序
{
unsigned char j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay(1);}

for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay(1);}
while (!IRIN) //等 IR 变为高电平
{delay(1);}
while (IRIN) //计算IR高电平时长
{
delay(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}//end for k
}//end for j

if (IRCOM[2]!=~IRCOM[3])
{ EX0=1;
return; }

IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位变为低四位

if(IRCOM[5]>9)
{ IRCOM[5]=IRCOM[5]+0x37;}
else
IRCOM[5]=IRCOM[5]+0x30;

if(IRCOM[6]>9)
{ IRCOM[6]=IRCOM[6]+0x37;}
else
IRCOM[6]=IRCOM[6]+0x30;

lcd_pos(0x4b);
lcd_wdat(IRCOM[6]); //第一位数显示
lcd_pos(0x4c);
lcd_wdat(IRCOM[5]); //第二位数显示

Y0=0;
switch(IRCOM[2])
{
case 0x09: Y0=0x01; break;
case 0x1D: Y0=0x02; break;
case 0x1F: Y0=0x03; break;
case 0x0D: Y0=0x04; break;
case 0x19: Y0=0x05; break;
case 0x1B: Y0=0x06; break;
case 0x11: Y0=0x07; break;
case 0x15: Y0=0x08; break;
case 0x17: Y0=0x09; break;

case 0x13: RELAY=1; break;
case 0x14: RELAY=1; break;
case 0x51: RELAY=0; break;
}

if(Y0&0x01)RELAY=0; //打开继电器
else RELAY=1; //关闭继电器

beep();
EX0 = 1;
}


void beep(void)
{
unsigned char i;
for (i=0;i<100;i++)
{
delay(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}

void delay(unsigned char x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}


void delay1(int ms)
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
全部回答
我的小米手机能不能用
简直是浪费单片机,这还要用单片机和红外吗? 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在人生的路上我迷失了我自己 英语
西班牙语翻译koleos是什么意思
只要看到我喜欢的人开心快乐,即使得不到他,只
叠翠苑北门这个地址在什么地方,我要处理点事
孤岛余生乌戈山洞在哪
韵达快递从上海运到安徽一公斤要多少钱
港剧僵中那个蓝梦楠与不死人在荷兰酒吧唱了一
你没有用过烤炉吧,为什么说铁等器皿不能进烤
奥比岛蓝衣美人龙鱼跃龙门后变成什么龙?
江苏大丰木业地址在什么地方,想过去办事
NaH2PO4溶液中的三个守恒怎么写,原理是什么
固态有什么用,
不分昼夜的近义词是不分白昼
凤山路/解放街(路口)我想知道这个在什么地方
舟山至宁波机场大巴时间 联系电话及坐车地点
推荐资讯
求you guys和your的分别!!
梦幻西游浙江三区神仙居
联想Y510p 屏幕亮度无法调节,怎么按都没变化
吴仲村综合服务中心科技培训室地址在什么地方
香港僵尸片里的矮个子齐头发的叫什么
写小伙伴诚实的作文(800字)
黒木咖啡店怎么去啊,有知道地址的么
好心人可以告诉我你们都是在哪里看的两颗心都
楠之翼舞蹈培训中心我想知道这个在什么地方
大麦园地址在哪,我要去那里办事
丰惠源酒店在哪里啊,我有事要去这个地方
阿文这个地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?