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

📄 daxianshi.lst

📁 实现DA0832在LCD1602显示数值
💻 LST
字号:
C51 COMPILER V8.02   DAXIANSHI                                                             03/05/2009 16:01:55 PAGE 1   


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

line level    source

   1          #include<stdio.h>
   2          #include<reg51.h>
   3          #include<intrins.h>
   4          #include <absacc.h>
   5          
   6          #define uchar unsigned char
   7          #define LCD_DATA P0  //数据口  
   8          #define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位
   9          
  10          //输入方式设置
  11          #define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一
  12          #define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一
  13          #define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移
  14          #define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动
  15          
  16          //设置显示、光标及闪烁开、关
  17          #define LCD_DISPLAY_ON 0x0C //显示开
  18          #define LCD_DISPLAY_OFF 0x08 //显示关
  19          #define LCD_CURSOR_ON 0x0A //光标显示
  20          #define LCD_CURSOR_OFF 0x08 //光标不显示
  21          #define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁
  22          #define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁
  23          
  24          //光标、画面移动,不影响DDRAM
  25          #define LCD_LEFT_MOVE 0x18 //LCD显示左移一位
  26          #define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位
  27          #define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位
  28          #define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位
  29          
  30          //工作方式设置
  31          #define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示
  32          #define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示
  33          
  34          sbit LCD_BUSY=P0^7;      //忙标志位
  35          sbit LCD_RS=P3^7;                //LCD寄存器
  36          sbit LCD_RW=P3^6;                //LCD读写
  37          sbit LCD_EN=P2^6;                //LCD使能
  38          sbit RW=P3^6;
  39          sbit DA=P2^5;
  40          
  41          //定义变量
  42          uchar XPOS,YPOS;
  43          uchar Tens[2]={0x01,0x02};
  44          uchar counter;
  45          uchar Later=0;
  46          uchar out;
  47          uchar DAzhi[];
  48          
  49          /*********************************************
  50          涵数名称:  Delay()
  51          涵数功能:  延时
  52          入口参数:  Void
  53          出口参数:  Void
  54          *********************************************/
  55          void Delay(int number)
C51 COMPILER V8.02   DAXIANSHI                                                             03/05/2009 16:01:55 PAGE 2   

  56          {
  57   1       for(;number!=0;number--)
  58   1       {}
  59   1      }
  60          
  61          /*********************************************
  62          涵数名称:  LcdCheckBusy(void)
  63          涵数功能:  判断LCD忙信号
  64          入口参数:  Void
  65          出口参数:  Void
  66          *********************************************/
  67          void LcdCheckBusy(void)            //判断忙标志
  68            {
  69   1         LCD_DATA=0xff;
  70   1         LCD_RS=0;                               //选择IR
  71   1         LCD_RW=1;                               //读操作
  72   1         LCD_EN=1;
  73   1         while(LCD_BUSY);        //为1继续判断,为0时往下执行
  74   1         LCD_EN=0;
  75   1         }
  76          
  77          /*********************************************
  78          涵数名称: LCD_READ_AC()
  79          涵数功能:  读LCD光标地址
  80          入口参数:  void
  81          出口参数:  Void
  82          *********************************************/
  83          /*void Lcd_Read_AC()
  84          {
  85             LCD_DATA=0xff;
  86             LCD_RS=0;                               //选择IR
  87             LCD_RW=1;                               //读操作
  88             LCD_EN=1;
  89            counter=LCD_DATA;        //为1继续判断,为0时往下执行   
  90             LCD_EN=0;
  91          } 
  92          
  93          /*********************************************
  94          涵数名称:  LcdCls(void)
  95          涵数功能:  向LCD写指令
  96          入口参数:  void
  97          出口参数:  Void
  98          *********************************************/
  99          void LcdCls(void) //LCD清屏
 100          {
 101   1      LcdCheckBusy();
 102   1      LCD_RS=0;
 103   1      LCD_RW=0;
 104   1      LCD_EN=1;
 105   1      LCD_DATA=1;
 106   1      LCD_EN=0;
 107   1      }
 108          
 109          
 110          /*********************************************
 111          涵数名称:  void LcdWriteInstruction()
 112          涵数功能:  向LCD写指令
 113          入口参数:  uchar LcdInstruction
 114          出口参数:  Void
 115          *********************************************/
 116           
 117           void LcdWriteInstruction(uchar LcdInstruction) //写指令到LCD
