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

📄 99.lst

📁 各种基本的小程序,用到了实验板中的各个功能,很有用哦!
💻 LST
字号:
C51 COMPILER V6.12  99                                                                     03/26/2008 13:46:33 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 99
OBJECT MODULE PLACED IN .\99.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\99.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #ifndef _LCD1602_H_
   3          #define _LCD1602_H_
   4          
   5          //输入方式设置
   6          #define LCD_AC_AUTO_INCREMENT     0x06   //数据读、写操作后,AC自动增一
   7          #define LCD_AC_AUTO_DECREASE      0x04   //数据读、写操作后,AC自动减一
   8          #define LCD_MOVE_ENABLE           0x05   //数据读、写操作,画面平移
   9          #define LCD_MOVE_DISENABLE        0x04   //数据读、写操作,画面不动
  10          #define LCD_GO_HOME               0x02   //AC=0,光标、画面回HOME位
  11          //设置显示、光标及闪烁开、关
  12          #define LCD_DISPLAY_ON            0x0C         //显示开
  13          #define LCD_DISPLAY_OFF           0x08         //显示关
  14          #define LCD_CURSOR_ON             0x0A         //光标显示
  15          #define LCD_CURSOR_OFF            0x08         //光标不显示
  16          #define LCD_CURSOR_BLINK_ON       0x09         //光标闪烁
  17          #define LCD_CURSOR_BLINK_OFF      0x08         //光标不闪烁
  18          //光标、画面移动,不影响DDRAM
  19          #define LCD_LEFT_MOVE             0x18         //LCD显示左移一位
  20          #define LCD_RIGHT_MOVE            0x1C         //LCD显示右移一位
  21          #define LCD_CURSOR_LEFT_MOVE      0x10         //光标左移一位
  22          #define LCD_CURSOR_RIGHT_MOVE     0x14         //光标右移一位
  23          //工作方式设置
  24          #define LCD_DISPLAY_DOUBLE_LINE   0x38         //两行显示
  25          #define LCD_DISPLAY_SINGLE_LINE   0x30         //单行显示
  26          #define LCD_CLEAR_SCREEN  0X01                 //清屏
  27          /***********************LCD1602地址相关******************************/
  28          #define LINE1_HEAD    0x80   // 第一行DDRAM起始地址 
  29          #define LINE2_HEAD    0xc0   //  第二行DDRAM起始地址
  30          #define LINE1         0      //第一行
  31          #define LINE2         1      //第二行
  32          #define LINE_LENGTH   16     //每行的最大字符长度
  33          /***********************LCD1602接线引脚定义**************************/
  34          #define LCDIO     P2         //定义P2口与LCD1602的数据口相接
  35           sbit   LCD_RS=P0^2;         
  36           sbit   LCD_RW=P0^3;         
  37           sbit    LCD_EN=P0^4;
  38          
  39           /**********************另外相关的定*********************************/
  40           #define HIGH               1
  41           #define LOW                0   
  42           #define TURE               1
  43           #define  FALSE             0
  44           #define  uchar unsigned char
  45           #define  uint  unsigned int
  46           
  47           /*************************以下是函数的申明部*************************/
  48           void LCD_init(void);                    //LCD1602初始化
  49           void LCD_send_command(uchar command);   //
  50           void LCD_send_data(uchar dat);
  51           void LCD_write_char(uchar x,uchar y,uchar dat);
  52           void LCD_disp_string(uchar x,uchar y,char *Data);
  53           void delay_ms(uint n);
  54           void LCD_check_busy(void);
  55           #endif
C51 COMPILER V6.12  99                                                                     03/26/2008 13:46:33 PAGE 2   

  56          
  57          void main(void)
  58          {
  59   1      uchar string[]="     I LOVE YOU! "; 
  60   1       uchar *cp;
  61   1       cp=string;
  62   1       LCD_init();
  63   1       while(1)
  64   1       {
  65   2       
  66   2        LCD_send_command(LCD_CLEAR_SCREEN);
  67   2        delay_ms(2);
  68   2        LCD_disp_string(0,1,cp);
  69   2        delay_ms(100);
  70   2               cp++;
  71   2        if(*cp=='\0')
  72   2        {
  73   3         cp=string;                 //到达字符的尾部时,改变指针,重新指向字符串的头部
  74   3        }
  75   2       }
  76   1      }
  77          
  78          /**************LCD1602的初始化***************************/
  79          void LCD_init(void)
  80          {
  81   1       LCD_send_command(0x38);
  82   1       LCD_send_command(0x06);
  83   1       LCD_send_command( 0x04);
  84   1       LCD_send_command(0x0c );
  85   1       LCD_send_command( 0x08);
  86   1       LCD_send_command(0x01);
  87   1      
  88   1      }
  89          
  90           
  91          void LCD_check_busy(void)   //检测LCD状态,看它是不是还在忙呢
  92          {
  93   1      
  94   1         LCD_EN=0;
  95   1         LCD_RS=0;
  96   1         LCD_RW=1;
  97   1         LCDIO=0xff;
  98   1         LCD_EN=1;
  99   1         while(P2&0x80);
 100   1         LCD_EN=0;
 101   1      }
 102          /************LCD1602写命令*******************************/
 103          void LCD_send_command(uchar command)
 104          {
 105   1       LCD_check_busy();
 106   1       LCD_RS=LOW;
 107   1       LCD_RW=LOW;
 108   1       LCD_EN=HIGH;
 109   1       LCDIO=command;
 110   1       LCD_EN=LOW;
 111   1      }
 112          /*****************LCD1602写数据*********uu*****************/
 113          void LCD_send_data(uchar dat)
 114          {
 115   1       LCD_check_busy();
 116   1       LCD_RS=HIGH;
 117   1       LCD_RW=LOW;
C51 COMPILER V6.12  99                                                                     03/26/2008 13:46:33 PAGE 3   

 118   1       LCD_EN=HIGH;
 119   1       LCDIO=dat;
 120   1       LCD_EN=LOW;
 121   1      }
 122          
 123          /******************LCD1602显示字符串*********************/
 124          void LCD_disp_string(uchar x,uchar y,uchar *Data)
 125          {
 126   1       if(y==LINE1)
 127   1       {
 128   2        if(x<LINE_LENGTH)
 129   2        {
 130   3         LCD_send_command(LINE1_HEAD+x);
 131   3         for(;x<LINE_LENGTH&&*Data!='\0';x++)
 132   3         {
 133   4          LCD_send_data(*(Data++));
 134   4         }
 135   3         if(*Data!='\0')
 136   3         {
 137   4          x=0;
 138   4          y=LINE2;
 139   4         }
 140   3        }
 141   2       }
 142   1       if(y==LINE2)
 143   1       {
 144   2        LCD_send_command(LINE2_HEAD+x);
 145   2        for(;x<LINE_LENGTH&&*Data!='\0';x++)
 146   2        {
 147   3         LCD_send_data(*(Data++));
 148   3        }
 149   2       }
 150   1      }
 151          
 152          
 153            void delay_ms(uint n)
 154          {
 155   1       uint i,j;
 156   1       for(i=n;i>0;i--)
 157   1          for(j=0;j<1140;j++)
 158   1          ;
 159   1      }


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