资源简介
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
- 上一篇:模拟退火遗传算法 源程序
- 下一篇:lenet_mnist_model.pth
相关资源
- 模拟退火遗传算法 源程序
- 基于MVC模式的扫雷游戏
- SJE金牌磁条读写器驱动程序
- wxappUnpacker-master.zip
- 单摆RBF神经网络建模程序
- QT3显示图片小程序
- 703N USB打印机程序版本15-18.zip
- 9个DSP图像处理实验程序图像处理源代
- labview PID控制程序增量PID温度测量
- 试题及答案合集
- adc0808简单的实验用lcd1602显示电压有仿
- MIPS的汇编器,将MIPS汇编程序生成二进
- 一个小时钟汇编程序可以计时、校时
- 模拟I2C程序 slave 接收
- MCS-51单片机Gps接收程序
- 6713的程序固化和flash引导
- 检查堆内存 踩内存,内存重复释放
- STM32 两轮平衡车 程序 获取姿态传感器
- MSP430F149单片机对继电器的控制程序和
- 微信小程序Demo: 商城仿京东商城
- 微信小程序Demo:悦读神器
- 微信小程序Demo:问答小程序
- 信小程序Demo:喜乐茶铺商城类小程序
- 微信小程序Demo:新闻爆料
- 微信小程序Demo:汇率计算器
- 企业招聘小程序Minihr
- 微信小程序Demo:天气预报
- 微信小程序Demo:任务清单
- 小程序canvas生成海报保存到相册
- discuz转小程序亲测可用非minibbs
评论
共有 条评论