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

📄 lcd.lst

📁 一款液晶RT240128GB的以8080方式控制的底层驱动源代码程序,非常难得,放血奉献!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LCD                                                                   05/09/2008 16:12:47 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\obj\lcd.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src\lcd.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\lcd.lst) OBJECT(.\obj\lcd.o
                    -bj)

line level    source

   1          
   2          /******************************************************** 
   3             LCD采用ST7920,RT240128GB
   4             控制单片机AT89C51 11.0592MHz
   5             2008.5.9 汪亲朋.
   6          ************************************************************/
   7          #include "reg52.h"
   8          #define   uchar  unsigned char
   9          #define   uint   unsigned int
  10          
  11          #define   PORTB   P1
  12          sbit   WRT  =P0^0;//低电平有效//
  13          sbit   RAD  =P0^1;//低电平有效//
  14          sbit   CS   =P0^2;//低电平有效//
  15          sbit   RS   =P0^3;//1:数据寄存器 0:指令寄存器//
  16          sbit   RESET=P0^4;//低电平有效//正常工作应为高电平//
  17          sbit   BUSY =P0^5;//默认高电平为忙//
  18          sbit   INT  =P0^6;//默认高电平触发中断//
  19          /*
  20          //////////////指令寄存器00H////////////////////////
  21          #define 00H_DISPLAY             (0x01)/////bit0//1:屏幕正常显示 0:屏幕反白显示////
  22          #define 00H_FLASH               (0x00<<1)//bit1//1:屏幕闪烁,闪烁时间由80H的BTR决定 0:屏幕不闪烁正常显示////
  23          #define 00H_LCD_ON_OFF  (0x00<<2)//bit2//1:屏幕开启 0:屏幕关闭////
  24          #define 00H_MODEL           (0x01<<3)//bit3//1:文字模式 0:绘图模式////
  25          //#define 00H_SIO               (0x00<<4)//bit4///
  26          //#define 00H_IIC               (0x00<<5)//bit5///
  27          #define 00H_POWER_MODE  (0x03<<6)//bit[7:6]//11:电源工作正常模式 00:电源工作关闭模式////
  28          //////////////指令寄存器F0H////////////////////////
  29          #define F0H_ASCII_BLOCK (0x02)   //bit[1:0]//00:ASCII区块0//01:ASCII区块1//10:ASCII区块2//11:ASCII区块3///
             -/
  30          #define F0H_DECODE_MODE (0x00<<2)//bit2//1:全部以ASCII解码(00-FFH)//0:00-9FH视为ASCIIA0-FFH视为汉字码////
  31          #define F0H_REWRTITE    (0x00<<3)//bit3//1:开始写入//0:不动作////
  32          #define F0H_FONT            (0x00<<4)//bit[5:4]//00:选择简体(GB)(256KB)//01:选择繁体(GIB5)(512KB)//10:选择简体(GB
             -)(512KB)//
  33          #define F0H_SELECT_ROM  (0x00<<6)//bit6//1:选择上部的256KB的ROM//0:选择下部的256KB的ROM//
  34          #define F0H_JIANZI              (0x01<<7)//bit7//1:正常使用//0:客户自建立ROM时使用//
  35          //////////////指令寄存器10H////////////////////////
  36          #define 10H_CURSOR_WIDTH(0x00)/////bit0//1:光标宽度固定为1个字节即8个Pixel//0:光标可以自适应宽度////
  37          #define 10H_CURSOR_FLASH(0x00<<1)//bit1//1:光标闪烁,闪烁时间由80H的BTR决定 0:光标不闪烁正常显示////
  38          #define 10H_CURSOR_DISP (0x00<<2)//bit2//1:光标显示//0:光标不显示////
  39          #define 10H_CURSOR_WRT_M        (0x01<<3)//bit3//1:写入数据到DDRAM时光标自动移位//0:不自动移位////
  40          #define 10H_ZI_TYPE             (0x01<<4)//bit4//1:正常字型//0:粗体字型/////
  41          #define 10H_FAN_DISP    (0x01<<5)//bit5//1:正常显示//0:汉字反白显示/////
  42          #define 10H_ALIGN           (0x01<<6)//bit6//1:文字对齐使能//0:文字对齐禁能////
  43          #define 10H_CURSOR_RAD_M        (0x00<<7)//bit7//1:从DDRAM读取数据时光标自动移位//0:不自动移位////
  44          //////////////指令寄存器12H////////////////////////
  45          #define 12H_MAKE_WORAD  (0x03)   //bit[1:0]//00:ASCII区块0//01:ASCII区块1//10:ASCII区块2//11:ASCII区块3////
  46          //#define 12H_CURSOR_DISP       (0x00<<2)//bit2//1:光标显示//0:光标不显示////
  47          //#define 12H_CURSOR_WRT_M      (0x01<<3)//bit3//1:写入数据到DDRAM时光标自动移位//0:不自动移位////
  48          //#define 12H_ZI_TYPE           (0x01<<4)//bit4//1:正常字型//0:粗体字型/////
  49          //#define 12H_FAN_DISP    (0x01<<5)//bit5//1:正常显示//0:汉字反白显示/////
  50          //#define 12H_ALIGN         (0x01<<6)//bit6//1:文字对齐使能//0:文字对齐禁能////
  51          #define 12H_MOVE            (0x01<<7)//bit7//1:先水平移动再垂直移动//0:先垂直移动再水平移动////
  52          */
