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

📄 yk1602.lst

📁 遥控带液晶显示程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   YK1602                                                                03/14/2009 10:50:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE YK1602
OBJECT MODULE PLACED IN yk1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yk1602.c DEBUG OBJECTEXTEND

line level    source

   1          //遥控带液晶显示程序,已经调试完毕2008/10/30
   2          //并可显示时钟
   3          //若遥控接收不到,修改脉宽值即可
   4          //
   5          //-----------------------------------------------
   6          
   7          //-----------------------------------------------
   8          #include <reg51.h>
   9          #include<intrins.h>
  10          #include<absacc.h>
  11          
  12          //变量类型标识的宏定义,
  13          #define uchar unsigned char
  14          #define uint unsigned int
  15          
  16          #define DEDA 20
  17          unsigned char deda=0;
  18          
  19          // 1602  控制引脚定义,
  20          sbit    RS      = P0^0;
  21          sbit    RW      = P0^1;
  22          sbit    Elcm    =P0^2;
  23          #define DATAPORT P1     // 数据端口
  24          #define busy    0x80    //用于检查写忙信号
  25          
  26          
  27          //外键控制(本程序未用,现在用遥控控制)
  28          sbit    act=P2^1;                       /*加键*/
  29          sbit    deb=P2^0;                       /*减键*/
  30          sbit    cong=P2^2;                      /*功能键*/
  31          
  32          
  33          
  34          char data led6[8];/*六位显示缓冲区*/
  35          
  36          code char love[]="I LOVE YOU ";
  37          
  38          code char time[]="0123456789ABCDEF:MinHour ";
  39          
  40          unsigned char hour=0,min=0,sec=0;
  41          bit     menu=0;
  42          bit     up=0;
  43          bit     dw=0;
  44          #define temp1 DBYTE[0x50]
  45          #define temp2 DBYTE[0x51]
  46          #define temp3 DBYTE[0x52]
  47          #define temp4 DBYTE[0x53]
  48          #define temp5 DBYTE[0x54]
  49          //遥控
  50          unsigned char yt;       //中断次数
  51          bit     start=0;        //起码标志
  52          bit     h=0;            //解码标志
  53          unsigned char da=0;     //暂存数据
  54          unsigned char gt=0,gv=0;        //
  55          
