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

📄 yk1602.lst

📁 内含LCD驱动源代码大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   YK1602                                                                09/08/2006 10:12:13 PAGE 1   


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

stmt level    source

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

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

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

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

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

⌨️ 快捷键说明

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