找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10489|回复: 38
打印 上一主题 下一主题
收起左侧

红外遥控器解码程序1602和12864都能显示

  [复制链接]
跳转到指定楼层
楼主
ID:66729 发表于 2014-11-16 18:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  这个红外遥控器解码程序原来是用1602显示的,后来我换成12864也能正常用了,因为我没有1602。。呵呵。。

红外解码1602液晶显示.rar

28.85 KB, 下载次数: 281, 下载积分: 黑币 -5

评分

参与人数 1黑币 +10 收起 理由
红尘有你 + 10 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:66729 发表于 2015-10-8 18:48 | 只看该作者
大家看一下这个,应该是最初没改动过的源码

25.红外解码1602液晶显示.rar

24.3 KB, 下载次数: 45, 下载积分: 黑币 -5

源码

回复

使用道具 举报

板凳
ID:51088 发表于 2014-11-16 19:31 来自手机 | 只看该作者
太牛了能同时兼容这两种液晶屏吗
回复

使用道具 举报

地板
ID:66729 发表于 2014-11-16 22:07 | 只看该作者
jiege 发表于 2014-11-16 19:31
太牛了能同时兼容这两种液晶屏吗

可以的,这个是我买的开发板上的配夽程序:/********************************************************************************
*         描述:                                                                 *
*         lcd1602显示 遥控键值读取器                                            *
*         lcd1602显示 遥控器接p3.3                                              *
*         喇叭接p3.6                                                            *
*         连接方法:使用红外功能时 J1跳线短接                                   *
********************************************************************************/

#include <reg51.h>
#include <intrins.h>

#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();

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

uchar IRCOM[7];

sbit LCD_RS = P2^3;            
sbit LCD_RW = P2^4;
sbit LCD_EN = P2^5;

uchar code  cdis1[ ] = {" Red Control "};
uchar code  cdis2[ ] = {"  IR-CODE: --H  "};

/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/

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

/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/

void lcd_wcmd(uchar cmd)

{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
   // cmd = ((cmd&0x01)<<7)|((cmd&0x02)<<5)|((cmd&0x04)<<3)|((cmd&0x08)<<1)|((cmd&0x10)>>1)|((cmd&0x20)>>3)|((cmd&0x40)>>5)|((cmd&0x80)>>7);
    P0 = cmd;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;  
}

/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/

void lcd_wdat(uchar dat)
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
//        dat = ((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
    P0 = dat;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}

/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/

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;
   
    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++;
     }


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

   while(1)        ;

} //end main
/**********************************************************/
void IR_IN() interrupt 2 using 0
{
  unsigned char j,k,N=0;
     EX1 = 0;   
         delay(15);
         if (IRIN==1)
     { EX1 =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)
         { EX1=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])
   { EX1=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]);        //第二位数显示

     beep();
     EX1 = 1;
}

/**********************************************************/
void beep()
{
  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_();
  }
}
}
回复

使用道具 举报

5#
ID:69215 发表于 2014-11-25 01:58 | 只看该作者
非常感谢!
回复

使用道具 举报

6#
ID:69215 发表于 2014-11-25 01:58 | 只看该作者
非常感谢!
回复

使用道具 举报

7#
ID:69215 发表于 2014-11-25 02:02 | 只看该作者
非常感谢!
回复

使用道具 举报

8#
ID:69215 发表于 2014-11-25 02:05 | 只看该作者
很好  学习 谢谢
回复

使用道具 举报

9#
ID:69215 发表于 2014-11-25 02:06 | 只看该作者
很好  学习 谢谢
回复

使用道具 举报

10#
ID:34185 发表于 2014-11-30 07:12 | 只看该作者
很好  学习 谢谢
回复

使用道具 举报

11#
ID:70104 发表于 2014-12-20 13:03 | 只看该作者
学习了~~~~~~
回复

使用道具 举报

12#
ID:70104 发表于 2014-12-20 13:14 | 只看该作者
学习了~~~~~~
回复

使用道具 举报

13#
ID:70769 发表于 2014-12-21 04:58 | 只看该作者
很好,正需要
回复

使用道具 举报

14#
ID:60811 发表于 2014-12-21 10:40 | 只看该作者
非常感谢!
回复

使用道具 举报

15#
ID:67573 发表于 2014-12-24 15:41 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

16#
ID:70330 发表于 2015-1-4 13:35 | 只看该作者
请问:在AT89S52上带1602调试通过,但拆除1602,就不响应了,什么原因呢?
回复

使用道具 举报