C51 COMPILER V8.02   YK1602                                                                03/14/2009 10:50:20 PAGE 2   

  56          //
  57          void delay400ms(void);
  58          void delay5ms(void);
  59          void lcdreset( void );          //LCD RESET
  60          void WaitForEnable( void );     //忙信号检测
  61          
  62          void lcdwrite_c( uchar CMD,uchar AttribC );//
  63          void DispOneChar(uchar x,uchar y,uchar Wdata);//显示一个字符
  64          void LocateXY( char posx,char posy);
  65          void LcdWrite_D( char dataW ) ; //写一个数据
  66          void    yk(void);
  67          /*键盘检测*/
  68          void acct_1(void);
  69          unsigned char conh=0;                   /*功能键键值*/
  70          void key_hit(unsigned char add3);
  71          void delay(void);
  72          
  73          /*定时初始化------------*/
  74          void init_timer()
  75          {
  76   1              TMOD=0x11;
  77   1              TH0=0x4c;
  78   1              TL0=0x00;
  79   1              
  80   1              IP=0x10;
  81   1              IE=0X82;
  82   1              TR0=1;
  83   1              IT0=1;                  //边沿触发方式 
  84   1              EX0=1;                  //INT0
  85   1              
  86   1      }
  87          /*------------------------*/
  88          /*----------显示缓冲区放数子程序--------------*/
  89          void gift_in(void)
  90          {
  91   1              if(conh==0)
  92   1              {
  93   2              led6[0]=hour/10;
  94   2              led6[1]=hour%10;
  95   2              led6[2]=16;
  96   2              led6[3]=min/10;
  97   2              led6[4]=min%10;
  98   2              led6[5]=16;
  99   2              led6[6]=sec/10;
 100   2              led6[7]=sec%10;
 101   2              }
 102   1              else if(conh==1)
 103   1              {
 104   2                      led6[0]=17;
 105   2                      led6[1]=18;
 106   2                      led6[2]=19;
 107   2                      led6[3]=16;
 108   2                      led6[4]=min/10;
 109   2                      led6[5]=min%10;
 110   2                      led6[6]=24;
 111   2                      led6[7]=24;
 112   2              }
 113   1              else
 114   1              {
 115   2                      led6[0]=20;
 116   2                      led6[1]=21;
 117   2                      led6[2]=22;
C51 COMPILER V8.02   YK1602                                                                03/14/2009 10:50:20 PAGE 3   

 118   2                      led6[3]=23;
 119   2                      led6[4]=16;
 120   2                      led6[5]=hour/10;
 121   2                      led6[6]=hour%10;
 122   2                      led6[7]=24;
 123   2              
 124   2              
 125   2              }
 126   1      }
 127          /*----------时间判断子程序--------------*/
 128          
 129          conv()
 130          {       
 131   1              if(sec==60){min++;sec=0;}
 132   1              if(min==60){hour++;min=0;}
 133   1              if(hour==24) hour=0;
 134   1              
 135   1              gift_in();
 136   1      }
 137          /*-----------中断服务程序-------------*/
 138          void time8()interrupt 1 using 3
 139          {
 140   1              TH0=0x4c;
 141   1              TL0=0x00;
 142   1              
 143   1              deda++;
 144   1              if(deda==DEDA)
 145   1              {
 146   2                      sec++;deda=0;
 147   2              
 148   2              }
 149   1              conv();         
 150   1      }
 151          
 152          /*-----------送显子程序-------------*/
 153          void disp1(uchar x,uchar y)
 154           {
 155   1              unsigned char *pd;
 156   1              unsigned char*kt;
 157   1              unsigned char b;
 158   1              kt=&led6[0];                                    /*送led的首地址给指针KT*/
 159   1              for(b=0;b<8;b++)
 160   1              {                               /* 显示六位*/
 161   2               pd=&time[*kt];                                 /*查表---送要显示的码给指针pd*/
 162   2                kt++;                                         /*缓冲区加1*/
 163   2                DispOneChar(x,y,*pd);
 164   2                x++;                                          //显示位置X
 165   2              }
 166   1      }
 167          
 168          /*------------------------*/
 169          
 170          
 171          /*=======================================================
 172           显示字符串
 173          =======================================================*/
 174          void disp(uchar x,uchar y,char *ptr) 
 175          {
 176   1      uchar i,l=0;
 177   1              while (ptr[l] >31){l++;};
 178   1              for (i=0;i<l;i++) 
 179   1              {
C51 COMPILER V8.02   YK1602                                                                03/14/2009 10:50:20 PAGE 4   

 180   2                      DispOneChar(x++,y,ptr[i]);
 181   2                      if ( x == 16 )
 182   2                      {
 183   3                              x = 0; y ^= 1;
 184   3                      }
 185   2              }
 186   1      }
 187          
 188          /*=======================================================
 189           按指定位置显示数出一个字符
 190          =======================================================*/
 191          void DispOneChar(uchar x,uchar y,uchar Wdata) 
 192          {
 193   1      
 194   1              LocateXY( x, y );                       // 定位显示地址
 195   1              LcdWrite_D( Wdata );                    // 写字符
 196   1      }
 197          
 198          /*=======================================================
 199           显示光标定位
 200          =======================================================*/
 201          void LocateXY( char posx,char posy) {
 202   1      
 203   1      uchar temp;
 204   1      
 205   1              temp = posx & 0xf;
 206   1              posy &= 0x1;
 207   1              if ( posy )temp |= 0x40;
 208   1              temp |= 0x80;
 209   1              lcdwrite_c(temp,0);
 210   1      }
 211          //初始化
 212          void lcdreset(void){
 213   1              lcdwrite_c(0x38, 0);            //显示模式设置(不测试忙信号)共三次
 214   1              delay5ms();
 215   1              lcdwrite_c(0x38, 0);
 216   1              delay5ms();
 217   1              lcdwrite_c(0x38, 0);
 218   1              delay5ms();
 219   1              
 220   1              lcdwrite_c( 0x38, 1);
 221   1              lcdwrite_c( 0x08, 1);
 222   1              lcdwrite_c( 0x01, 1);
 223   1              lcdwrite_c( 0x06, 1);
 224   1              lcdwrite_c( 0x0c, 1);
 225   1              
 226   1              }
 227          
 228          
 229          
 230          /*=======================================================
 231           写控制字符子程序: E=1 RS=0 RW=0
 232          =======================================================*/
 233          void lcdwrite_c( uchar CMD,uchar AttribC ) 
 234          {
 235   1      
 236   1              if (AttribC) WaitForEnable();                           // 检测忙信号?
 237   1              
 238   1              RS = 0; RW = 0; _nop_();
 239   1      
 240   1              DATAPORT =CMD; _nop_();                                 // 送控制字子程序
 241   1              
C51 COMPILER V8.02   YK1602                                                                03/14/2009 10:50:20 PAGE 5   

 242   1              Elcm = 1;_nop_();_nop_();Elcm = 0;                      // 操作允许脉冲信号     
 243   1      }
 244                  
 245          /*=======================================================*/
 246          /*=======================================================
 247           当前位置写字符子程序: E =1 RS=1 RW=0
 248          =======================================================*/
 249          void LcdWrite_D( char dataW )
 250           {
 251   1      
 252   1              WaitForEnable();                                                        // 检测忙信号
 253   1      
 254   1              RS = 1; RW = 0; _nop_();
 255   1      
 256   1              DATAPORT = dataW; _nop_();
 257   1      
 258   1              Elcm = 1; _nop_(); _nop_(); Elcm = 0;           // 操作允许脉冲信号             
 259   1      
 260   1      }
 261          
 262          /*=======================================================
 263          正常读写操作之前必须检测LCD控制器状态:  CS=1 RS=0 RW=1
 264          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 265          ========================================================*/
 266          void WaitForEnable( void )
 267           {
 268   1      
 269   1              DATAPORT = 0xff;
 270   1      
 271   1              RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
 272   1              

⌨️ 快捷键说明

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