完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*
* EV1527解码程序:单片机PIC12F675,内部4MHz,EV1527发射频率315MHz,振荡电阻430K,遥控器供电电压DC12V,周期为1.99ms。 */ #include __CONFIG(0x14); __EEPROM_DATA(0x02,0xff,0xff,0xff,0xff,0xff,0xff,0xff); #define uchar unsigned char #define uint unsigned int #define rfin GPIO0 //RF输入 #define KEY GPIO3 //按键 #define JMP GPIO4 //跳线 #define LED GPIO5 //LED //标志位声明 bit learnf; bit fun_out; bit fun_ok; bit relay_out; //记时间变量 uint temp0=0; uint temp1=0; //RF接收变量 uchar rec_count; uchar lo_buf; uchar hi_buf; uchar cs2; uchar cs1; uchar cs0; //RF接收标志 bit rfstart1; bit rfstart; bit rfok;//接收成功 bit rf_er;//接收失败 //---------------------------------延时----------------------------// void delay(uchar ms) { uint i,j; for(i=0;i } //--------------------------------- LED闪烁----------------------------// void LED_LONG(uchar time) //闪烁和周期1s { uchar j; for(j=0;j { LED=1; delay(1000); LED=0; delay(500); } } //--------------------------------- LED闪烁----------------------------// void LED_FLASH(uchar time) //闪烁和周期1s { uchar j; for(j=0;j { LED=1; delay(200); LED=0; delay(200); } } //--------------------------------- LED快闪烁----------------------------// void LED_QFLASH(uchar time) //闪烁和周期1s { uchar j; for(j=0;j { LED=1; delay(50); LED=0; delay(50); } } //--------------------------------- 擦除EEPROM---------------------------// C_EEPROM(void) { uchar i,b=0xff; for(i=0;i<=127;i++){EEPROM_WRITE(i=i,b);} EEPROM_WRITE(0,2); } //--------------------------------- 保存用户码----------------------------// void save_learn(void) { uchar i,j; TMR1IE=0; i=EEPROM_READ(0); EEPROM_WRITE(i,cs2); i++; EEPROM_WRITE(i,cs1); i++; j=(cs0&0xf0); EEPROM_WRITE(i,j); if(i==127) i=1; i++; EEPROM_WRITE(0,i); delay(2); TMR1IE=1; } //--------------------------------- 外部中断服务----------------------------// void interrupt all(void) { GIE=0; temp0++; if(TMR1IF==1) { TMR1IF=0;//清中断标志位 TMR1H=0xff; TMR1L=0xaa; //RF接受程序 if(rfin==1) { if(rfstart1==1)//是否找到同步头?如果找到同步头就由低到高开始接收 { if(lo_buf>hi_buf)//判断是否低电平 { if(lo_buf>=8&&lo_buf<=12&&hi_buf>=3&&hi_buf<=4) { rec_count++;//是低电平 cs0<<=1;//左移动一位 } else rf_er=1;//接收失败 } else if(lo_buf if(lo_buf>=3&&lo_buf<=4&&hi_buf>=8&&hi_buf<=12)//判断高电平是否大于900us和低电平大于200us { rec_count++;//是高电平 cs0<<=1;//移动一位 cs0++; } else rf_er=1; } else if(lo_buf==hi_buf) rf_er=1; //高低电平周期相等,接收错误 if(rf_er==1) { rfstart=0;//接收失败 rec_count=0; rfok=0; } else { if(rec_count==8){cs2=cs0;} else if(rec_count==16){cs1=cs0;} } if(rec_count==24) rfok=1;//接收成功了 hi_buf=0; } //if(rfstart1==1)函数结尾 else if(lo_buf>=30&&lo_buf<=120)//判断同步头 { rfstart=1;//检测到正确的同步头 rec_count=0;//接收位数,清除0 } hi_buf++; lo_buf=0; rfstart1=0; rf_er=0;//接收失败标志 } else { lo_buf++; //输入端口为低电 if(rfstart==1) rfstart1=1; //开始接收标志 else hi_buf=0; } } GIE=1; } void scan() { if(KEY==0) { delay(10); if(KEY==0) { while(!KEY) { LED_LONG(15); if(rfok==1) { LED_QFLASH(3); GIE=1; if(cs0&0x01) { save_learn(); LED_FLASH(3); GIE=1; //return; } } } } end:; } } //--------------------------------- 初始化函数----------------------------// void init() { CMCON=0X07; ANSEL=0x00; TRISIO=0x19; GIE=0; TMR1IF=0; PEIE=1; TMR1IE=1; TMR1ON=1; TMR1H=0xff; TMR1L=0xaa; GIE=1; GPPU=0; WPU=0xff; LED=0; } //--------------------------------- 主函数----------------------------// void main() { init(); while(temp0<20000) //学习或擦除 { if(rfok) { if(cs0&0x01) //学习 { save_learn(); LED_QFLASH(3); break; } else if(cs0&0x02)//擦除 { C_EEPROM(); LED_FLASH(5); } } } while(1) { scan(); uchar sw; if(rfok==1) //接收完成,开始将接收到的用户码同学习到储存在EEPROM中的用户码对比 { uchar i=2,j,k,l,m; for(m=0;m<16;m++) //循环对比42次 { j=EEPROM_READ(i); i++; k=EEPROM_READ(i); i++; l=EEPROM_READ(i); i++; if(j==cs2&&k==cs1&&(l==(cs0&0xf0))) {sw=1;break;} //对比结果相同 else sw=0; //对比结果不相同 } if(sw==1) { if(cs0&0x04) LED=1; } } } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2084 浏览 1 评论
3629 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2336 浏览 2 评论
2763 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4027 浏览 5 评论
973浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6360浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:44 , Processed in 0.649776 second(s), Total 98, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号