17#
ID:70330 发表于 2015-1-4 13:37 | 只看该作者
并且把1602的驱动也屏蔽了,继电器再也不动作了,继电器没坏,恢复1602的驱动就好使
回复

使用道具 举报

18#
ID:70330 发表于 2015-1-4 13:37 | 只看该作者
拆除1602的程序,再别的好的单片机上,继电器也不动作,为什么呢?调了3天,也没找到原因
回复

使用道具 举报

19#
ID:70330 发表于 2015-1-4 13:50 | 只看该作者
请问,你的开发板是哪一款?
回复

使用道具 举报

20#
ID:70330 发表于 2015-1-4 13:50 | 只看该作者
给个淘宝链接也行,谢谢!
回复

使用道具 举报

21#
ID:62145 发表于 2015-2-2 12:21 | 只看该作者
看看。。。。。。。
回复

使用道具 举报

22#
ID:29438 发表于 2015-2-3 13:18 | 只看该作者
学习了,谢谢!
回复

使用道具 举报

23#
ID:72047 发表于 2015-3-10 22:08 | 只看该作者
不錯,學習學習
回复

使用道具 举报

24#
ID:54731 发表于 2015-3-23 16:37 | 只看该作者
C:\Users\Administrator\Downloads\HS0038B测试1602显示\HS0038B测试1602显示\IRSEG.C(1): error C318: can't open file 'C:\Users\Administrator\Downloads\HS0038B测试1602显示\HS0038B测试1602显示\IRSEG.C'
回复

使用道具 举报

25#
ID:29438 发表于 2015-3-24 11:53 | 只看该作者
好东西,学习了。
回复

使用道具 举报

26#
ID:76268 发表于 2015-4-6 20:08 | 只看该作者
很好  学习 谢谢
回复

使用道具 举报

27#
ID:77496 发表于 2015-5-10 12:00 | 只看该作者
你好  我在网上看到你的帖子http://www.51hei.com/bbs/dpj-28635-1.html关于红外线解码的  我在编译的时候遇到了问题   主要是IRSG.c文件没有一起发给我们   导致出现了C:\Users\Administrator\Downloads\HS0038B测试1602显示\HS0038B测试1602显示\IRSEG.C(1): error C318: can't open file 'C:\Users\Administrator\Downloads\HS0038B测试1602显示\HS0038B测试1602显示\IRSEG.C'这样的错误  无法编译下去了  能不能帮忙把这个文件发给我啊    我学单片机快一年了  也有不少资料可以送给你作参考  最近想做遥控这一方面的  希望你能帮我一下  我叫王鹏
回复

使用道具 举报

28#
ID:63041 发表于 2015-7-15 20:45 来自手机 | 只看该作者
jiege 发表于 2014-11-16 19:31
太牛了能同时兼容这两种液晶屏吗

太牛了!!
回复

使用道具 举报

29#
ID:66729 发表于 2015-10-8 18:50 | 只看该作者
xsynet 发表于 2015-1-4 13:35
请问:在AT89S52上带1602调试通过,但拆除1602,就不响应了,什么原因呢?

拆除1602,,没有屏了,怎么显示?这个肯定和数码管显示不兼容的
回复

使用道具 举报

30#
ID:66729 发表于 2015-10-8 18:54 | 只看该作者
单片机开发板的原理图和说明

1-原理图和说明.rar

257.96 KB, 下载次数: 12, 下载积分: 黑币 -5

回复

使用道具 举报

31#
ID:96762 发表于 2015-11-22 22:20 | 只看该作者
学习一下
回复

使用道具 举报

32#
ID:51128 发表于 2015-12-20 23:26 | 只看该作者
好帖子,学习了
回复

使用道具 举报

33#
ID:102568 发表于 2016-1-9 20:56 | 只看该作者
来看下最近在做 课程设计
回复

使用道具 举报

34#
ID:102578 发表于 2016-1-9 21:54 | 只看该作者
刚来论坛!学习中!
回复

使用道具 举报

35#
ID:112865 发表于 2016-4-21 18:11 | 只看该作者
非常感谢
回复

使用道具 举报

36#
ID:116231 发表于 2016-4-23 21:57 | 只看该作者
谁有串口接收显示程序
回复

使用道具 举报

37#
ID:124447 发表于 2016-6-1 13:24 | 只看该作者
谢谢楼主!!!!!!!!!!!!!!!!!
回复

使用道具 举报

38#
ID:125417 发表于 2016-6-6 12:51 | 只看该作者
谢谢楼主
回复

使用道具 举报

39#
ID:197937 发表于 2017-5-16 19:40 | 只看该作者
如果让红外遥控做算法加上语音模块????能用这个改到实现吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表