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

📄 51

📁 51单片机大量源码
💻
字号:
C51 COMPILER V8.09   1602CHUANHANG                                                         07/12/2010 14:10:14 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE 1602CHUANHANG
OBJECT MODULE PLACED IN 1602chuanhang.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 1602chuanhang.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************
   2              
   3          * 描述:                                                           
   4          *    LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线   
   5          * 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令   
   6          * 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数   
   7          * 据,再送出低4位数据。可以节省单片机的4根端口线。                 
   8          *                                                                  
   9          *******************************************************************/
  10          #include < reg52.h >
  11          #include < intrins.h >
  12          #define uchar unsigned char
  13          #define uint  unsigned int
  14          sbit  LCD_RS = P2^7;             
  15          sbit  LCD_RW = P2^6;
  16          sbit  LCD_EN = P2^5;
  17          uchar code  cdis1[ ] = {"   WELCOME TO   "}; 
  18          uchar code  cdis2[ ] = {" WWW.RICHMCU.COM "};
  19          /**********************************************************
  20          
  21          * 5us 延时子程序
  22          
  23          **********************************************************/
  24          void  delayNOP()
  25          {
  26   1         _nop_();
  27   1         _nop_();
  28   1         _nop_();
  29   1         _nop_();
  30   1         _nop_();
  31   1      }
  32          
  33          /**********************************************************
  34          
  35          * 延时子程序
  36          
  37          **********************************************************/
  38          void delay(uint ms) 
  39          
  40          {
  41   1         uchar t;
  42   1         while(ms--)
  43   1         { 
  44   2           for(t = 0; t < 120; t++);
  45   2         }
  46   1      }
  47          
  48          
  49          /**********************************************************
  50          
  51          * 检查LCD忙状态                                           
  52          * lcd_busy为1时,忙,等待。                               
  53          * lcd-busy为0时,闲,可写指令与数据                        
  54          
  55          **********************************************************/ 
C51 COMPILER V8.09   1602CHUANHANG                                                         07/12/2010 14:10:14 PAGE 2   

  56          bit lcd_busy()
  57          {                          
  58   1          bit result;
  59   1          LCD_RS = 0;
  60   1          LCD_RW = 1;
  61   1          LCD_EN = 1;
  62   1          delayNOP();
  63   1          result = (bit)(P0&0x80);
  64   1          LCD_EN = 0;
  65   1          return(result); 
  66   1      }
  67          
  68          /********************************************************* 
  69          
  70          * 写指令或数据
  71          
  72          * start=0, 写入命令;  start=1, 写入数据
  73          
  74          *********************************************************/
  75          
  76          void lcd_write(bit start, uchar in_data) 
  77          {
  78   1          uchar Hdata,Ldata;
  79   1      
  80   1          while(lcd_busy());
  81   1      
  82   1          Hdata=in_data&0xf0;             //取高四位
  83   1          Ldata=(in_data<<4)&0xf0;    //取低四位
  84   1      
  85   1          if(start==0) 
  86   1          LCD_RS = 0;               //写入命令
  87   1          else
  88   1          LCD_RS = 1;                 //写入数据
  89   1      
  90   1          LCD_RW = 0;
  91   1          LCD_EN = 0;
  92   1          delayNOP();
  93   1      
  94   1          P0 = Hdata;                 //发送高四位   
  95   1          LCD_EN = 1;
  96   1          delayNOP();
  97   1          LCD_EN = 0;
  98   1          delayNOP();
  99   1      
 100   1          P0 = Ldata;                 //发送低四位     
 101   1          LCD_EN = 1;
 102   1          delayNOP();
 103   1          LCD_EN = 0;
 104   1          delayNOP();
 105   1      }
 106          
 107          /*************************************************************
 108          
 109          *  LCD初始化设定                                             
 110          
 111          *************************************************************/
 112          void lcd_init()
 113          {
 114   1          delay(15);
 115   1          lcd_write(0,0x28);                //16*2显示,5*7点阵,4位数据
 116   1          delay(5);
 117   1          lcd_write(0,0x28);
C51 COMPILER V8.09   1602CHUANHANG                                                         07/12/2010 14:10:14 PAGE 3   

 118   1          delay(5);
 119   1          lcd_write(0,0x28);
 120   1      
 121   1          delay(5);
 122   1          lcd_write(0,0x0c);               //显示开,关光标
 123   1          delay(5);
 124   1          lcd_write(0,0x06);              //移动光标
 125   1          delay(5);
 126   1          lcd_write(0,0x01);              //清除LCD的显示内容
 127   1          delay(25);                          //延时
 128   1      }
 129          
 130          /**********************************************************
 131          
 132          *  设定显示位置                                             
 133                                                                  
 134          **********************************************************/
 135          void lcd_pos(uchar pos)
 136          {                          
 137   1         lcd_write(0,pos|0x80);     //数据指针=80+地址变量
 138   1      }
 139          
 140          /**********************************************************
 141          
 142          * 主函数
 143          
 144          **********************************************************/
 145          void  main()
 146          {
 147   1          uchar  m;
 148   1      
 149   1          lcd_init();                          //LCD1602初始化
 150   1      
 151   1          lcd_pos(0x00);                 //设置显示位置为第一行
 152   1          for(m=0;m<16;m++)
 153   1          lcd_write(1,cdis1[m]);
 154   1      
 155   1      
 156   1           lcd_pos(0x40);                //设置显示位置为第二行     
 157   1           for(m=0;m<16;m++) 
 158   1           lcd_write(1,cdis2[m]);
 159   1      
 160   1            while(1);
 161   1      }
 162          
 163          /*********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    231    ----
   CONSTANT SIZE    =     35    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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