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

📄 keyc.lst

📁 郑州远博公司生产的单片机A型实验板原理图及配套试验源程序
💻 LST
字号:
C51 COMPILER V7.20   KEYC                                                                  02/20/2005 17:38:18 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE KEYC
OBJECT MODULE PLACED IN keyc.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE keyc.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*======YB-51-A单片机通用实验板按键和液晶屏显示演示程序===========================*/
   2          /*======程序来源:远博科技  0371-6949037  13949105551  13603453895=======================*/
   3          /*===================================================================
   4          
   5          [注]:AT89C51的晶振频率为11.0592MHz
   6          ====================================================================*/
   7          
   8          /*            ACM1602A (16x2)接线图
   9          =====================================================================
  10          连接线图:   ACM-------51     ACM-------51     ACM--------51
  11                      DB0-----P0.0     DB4-----P0.4     RS-------P1_0
  12                      DB1-----P0.1     DB5-----P0.5     RW-------P1_1
  13                      DB2-----P0.2     DB6-----P0.6     E--------P1_2
  14                      DB3-----P0.3     DB7-----P0.7     BLA------P1_3
  15                      
  16                      VLCD接1K电阻到GND
  17          
  18          ====================================================================*/
  19          /*阅读本程序之前,请参考光盘上带的LCD1602的工作原理(长沙太阳人科技公司提供)*/
  20          
  21          #include <AT89X51.H>
  22          #include <Delay.h>
  23          #include <stdio.h>
  24          #include <Intrins.h>
  25          #define uchar unsigned char
  26          #define uint  unsigned int 
  27          // 1602连线
  28          #define RS    P1_0       //数据/命令选择
  29          #define RW    P1_1       //读/写选择
  30          #define Elcm  P1_2       //使能信号
  31          #define BLA   P1_3       //液晶显示屏背光
  32          
  33          #define DataPort P0      // 数据端口
  34          #define Busy    0x80
  35          
  36          //按键定义
  37          #define  K1 P1_4
  38          #define  K2 P1_5
  39          #define  K3 P1_6 
  40          #define  K4 P1_7
  41          
  42          void WaitForEnable( void );
  43          void LcdWriteData( char dataW );
  44          void LcdWriteCommand( uchar CMD,uchar AttribC ) ;
  45          void LcdReset( void ) ;
  46          void DispOneChar(uchar x,uchar y,uchar Wdata)  ;
  47          void ePutstr(uchar x,uchar y, uchar code *ptr) ;
  48          code char examp[]="Wellcom to Ybkj  0371-6949037"; 
  49          code char examp1[]="K1 be pressed!";
  50          code char examp2[]="K2 be pressed!";
  51          code char examp3[]="K3 be pressed!";
  52          code char examp4[]="K4 be pressed!";
  53          
  54          
  55           void main(void)      {
C51 COMPILER V7.20   KEYC                                                                  02/20/2005 17:38:18 PAGE 2   

  56   1          BLA=0;                               //打开液晶显示屏背光
  57   1          LcdReset();
  58   1          ePutstr(0,0,examp);                 // 液晶屏显示一个预定字符串
  59   1              while(1)   {
  60   2              if(!K1) { DelayMs(5);               //去抖动延时
  61   3                        if(!K1)
  62   3                    { LcdReset();
  63   4                                 ePutstr(0,0,examp1); }
  64   3                               }
  65   2      
  66   2              if(!K2) { DelayMs(5);
  67   3                        if(!K2)
  68   3                    {LcdReset(); 
  69   4                                 ePutstr(0,0,examp2); }
  70   3                               }
  71   2              if(!K3) { DelayMs(5);
  72   3                        if(!K3)
  73   3                    { LcdReset();
  74   4                                  ePutstr(0,0,examp3); }
  75   3                               }
  76   2              if(!K4) { DelayMs(5);
  77   3                        if(!K4)
  78   3                    { LcdReset();
  79   4                                  ePutstr(0,0,examp4); }
  80   3                               }
  81   2       
  82   2                          }        }
  83          
  84          
  85          /*=======================================================
  86          液晶屏上显示字符串
  87          =======================================================*/
  88          void ePutstr(uchar x,uchar y, uchar code *ptr) {
  89   1      uchar i,l=0;
  90   1          while (*ptr++ >0){l++;}; //统计字符的个数
  91   1              ptr=ptr-(l+1);            //使指针重新指向首个字符
  92   1          for (i=0;i<l;i++)     { DispOneChar(x++,y,*ptr++);
  93   2                                  if ( x == 31 )  { x = 0; y ^= 0; }
  94   2                                 }
  95   1                                                      }
  96          
  97          
  98          /*=======================================================
  99          显示光标定位
 100          =======================================================*/
 101          void Disp_XY( char posx,char posy) {
 102   1      
 103   1      uchar temp;
 104   1      
 105   1          temp = posx & 0x0f;
 106   1          posy &= 0x1;   
 107   1          if ( posx>15 )   temp |= 0x40;
 108   1              if (posy==1)   temp |=0x40;
 109   1          temp |= 0x80;
 110   1          LcdWriteCommand(temp,0);
 111   1      }
 112          
 113          /*=======================================================
 114          按指定位置显示数出一个字符
 115          =======================================================*/
 116          void DispOneChar(uchar x,uchar y,uchar Wdata)  {
 117   1      
C51 COMPILER V7.20   KEYC                                                                  02/20/2005 17:38:18 PAGE 3   

 118   1          Disp_XY( x, y );                // 定位显示地址
 119   1          LcdWriteData( Wdata );            // 写字符
 120   1      }
 121          
 122          /*=======================================================
 123          初始化程序, 必须按照产品资料介绍的初始化过程进行
 124          =======================================================*/
 125          void LcdReset( void )  {
 126   1      
 127   1             LcdWriteCommand( 0x38, 0);            // 显示模式设置(不检测忙信号)
 128   1              DelayMs(10);
 129   1          LcdWriteCommand( 0x38, 0);            // 共三次
 130   1              DelayMs(10);
 131   1          LcdWriteCommand( 0x38, 0);
 132   1              DelayMs(10);
 133   1      
 134   1          LcdWriteCommand( 0x38, 1);            // 显示模式设置(以后均检测忙信号)
 135   1          LcdWriteCommand( 0x08, 1);            // 显示关闭
 136   1          LcdWriteCommand( 0x01, 1);            // 显示清屏
 137   1          LcdWriteCommand( 0x06, 1);            // 显示光标移动设置
 138   1          LcdWriteCommand( 0x0c, 1);            // 显示开及光标设置
 139   1      }
 140          
 141          /*=======================================================
 142          写控制字符子程序: E=1 RS=0 RW=0
 143          =======================================================*/
 144          void LcdWriteCommand( uchar CMD,uchar AttribC )  {
 145   1      
 146   1          if (AttribC) WaitForEnable();                // 检测忙信号?
 147   1          RS=0; RW=0; _nop_();
 148   1          DataPort=CMD; _nop_();
 149   1          // 送控制字子程序
 150   1          Elcm=1;_nop_();_nop_();Elcm=0;            // 操作允许脉冲信号
 151   1      }
 152          
 153          /*=======================================================
 154          当前位置写字符子程序: E =1 RS=1 RW=0
 155          =======================================================*/
 156          void LcdWriteData( char dataW )  {
 157   1      
 158   1          WaitForEnable();
 159   1              // 检测忙信号
 160   1      
 161   1          RS=1; RW=0; _nop_();
 162   1      
 163   1          DataPort=dataW; _nop_();
 164   1      
 165   1          Elcm=1; _nop_(); _nop_(); Elcm=0;        // 操作允许脉冲信号
 166   1      
 167   1      }
 168          
 169          /*=======================================================
 170          正常读写操作之前必须检测LCD控制器状态:    CS=1 RS=0 RW=1
 171          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 172          ========================================================*/
 173          void WaitForEnable( void ) {
 174   1      
 175   1          DataPort = 0xff;
 176   1      
 177   1          RS=0; RW=1; _nop_();    Elcm=1; _nop_(); _nop_();
 178   1      
 179   1          while( DataPort & Busy );
C51 COMPILER V7.20   KEYC                                                                  02/20/2005 17:38:18 PAGE 4   

 180   1          Elcm=0;                  
 181   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    456    ----
   CONSTANT SIZE    =     90    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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