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

📄 yk1602.lst

📁 hao da jia lai fen xiang
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   YK1602                                                               11/27/2002 10:43:45 PAGE 1   


C51 COMPILER V7.02b, 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          #include <reg51.h>
   5          #include<intrins.h>
   6          #include<absacc.h>
   7          
   8          //变量类型标识的宏定义,
   9          #define uchar unsigned char
  10          #define uint unsigned int
  11          
  12          #define DEDA 20
  13          unsigned char deda=0;
  14          // 控制引脚定义,
  15          sbit    RS      = P0^0;
  16          sbit    RW      = P0^1;
  17          sbit    Elcm    =P0^2;
  18          sbit    act=P2^1;                       /*加键*/
  19          sbit    deb=P2^0;                       /*减键*/
  20          sbit    cong=P2^2;                      /*功能键*/
  21          #define DATAPORT P1                             // 数据端口
  22          
  23          #define busy    0x80
  24          char data led6[8];/*六位显示缓冲区*/
  25          
  26          code char love[]="I LOVE YOU ";
  27          
  28          code char time[]="0123456789ABCDEF:MinHour ";
  29          unsigned char hour=0,min=0,sec=0;
  30          bit     menu=0;
  31          bit     up=0;
  32          bit     dw=0;
  33          #define temp1 DBYTE[0x50]
  34          #define temp2 DBYTE[0x51]
  35          #define temp3 DBYTE[0x52]
  36          #define temp4 DBYTE[0x53]
  37          #define temp5 DBYTE[0x54]
  38          //遥控
  39          unsigned char yt;       //中断次数
  40          bit     start=0;        //起码标志
  41          bit     h=0;            //解码标志
  42          unsigned char da=0;     //暂存数据
  43          unsigned char gt=0,gv=0;        //
  44          
  45          //
  46          void delay400ms(void);
  47          void delay5ms(void);
  48          void lcdreset( void );
  49          void WaitForEnable( void );
  50          void lcdreset(void);
  51          void lcdwrite_c( uchar CMD,uchar AttribC );
  52          void DispOneChar(uchar x,uchar y,uchar Wdata);
  53          void LocateXY( char posx,char posy);
  54          void LcdWrite_D( char dataW ) ;
  55          void    yk(void);
C51 COMPILER V7.02b   YK1602                                                               11/27/2002 10:43:45 PAGE 2   

  56          /*键盘检测*/
  57          void acct_1(void);
  58          unsigned char conh=0;                   /*功能键键值*/
  59          void key_hit(unsigned char add3);
  60          void delay(void);
  61          
  62          /*定时初始化------------*/
  63          void init_timer()
  64          {
  65   1              TMOD=0x11;
  66   1              TH0=0x4c;
  67   1              TL0=0x00;
  68   1              
  69   1              IP=0x10;
  70   1              IE=0X82;
  71   1              TR0=1;
  72   1              IT0=1;                  //边沿触发方式 
  73   1              EX0=1;                  //INT0
  74   1              
  75   1      }
  76          /*------------------------*/
  77          /*----------显示缓冲区放数子程序--------------*/
  78          void gift_in(void){
  79   1              if(conh==0){
  80   2              led6[0]=hour/10;
  81   2              led6[1]=hour%10;
  82   2              led6[2]=16;
  83   2              led6[3]=min/10;
  84   2              led6[4]=min%10;
  85   2              led6[5]=16;
  86   2              led6[6]=sec/10;
  87   2              led6[7]=sec%10;
  88   2                      }
  89   1                      else if(conh==1){
  90   2                      led6[0]=17;
  91   2                      led6[1]=18;
  92   2                      led6[2]=19;
  93   2                      led6[3]=16;
  94   2                      led6[4]=min/10;
  95   2                      led6[5]=min%10;
  96   2                      led6[6]=24;
  97   2                      led6[7]=24;
  98   2                              }
  99   1              else{
 100   2                      led6[0]=20;
 101   2                      led6[1]=21;
 102   2                      led6[2]=22;
 103   2                      led6[3]=23;
 104   2                      led6[4]=16;
 105   2                      led6[5]=hour/10;
 106   2                      led6[6]=hour%10;
 107   2                      led6[7]=24;
 108   2              
 109   2              
 110   2              }
 111   1              }
 112          /*----------时间判断子程序--------------*/
 113          
 114          conv()
 115          {       
 116   1              if(sec==60){min++;sec=0;}
 117   1              if(min==60){hour++;min=0;}
C51 COMPILER V7.02b   YK1602                                                               11/27/2002 10:43:45 PAGE 3   

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

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

 242   1              WaitForEnable();                                                        // 检测忙信号
 243   1      
 244   1              RS = 1; RW = 0; _nop_();
 245   1      
 246   1              DATAPORT = dataW; _nop_();
 247   1      
 248   1              Elcm = 1; _nop_(); _nop_(); Elcm = 0;           // 操作允许脉冲信号             
 249   1      
 250   1      }
 251          
 252          /*=======================================================
 253          正常读写操作之前必须检测LCD控制器状态:  CS=1 RS=0 RW=1
 254          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 255          ========================================================*/
 256          void WaitForEnable( void ) {

⌨️ 快捷键说明

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