找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+LCD12864红外波形显示程序与原理图

  [复制链接]
跳转到指定楼层
楼主
制作出来的实物图如下:


电路原理图如下:


单片机源程序如下:
uchar IRcode[6];                        //48位的键代码
uchar Total;                            //接收到的计数
#define IRMAX 108
uint  xdata IRcodeTime[IRMAX];         
uchar xdata IRgraph[16];
uchar xdata IRgrapl[16];  
uint  xdata DispTime[2];                     
uchar ST;                              
sbit  IRsignal=P3^2;


//采用定时中断计时。当外部中断电平由高变低时中断响应,读取定时器的时间值并保存,//然后等待外部中断电平变高,再读取定时器的值并保存。如此循环。直到定时器溢出3次
//后(>180ms)则本次接收结束。通过设定的参数,对本次接收到的时间进行分析解码。

void IR_ISR(void) interrupt 0 using 1
{               
   TR0=0;
   if(Total<IRMAX)                     //取低电平时间
   IRcodeTime[Total++]= TH0*256+TL0;
   TH0 = 0;
   TL0 = 0;
   TR0=1;
   while(!IRsignal);                   //等待电平变高                    
   TR0=0;
   if(Total<IRMAX)                     //取高电平时间
   IRcodeTime[Total++]= TH0*256+TL0;
   TH0 = 0;
   TL0 = 0;
   TR0=1;
        TR2=0;
}

void Timer0_ISR() interrupt 1 using 3  
{
   if(++ST>3)  //延时大于180ms接收停止结束
   {
      TR0=0;
      TH0=0x00;
      TL0=0x00;
                TR2=1;
   }
}




//IRgraph IRgraplg两数组的一位对应一个像素点,高电平为显示,低电平不显示
void Time_Graph(void)  //时间换波图形
{
uchar i,j,or;
uint mult;   
  if(Grp.Mult)         //Grp.Mult 为显示比例
        mult=Grp.Mult * 50;
  else
        mult=10;
  for(i=Grp.Max;i<IRMAX;i++)
  {
       IRcodeTime[ i]=0;
  }
  if(Grp.Wab>(Grp.Max>>1))
                  Grp.Wab=0;
  or=Grp.Wab * 2 + 1;
  for(i = 0; i < 16; i++)  
  {
     IRgraph[ i]=0x00;
          IRgrapl[ i]=0x00;
  }
  DispTime[0]=IRcodeTime[or];    //本次显示波形的起始时间
  DispTime[1]=IRcodeTime[or+1];
  for(i = 0;i < 128;)
  {
        if(Grp.Max > or)
                         j = IRcodeTime[or++] / mult;         
        else
             break;
                if(j<2)j = 2;
                while(j-- && i<128)
                {
                    IRgraph[i / 8] |= 0x80 >> (i % 8);
                      i++;
                }
                if(i < 128)
                    IRgraph[i / 8] |= 0x80 >> (i % 8);
                if(Grp.Max>or)
                         j = IRcodeTime[or++]  / mult;
        else
             break;         
                if(j<2)j = 2;
                while(j-- && i<128)
                {
                    IRgrapl[i / 8] |= 0x80 >> (i % 8);
                      i++;
                }
                 if(i < 128)
               IRgrapl[i / 8] |= 0x80 >> (i % 8);  
  }
  IRgrapl[0] |= 0x80;
  for(i=127;i>0;i--)        //没显示的部分全显示低
  {
    if(!(IRgraph[i / 8] & (0x80 >> (i % 8))))
              IRgrapl[i / 8] |= 0x80 >> (i % 8);
         else
         {
              if(i!=127)IRgrapl[i / 8] |= 0x80 >> (i % 8);
                        break;
         }
  }
}

全部资料51hei下载地址:
源程序.rar (98.76 KB, 下载次数: 82)
原理图.7z (39.21 KB, 下载次数: 55)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:635039 发表于 2021-9-10 11:26 | 只看该作者
请问一下12864用的是ST7920吗,为什么我把程序写进出没有显示
回复

使用道具 举报

板凳
ID:796012 发表于 2023-3-5 15:02 | 只看该作者
winsin 发表于 2021-9-10 11:26
请问一下12864用的是ST7920吗,为什么我把程序写进出没有显示

有10个警告不知道是什么
回复

使用道具 举报

地板
ID:1065325 发表于 2023-3-5 22:01 | 只看该作者
这个是用ad画的吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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