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

📄 lcd1602.lst

📁 我做的畢業設計,用AT89S51 控制LCD1602作為顯示. DS1302時鐘芯片顯示時間,DS18B20測量溫度,還有4X4的鍵盤驅動.實現了一個計算功能.可以用PROTUES 仿真軟件仿真,當時
💻 LST
字号:
C51 COMPILER V7.50   LCD1602                                                               04/09/2007 18:39:44 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /**************************************************************************
   3          
   4            
   5             File Name:       LCD.h
   6             Author:          liao xuming
   7             Created:         2007/3/23
   8             Modified:            NO
   9             Revision:            1.0
  10            
  11          ***************************************************************************/
  12          
  13          #include"LCD1602.h"
  14          #include"keyboard.h"
  15          /***********************LCD1602接线引脚定义**************************/
  16          
  17          #define LCDIO     P0        //定义P2口与LCD1602的数据口相接
  18            sbit   LCD_RS=P2^5;         
  19            sbit   LCD_RW=P2^6;         
  20            sbit   LCD_EN=P2^7;
  21            sbit  LCD_BUSY=LCDIO^7;
  22           
  23          
  24          /**************LCD1602的初始化***************************/
  25          void LCD_init(void)
  26          {LCD_EN=0;
  27   1       LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
  28   1       LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
  29   1       LCD_send_command(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
  30   1       LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
  31   1       LCD_send_command(LCD_CLEAR_SCREEN);
  32   1      }
  33          /********************************************************/
  34           
  35          void LCD_check_busy(void)   //检测LCD状态,看它是不是还在忙呢
  36          {
  37   1       do
  38   1        {
  39   2         LCD_EN=0;
  40   2         LCD_RS=0;
  41   2         LCD_RW=1;
  42   2         LCDIO=0xff;
  43   2         LCD_EN=1;
  44   2         }
  45   1       // while(1);
  46   1         while(LCD_BUSY==1);   //在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
  47   1                                                       //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
  48   1                                                       //实际硬件时打开此语句
  49   1        LCD_EN=0;
  50   1      }
  51          /************LCD1602写命令*******************************/
  52          void LCD_send_command(uchar command)
  53          {
  54   1       LCD_check_busy();
  55   1       LCD_RS=LOW;
C51 COMPILER V7.50   LCD1602                                                               04/09/2007 18:39:44 PAGE 2   

  56   1       LCD_RW=LOW;
  57   1       LCD_EN=HIGH;
  58   1       LCDIO=command;
  59   1       LCD_EN=LOW;
  60   1      }
  61          /********************************************************/
  62          /*****************LCD1602写数据**************************/
  63          void LCD_send_data(uchar dat)
  64          {
  65   1       LCD_check_busy();
  66   1       LCD_RS=HIGH;
  67   1       LCD_RW=LOW;
  68   1       LCD_EN=HIGH;
  69   1       LCDIO=dat;
  70   1       LCD_EN=LOW;
  71   1      }
  72          /********************************************************/
  73           void LCD_write_char(uchar x,uchar y,uchar dat)
  74          {
  75   1           unsigned char address;
  76   1           if(dat!=KEY_NOTHING+0x30)  //this if is my add for when the time no key down to do not display anythi
             -ng
  77   1           {
  78   2           if (y == LINE1) 
  79   2               address = LINE1_HEAD + x;
  80   2           else 
  81   2              address = LINE2_HEAD + x;
  82   2           LCD_send_command(address); 
  83   2          LCD_send_data(dat);
  84   2          }
  85   1      }
  86          
  87          void GotoXY(unsigned char x, unsigned char y)
  88          {
  89   1              if(y==0)
  90   1                      LCD_send_command(0x80|x);
  91   1              if(y==1)
  92   1                      LCD_send_command(0x80|(x-0x40));
  93   1      }
  94          
  95          
  96          void Print(unsigned char *str)
  97          {
  98   1              while(*str!='\0')
  99   1              {
 100   2                      LCD_send_data(*str);
 101   2                      str++;
 102   2              }
 103   1      }
 104          /******************LCD1602显示字符串*********************/
 105          void LCD_disp_string(uchar x,uchar y,uchar *Data)
 106          {
 107   1       if(y==LINE1)
 108   1       {
 109   2        if(x<LINE_LENGTH)
 110   2        {
 111   3         LCD_send_command(LINE1_HEAD+x);
 112   3         for(;x<LINE_LENGTH&&*Data!='\0';x++)
 113   3         {
 114   4          LCD_send_data(*(Data++));
 115   4         }
 116   3         if(*Data!='\0')
C51 COMPILER V7.50   LCD1602                                                               04/09/2007 18:39:44 PAGE 3   

 117   3         {
 118   4          x=0;
 119   4          y=LINE2;
 120   4         }
 121   3        }
 122   2       }
 123   1       if(y==LINE2)
 124   1       {
 125   2        LCD_send_command(LINE2_HEAD+x);
 126   2        for(;x<LINE_LENGTH&&*Data!='\0';x++)
 127   2        {
 128   3         LCD_send_data(*(Data++));
 129   3        }
 130   2       }
 131   1      }
 132          /****************************************************************/
 133          
 134           //ming add  display code string
 135          /******************LCD1602显示字符串*********************/
 136          void LCD_disp_string_code(uchar x,uchar y,uchar code *Data)
 137          {
 138   1       if(y==LINE1)
 139   1       {
 140   2        if(x<LINE_LENGTH)
 141   2        {
 142   3         LCD_send_command(LINE1_HEAD+x);
 143   3         for(;x<LINE_LENGTH&&*Data!='\0';x++)
 144   3         {
 145   4          LCD_send_data(*(Data++));
 146   4         }
 147   3         if(*Data!='\0')
 148   3         {
 149   4          x=0;
 150   4          y=LINE2;
 151   4         }
 152   3        }
 153   2       }
 154   1       if(y==LINE2)
 155   1       {
 156   2        LCD_send_command(LINE2_HEAD+x);
 157   2        for(;x<LINE_LENGTH&&*Data!='\0';x++)
 158   2        {
 159   3         LCD_send_data(*(Data++));
 160   3        }
 161   2       }
 162   1      }
 163          /****************************************************************/


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