C51 COMPILER V7.50   LCD                                                                   05/09/2008 16:12:47 PAGE 2   

  53          /////////////////////////////
  54          /////////////////////////////////////////////////////////////////
  55          void LCD_NOP(void)
  56          {
  57   1        uchar i;
  58   1        for(i=0;i<5;i++); 
  59   1      }
  60          /////////////////////////////////////////////////////////////////
  61          void Delay(int x)
  62          {
  63   1        int i,j;
  64   1        for(j=0;j<x;j++)
  65   1         {
  66   2          for(i=0;i<250;i++);
  67   2         }
  68   1      }
  69          /****************************** 读忙状态函数 ****************************
  70          * 功能:在正常读写操作之前检测LCD模块的忙状态, 
  71          *       DB7 = 0:LCD控制器空闲;DB7 = 1:LCD控制器忙
  72          *************************************************************************/
  73          /*
  74          void Check_Busy(void) 
  75          {
  76              CS=0;////选中LCD////
  77                  while(BUSY) ;////如果Busy的值为1,说明忙,则一直在此处等待,直到为0/////
  78          }
  79          */           
  80          //////////////////LCD写命令字///////////////////////////////////////
  81          void LCD_Write_Com(uchar CMD)
  82          { 
  83   1       // Check_Busy();///检测忙信号////
  84   1        PORTB=CMD;      /// 将命令字符送往数据口 ///
  85   1        CS=0;
  86   1        RAD=1;
  87   1        RS=0; 
  88   1        WRT=0;
  89   1        LCD_NOP();
  90   1        WRT=1;
  91   1        RS=1;
  92   1        CS=1;
  93   1      }
  94          //////////////LCD写数据/////////////////////////////////////////////////
  95          void LCD_Write_Dat(uchar x_data)
  96          { 
  97   1       // Check_Busy();///检测忙信号////
  98   1        PORTB=x_data;      /// 将数据字符送往数据口 ///
  99   1        CS=0;
 100   1        RAD=1;
 101   1        RS=1; 
 102   1        WRT=0;
 103   1        LCD_NOP();
 104   1        WRT=1;
 105   1        RS=1;
 106   1        CS=1;
 107   1      }
 108          //////////////LCD读取数据/////////////////////////////////////////////////
 109          uchar LCD_Read_Dat(void)
 110          { 
 111   1        uchar x_data;
 112   1       // Check_Busy();///检测忙信号////
 113   1        PORTB=0xff;    /// 将数据0xff送往数据口 ///
 114   1        CS=0;  
C51 COMPILER V7.50   LCD                                                                   05/09/2008 16:12:47 PAGE 3   

 115   1        WRT=1;
 116   1        RS=0;
 117   1        RAD=0;
 118   1        LCD_NOP();
 119   1        x_data=PORTB; 
 120   1        RS=1;
 121   1        RAD=1;
 122   1        CS=1;
 123   1        return(x_data);
 124   1      }
 125          //////////////LCD设定功能/////////////////////////////////////////////////
 126          void LCD_Write_Funtion(uchar CMD,uchar x_data)
 127          { 
 128   1        LCD_Write_Com(CMD);
 129   1        LCD_Write_Dat(x_data);
 130   1      }
 131          //////////////LCD读取缓冲器/////////////////////////////////////////////////
 132          uchar LCD_Read_Funtion(uchar CMD)
 133          { 
 134   1        LCD_Write_Com(CMD);
 135   1        return(LCD_Read_Dat());
 136   1      }
 137          //////////////LCD初始化/////////////////////////////////////////////////
 138          void LCD_Init(void)
 139          { 
 140   1       //初始化参数表:前面的是寄存器地址,后面的是参数
 141   1       LCD_Write_Funtion(0x00,0xCD);//LCD基本显示功能设定 文本模式
 142   1       LCD_Write_Funtion(0x01,0xF0);//中断准位(高电平) / 设定系统频率8MHz
 143   1       LCD_Write_Funtion(0x02,0x10);//LCD内存读写速度与功能设定(读字形ROM)

⌨️ 快捷键说明

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