C51 COMPILER V8.02   DAXIANSHI                                                             03/05/2009 16:01:55 PAGE 3   

 118          {
 119   1      LcdCheckBusy();
 120   1      LCD_RS=0;
 121   1      LCD_RW=0;
 122   1      LCD_EN=1;
 123   1      LCD_DATA=LcdInstruction;
 124   1      LCD_EN=0;
 125   1      }
 126          
 127          /*********************************************
 128          涵数名称:  LcdWriteData()
 129          涵数功能:  输出一个字节
 130          入口参数:  uchar LcdData
 131          出口参数:  Void
 132          *********************************************/
 133          void LcdWriteData(uchar LcdData) //输出一个字节数据到LCD
 134          {
 135   1      LcdCheckBusy();
 136   1      LCD_RS=1;
 137   1      LCD_RW=0;
 138   1      LCD_EN=1;
 139   1      LCD_DATA=LcdData;
 140   1      LCD_EN=0;
 141   1      }
 142          
 143          /*********************************************
 144          涵数名称:  void LcdPos(void)
 145          涵数功能:  地址计算
 146          入口参数:  viod
 147          出口参数:  Void
 148          *********************************************/ 
 149          
 150          void LcdPos(void)                  //显示地址计算
 151          {  XPOS&=0x0f;                     //定义列向显示个数为16
 152   1         YPOS&=0x03;                     //定义显示行数为2行
 153   1         if(YPOS==0x00)                  //当在第一行显示时,横向显示地址从0开始,因为写地址时D7为1,所以要或80H
 154   1            LcdWriteInstruction(XPOS|0x80);
 155   1         else if(YPOS==0x01)
 156   1            LcdWriteInstruction((XPOS+0x40)|0x80);   //当在第二行显示时,加40H回到第二行的第一个位置
 157   1         else if(YPOS==0x02)
 158   1            LcdWriteInstruction((XPOS+0x01)|0x80);  //当行数超过2时,回到起始点
 159   1        
 160   1      }
 161           
 162          /*********************************************
 163          涵数名称:  void LcdInits(void)
 164          涵数功能:  初始化LCD
 165          入口参数:  void
 166          出口参数:  Void
 167          *********************************************/ 
 168          void LcdInit(void) //初始化LCD
 169          {
 170   1      LcdWriteInstruction(LCD_DISPLAY_DOUBLE_LINE);
 171   1      LcdWriteInstruction(LCD_DISPLAY_OFF);
 172   1      LcdCls();
 173   1      LcdWriteInstruction(LCD_AC_AUTO_INCREMENT);
 174   1      LcdWriteInstruction(0x0f);
 175   1      }
 176          
 177          
 178          /*********************************************
 179          涵数名称:  void LcdWDAstr()
C51 COMPILER V8.02   DAXIANSHI                                                             03/05/2009 16:01:55 PAGE 4   

 180          涵数功能:  确定显示地址并显示字符串
 181          入口参数:  uchar x 确定LCD的X向显示坐标
 182                     uchar y 确定LCD的Y向显示坐标
 183                             uchar s[]写入字符串
 184                             uchar Len 数组长度
 185          出口参数:  Void
 186          *********************************************/  
 187          void LcdWDAstr(uchar x,uchar y,uchar s[],uchar Len)        //地址确定
 188          {       
 189   1          YPOS=y;             //把要显示的位置赋值 
 190   1          for(XPOS=x;Later<Len;XPOS++)  //指针值必须要有数据
 191   1          { 
 192   2               LcdPos();
 193   2           LcdWriteData(s[Later]);                                       //指针取内容
 194   2           Later++;                                                      //逐个显示
 195   2         }
 196   1      }
 197          
 198          /**********************************************
 199          函数名称:DA_Star()
 200          函数功能:启动DA转换
 201          函数类型:void
 202          入口参数:无
 203          出口参数:无
 204          ***********************************************/
 205          void DA_Star(uchar d)
 206          {
 207   1        RW=0;
 208   1        DA=0;
 209   1        _nop_();
 210   1       _nop_();
 211   1       _nop_();
 212   1        P0=d;
 213   1        _nop_();
 214   1       _nop_();
 215   1       _nop_();
 216   1        RW=1;
 217   1        DA=1;
 218   1        _nop_();
 219   1       _nop_();
 220   1       _nop_();
 221   1        _nop_();
 222   1       _nop_();
 223   1       _nop_();
 224   1       }
 225          
 226          void main()
 227          {
 228   1        LcdInit();
 229   1        while(1)
 230   1       {
 231   2        DA_Star(0xff);
 232   2        Delay(2000);
 233   2        DA_Star(0x00);
 234   2        Delay(2000);
 235   2        Tens[Later]+=0x30;
 236   2        LcdWDAstr(3,0,Tens,1);
 237   2      
 238   2       }
 239   1       }
 240          
 241          
C51 COMPILER V8.02   DAXIANSHI                                                             03/05/2009 16:01:55 PAGE 5   

 242          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    249    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       6
   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 + -