⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shewang.lst

📁 遥控器测码 程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.09   SHEWANG                                                               04/03/2009 17:17:52 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE SHEWANG
OBJECT MODULE PLACED IN shewang.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shewang.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //晶振采用12MHz  用 自己做的双面板平台  采用扫描法
   2          //此程序经测试OK,可以放心使用,数码管与lcd1602上显示。
   3          //日期:2009-01-05   21:10
   4          //设计人:佘望胜
   5          #include<reg52.h>
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          /*uchar code Dis_Data[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,   
   9                                          0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  10          uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  //数码管的位说明 【ME500】*/
  11          //0xfe=P20  0xfd=P21   0xfb=P22  0xf7=P23  0xef=P24  0xdf=P25  0xbf=P26  0x7f=P27  数码管
  12          //的位说明 【ME500】
  13          uchar data irtab[4]={0x00,0x62,0x21,0x00};   //定义4个数组,用来存储IR码值
  14          uchar code lcd_data_list[]={"0123456789ABCDEF"};   //定义字符表
  15          uchar user[]="User Code:";    //定义字符串
  16          uchar date[]="Data Code:";    //定义字符串
  17          //uchar count_time;             //定义数码管计时用变量
  18          //extern void _nop_(void);
  19          sbit remote=P2^0;
  20          sbit beep=P2^1;
  21          sbit lcd_rs=P3^7;
  22          sbit lcd_rw=P3^6;
  23          sbit lcd_en=P3^5;
  24          void disp();
  25          //====================================================================
  26          /*delay1ms(uint h) //12mhz   刚好999us       
  27          {
  28          uint i,j;
  29          for(i=0;i<h;i++)
  30                  for(j=0;j<121;j++);
  31          }*/
  32          //====================================================================  
  33          delay100us() //12mhz   经过测试刚好100us       
  34          {
  35   1      uchar i,j;
  36   1      for(i=5;i>0;i--)
  37   1              for(j=8;j>0;j--);
  38   1      }
  39          //====================================================================  
  40          void delay_beep(uchar k)      
  41          {
  42   1      uchar i,j;                                       // 12MHz   //j=41,经过测试刚好是101us
  43   1      for(i=k;i>0;i--)
  44   1              for(j=10;j>0;j--);
  45   1      }
  46          //=====================================================================
  47          void delay_lcd(uchar k)      
  48          {
  49   1      uchar i,j;                                       // 12MHz   //j=41,经过测试刚好是101us
  50   1      for(i=k;i>0;i--)
  51   1              for(j=41;j>0;j--);
  52   1      }
  53          //====================================================================
  54          void Sound()
  55          {
C51 COMPILER V8.09   SHEWANG                                                               04/03/2009 17:17:52 PAGE 2   

  56   1      uint k;
  57   1              for (k=120;k>0;k--)         //此k的数值越大,声音就会越响
  58   1              {
  59   2              beep=~beep;
  60   2              delay_beep(6);     //此延时里面的数越大,声音就会持续越长
  61   2              }
  62   1      } 
  63          //===========读32个码值 初始化=========================================                      
  64          read_remote()
  65          {
  66   1      uchar s,q,k,count;
  67   1              if(remote==0)
  68   1              {
  69   2                      for(k=85;k>0;k--)                //100us重复85次,测得时间8.926ms
  70   2                              {
  71   3                              delay100us();       
  72   3                              if(remote==1){return;}     //再来判断ir是否为低电平,如果是低电平就执行下面的语句         
  73   3                              }
  74   2                      while(!remote);             //等待4.5ms的高电平
  75   2                      for(k=23;k>0;k--)       //100us重复23次,测得时间2.416ms
  76   2                              {
  77   3                              delay100us();
  78   3                              if(remote==0){return;}          
  79   3                              }       
  80   2                      for(k=15;k>0;k--)     //100us重复16次,测得时间1.681ms
  81   2                              {                                 //100us重复15次,测得时间1.561ms
  82   3                              delay100us();         
  83   3                              if(remote==0){return;}   //再判断ir是不是等于0,是就跳出。如果不是就进入while(ir)处进行等待用户码的到了
  84   3                              }
  85   2                      while(remote); //等待0
  86   2              //===================================开始读32个码====================== 
  87   2                      for(s=0;s<4;s++)      //循环4次读完客户码,客户反吗;数据码,数据反码。
  88   2                      {
  89   3                              for(q=0;q<8;q++)  //8位为一个字节
  90   3                              {
  91   4                              while(!remote);       //等待4.5ms的高电平
  92   4                              for(k=9;k>0;k--)         //100us重复9次,测得时间928us
  93   4                                      {                                //100us重复8次,测得时间825us
  94   5                                      delay100us();  
  95   5                                      }       
  96   4                              if(remote==1)         //判断ir是不是为高电平
  97   4                                      {
  98   5                                      for(k=10;k>0;k--)         //100us重复10次,测得时间1.031ms
  99   5                                      {                                         //100us重复11次,测得时间1.134ms
 100   6                                      delay100us();   
 101   6                                      }
 102   5                                      count=count>>1;
 103   5                                      count=count|0x80;
 104   5                                      }
 105   4                              else count=count>>1;
 106   4                              }
 107   3                              irtab[s]=count;
 108   3                              count=0;        
 109   3                      }        //========================读完了32个码=================================
 110   2              if(irtab[0] != ~irtab[1] && irtab[2] != ~irtab[3]){return;}   //核对有没有读到用户误码与数据误码
 111   2              disp();     //解码成功后刷新LCD屏
 112   2              Sound();    //解码成功后蜂鸣器会响一下
 113   2              }
 114   1      }              //=========================读码完全结束======================         
 115          //===============================================数码管初始化=============================================
             -===
 116          /*void initial()      //初始化
C51 COMPILER V8.09   SHEWANG                                                               04/03/2009 17:17:52 PAGE 3   

 117          {
 118          EA=1;
 119          ET1=1;
 120          TMOD=0x10;        //t1方式1
 121          TH1=(65536-5000)/256;
 122          TL1=(65536-5000)%256;
 123          TR1=1;
 124          }
 125          //===================================================数码管中断===========================================
             -=====
 126          void time() interrupt 3
 127          {
 128          TH1=(65536-1000)/256;
 129          TL1=(65536-1000)%256;
 130          count_time++;    //用来数码管计时用的
 131                                  switch(count_time)
 132                          {
 133                          case 1: P0=Dis_Data[irtab[3]%16];       //显示数据反码
 134                                          P2=wei[7];                      //数码管的个位
 135                                          break;
 136                          case 2: P0=Dis_Data[irtab[3]/16];       //显示数据反码
 137                                          P2=wei[6];                      //数码管的十位
 138                                          break;
 139                          case 3: P0=Dis_Data[irtab[2]%16];       //显示数据码

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -