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

📄 lcd.lst

📁 该程序为图形点阵液晶显示器12232A的驱动程序
💻 LST
字号:
C51 COMPILER V6.12  LCD                                                                    01/12/2005 11:39:24 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\lcd.OBJ
COMPILER INVOKED BY: d:\4_soft\Keil\C51\BIN\C51.EXE .\lcd.C DEBUG OBJECTEXTEND

stmt level    source

   1          //文件名:LCD_TEST
   2          //说明:本文件实现了对液晶12232A的功能的测试
   3          
   4          /************************************包含的头文件***********************************/
   5          #include <AT898252.h>
   6          #include <intrins.h>
   7          
   8          /***************************************定义宏**************************************/
   9          #define	uchar	unsigned char
  10          #define uint	unsigned int
  11          
  12          /*************************************端口声明**************************************/
  13          #define DI	P2_0			//12232A的指令数据选择端,H;数据,L:指令
  14          #define RW	P2_1			//12232A的读写选择信号端,H:读,L:写
  15          #define E2	P2_2			//12232A的读写使能信号端(从机),H:读使能,L:写使能
  16          #define E1	P2_3			//12232A的读写使能信号端(主机),H:读使能,L:写使能
  17          #define DB      P0			//12232A的数据线
  18          
  19          /***********************************全局变量的定义***********************************/
  20          //uchar data lcd_com;			//12232A的指令缓冲器
  21          //uchar data lcd_data;			//12232A的数据缓冲器
  22          uchar bdata lcd_status;			//12232A的状态存贮缓冲器
  23          sbit busy=lcd_status^7;			//12232A的忙标志
  24          
  25          /*************************************函数声明***************************************/
  26          void delay_s(uint x);			//延时子函数
  27          void master_write_com(uchar lcd_com);	//主机写指令函数
  28          void slave_write_com(uchar lcd_com);	//从机写指令函数
  29          void master_write_data(uchar lcd_data);	//主机写显示数据子函数
  30          void slave_write_data(uchar lcd_data);	//从机写显示数据子函数
  31          void lcd_status_read(void);		//读液晶状态子函数
  32          void lcd_init(void);			//液晶显示初始化子函数
  33          void clear_display(void);		//清显示子函数
  34          void main(void);			//显示主函数
  35          
  36          /*********************************延时X毫秒函数**************************************/
  37          //说明:实现功能:软件延时X毫秒
  38          //输入:软件延时的时间:xms
  39          //输出:无
  40          void delay_s(uint x)
  41          {
  42   1      	uint n;
  43   1      	while(x!=0)
  44   1      	{
  45   2      		for(n=0;n<125;n++)				//一次延时1ms
  46   2      		{;}
  47   2      		x--;
  48   2      	}
  49   1      }
  50          
  51          /*************************************读液晶状态子函数******************************/
  52          //说明:实现的功能:读液晶的状态
  53          //输入:无
  54          //输出:无
  55          void lcd_status_read(void)
C51 COMPILER V6.12  LCD                                                                    01/12/2005 11:39:24 PAGE 2   

  56          {
  57   1      	DI=0;				//数据线上为指令代码
  58   1      	_nop_();
  59   1      	_nop_();
  60   1      	_nop_();
  61   1      	_nop_();
  62   1      	RW=1;				//读使能
  63   1      	lcd_status=DB;			//读操作
  64   1      }
  65          
  66          /***********************************主机写指令函数**********************************/
  67          //说明:实现功能:向主机写指令
  68          //输入:指令代码
  69          //输出:无
  70          void master_write_com(uchar lcd_com)
  71          {
  72   1      	E1=1;				//主机读使能
  73   1      	lcd_status_read();		//读液晶状态
  74   1      	if(busy)
  75   1      	{
  76   2      		delay_s(5);
  77   2      	}
  78   1      	_nop_();
  79   1      	_nop_();
  80   1      	_nop_();
  81   1      	_nop_();
  82   1      	E1=0;				//主机写使能
  83   1      	_nop_();
  84   1      	_nop_();
  85   1      	_nop_();
  86   1      	_nop_();
  87   1      	RW=0;				//写使能
  88   1      	DB=lcd_com;			//写指令
  89   1      	delay_s(5);
  90   1      	E1=1;
  91   1      	delay_s(5);
  92   1      	E1=0;
  93   1      }
  94          
  95          /***********************************从机写指令函数**********************************/
  96          //说明:实现功能:向从机写指令
  97          //输入:指令代码
  98          //输出:无
  99          void slave_write_com(uchar lcd_com)
 100          {
 101   1      	E2=1;				//从机读使能
 102   1      	lcd_status_read();		//读液晶状态
 103   1      	if(busy)
 104   1      	{
 105   2      		delay_s(5);
 106   2      	}
 107   1      	_nop_();
 108   1      	_nop_();
 109   1      	_nop_();
 110   1      	_nop_();
 111   1      	E2=0;				//从机写使能
 112   1      	_nop_();
 113   1      	_nop_();
 114   1      	_nop_();
 115   1      	_nop_();
 116   1      	RW=0;				//写使能
 117   1      	DB=lcd_com;			//写指令
C51 COMPILER V6.12  LCD                                                                    01/12/2005 11:39:24 PAGE 3   

 118   1      	delay_s(5);
 119   1      	E2=1;
 120   1      	delay_s(5);
 121   1      	E2=0;
 122   1      }
 123          
 124          /***********************************主机写显示数据子函数**********************************/
 125          //说明:实现功能:向主机写数据
 126          //输入:显示数据
 127          //输出:无
 128          void master_write_data(uchar lcd_data)
 129          {
 130   1      	E1=1;				//主机读使能
 131   1      	lcd_status_read();		//读液晶状态
 132   1      	if(busy)
 133   1      	{
 134   2      		delay_s(5);
 135   2      	}
 136   1      	_nop_();
 137   1      	_nop_();
 138   1      	_nop_();
 139   1      	_nop_();
 140   1      	DI=1;				//数据线上为数据
 141   1      	delay_s(5);
 142   1      	E1=0;				//主机写使能
 143   1      	_nop_();
 144   1      	_nop_();
 145   1      	_nop_();
 146   1      	_nop_();
 147   1      	RW=0;				//写使能
 148   1      	DB=lcd_data;			//写显示数据
 149   1      	delay_s(5);
 150   1      	E1=1;
 151   1      	delay_s(5);
 152   1      	E1=0;
 153   1      }
 154          
 155          /***********************************从机写显示数据子函数**********************************/
 156          //说明:实现功能:向从机写数据
 157          //输入:显示数据
 158          //输出:无
 159          void slave_write_data(uchar lcd_data)
 160          {
 161   1      	E2=1;				//从机读使能
 162   1      	lcd_status_read();		//读液晶状态
 163   1      	if(busy)
 164   1      	{
 165   2      		delay_s(5);
 166   2      	}
 167   1      	_nop_();
 168   1      	_nop_();
 169   1      	_nop_();
 170   1      	_nop_();
 171   1      	DI=1;				//数据线上为数据
 172   1      	delay_s(5);
 173   1      	E2=0;				//从机写使能
 174   1      	_nop_();
 175   1      	_nop_();
 176   1      	_nop_();
 177   1      	_nop_();
 178   1      	RW=0;				//写使能
 179   1      	DB=lcd_data;			//写显示数据
C51 COMPILER V6.12  LCD                                                                    01/12/2005 11:39:24 PAGE 4   

 180   1      	delay_s(5);
 181   1      	E2=1;
 182   1      	delay_s(5);
 183   1      	E2=0;
 184   1      }
 185          
 186          /**************************************液晶初始化子函数************************************/
 187          //说明:函数实现对液晶的初始化:1:复位,2:选择动态驱动,3:选择1/32的占空比,4:选择正向排列顺序
 188          //	5:设置显示起始行为第一行,6:开显示
 189          //输入:无
 190          //输出:无
 191          void lcd_init(void)
 192          {
 193   1      	master_write_com(0xe2);
 194   1      	slave_write_com(0xe2);		//复位
 195   1      	
 196   1      	master_write_com(0xa4);
 197   1      	slave_write_com(0xa4);		//选择动态驱动
 198   1      	
 199   1      	master_write_com(0xa9);
 200   1      	slave_write_com(0xa9);		//选择占空比:1/32
 201   1      	
 202   1      	master_write_com(0xa0);
 203   1      	slave_write_com(0xa0);		//选择正向排列顺序
 204   1      	
 205   1      	master_write_com(0xc0);
 206   1      	slave_write_com(0xc0);		//显示起始行为第一行
 207   1      	
 208   1      	master_write_com(0xaf);
 209   1      	slave_write_com(0xaf);		//开显示
 210   1      }
 211          
 212          /***************************************清显示子函数************************************/
 213          //说明:清屏
 214          //输入:无
 215          //输出:无
 216          void clear_display(void)
 217          {
 218   1      	uchar i;			//页数
 219   1      	uchar j;			//列数
 220   1      	for(i=0;i<4;i++)
 221   1      	{
 222   2      		master_write_com(i);
 223   2      		slave_write_com(i);	//选取页地址
 224   2      		
 225   2      		for(j=0;j<80;j++)
 226   2      		{
 227   3      			master_write_com(j);
 228   3      			slave_write_com(j);	//选取列地址
 229   3      			
 230   3      			master_write_data(0);
 231   3      			slave_write_data(0);	//清列
 232   3      		}
 233   2      	}
 234   1      }
 235          /***************************************显示主函数***************************************/
 236          //说明:对液晶12232A的性能测试
 237          //输入:无
 238          //输出:无
 239          void main(void)
 240          {
 241   1      	uchar i;
C51 COMPILER V6.12  LCD                                                                    01/12/2005 11:39:24 PAGE 5   

 242   1      	uchar j;
 243   1      	lcd_init();			//显示初始化
 244   1      	clear_display();		//清屏
 245   1      	
 246   1      	for(i=0;i<4;i++)
 247   1      	{
 248   2      		master_write_com(i);
 249   2      		slave_write_com(i);	//选取页地址
 250   2      		
 251   2      		for(j=0;j<61;j++)
 252   2      		{
 253   3      			master_write_com(j);
 254   3      			slave_write_com(j);	//选取列地址
 255   3      			
 256   3      			master_write_data(0xaa);
 257   3      			slave_write_data(0xaa);	//送显示数据
 258   3      		}
 259   2      	}
 260   1      }


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