• 大小: 12KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: 程序  

资源简介

PIC16f877解码6221红外遥控C 程序 1602显示

资源截图

代码片段和文件信息

#include        //调用头文件,可以去PICC软件下去查找PIC16F87XA单片机的头文件
__CONFIG(XT&WDTDIS&LVPDIS);    //定义配置字,晶振类型:XT,关闭开门狗,禁止低电压编程

#define RSPIN  RB5 //Data or Instrument Select
#define RWPIN  RB4 //Write or Read
#define EPIN  RB3 //6800 mode Enable single

unsigned char tmr_times;
unsigned char code_data;
unsigned char code;
unsigned char int_times;
unsigned char buf1;
bit head_ok;  
bit code_ok;
bit clrbit;

//---------------------------------------
//名称: T0初始化函数  
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20110201  
//-----------------------------------------
void init_timer0(void)
{
T0CS=0;      //TMR0工作于
PSA=1;       //TMR0不分频器 
    TMR0IF=0;    //T0中断标志位清零
    TMR0IE=1;    //T0中断允许
    TMR0=5;      //赋初值,以使T0250US中断
    GIE=1;     //开总中断
}
//---------------------------------------
//名称: 解码错误处理函数  
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20110201  
//-----------------------------------------
void wrong(void)  //如果有错误,将相应寄存器清零,准备下一次接收
{
   int_times=0;
   tmr_times=0;
   head_ok=0;
   code_data=0;  
   code_ok=0;
}
//---------------------------------------
//名称: 0或1判断函数  
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20110201  
//-----------------------------------------
unsigned char one_zero(void)
{  
//参看遥控器芯片HT6221的说明书,0编码的脉冲周期为1.12ms
//本例中,时间中断为0.25ms所以我们判定取大于0.75ms小于1.5ms的脉冲均为0编码
   if((tmr_times>3)&(tmr_times<6))
   {
     return 0;
   }
//参看遥控器芯片HT6221的说明书,1编码的脉冲周期为2.24ms
//本例中,时间中断为0.25ms所以我们判定取大于1.75ms小于2.75ms的脉冲均为0编码
   else if((tmr_times>7)&(tmr_times<11))
   {
     return 1;
   }
//如果脉冲周期不在0.75-1.5ms或者1.75-2.75ms区间的,我们认为是错码,返回2
   return 2;
}
//---------------------------------------
//名称: CCP2初始化函数  
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20110201  
//-----------------------------------------
void ccp2_int(void)
{
CCP2CON=0x04; //捕捉模式,捕捉每个下降沿
T1CON=0x00; //CCP要使用捕捉特性,T1必须运行在定时工作或者同步计数器模式下
TRISC1=1;               //RC1设置为输入状态,该引脚接到了红外接收头的数据引脚上
CCP2IF=0;               //捕捉中断标志位清零
CCP2IE=1; //该捕捉允许中断
TMR1ON=1;             //T1启动
}
//---------------------------------------
//名称: 中断处理函数  
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20110201  
//-----------------------------------------
void interrupt ISR(void)    //中断处理函数
{

   if(TMR0IF==1)           //如果是T0中断标志位为1,即250US时间到并引发中断
   {
TMR0=13;            //给TO赋初值,以便下一个循环开始
   TMR0IF=0;           //清除TO中断标志位  
   tmr_times++;     //记录中断的次数,依据此来判断接收编码的状态
   }
 if(CCP2IF==1)          //外部中断标志位如果为1,即为CCP2捕捉中断,转入处理程序
 {
CCP2IF=0;            //清除CCP2捕捉中断标志位      
GIE=0;   //全局中断关掉,以避免解码过程进入其他中断  
   int_times++;    //捕捉中断计次
   if(head_ok==0)       //如果还没接收到头码,那么先判断脉冲编码是否为头码
   {
//参看遥控器芯片HT6221的说明书,发射代码的头码由一个9ms的起始码和一个4.5ms的结果码组成
//本例中,时间中断为0.25ms所以我们判定大于12.5ms小于14.5ms的脉冲均为13.5ms的头码编码
     if

评论

共有 条评论