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

📄 lcd.lst

📁 单片机红外通信程序
💻 LST
字号:
C51 COMPILER V6.12  LCD                                                                    03/28/2007 21:57:40 PAGE 1   


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

stmt level    source

   1          /*******************************************************************************
   2          程序名称:LCD驱动程序
   3          显示功能:显示ASCII码
   4          硬件接法:D/I---------A0
   5                    R/W---------A1
   6                    E-----------读写0xA000~0xA003时,选中
   7                    CSA---------P1.5(前半屏选通,低电平有效)
   8                    CSB---------P1.6(后半屏选通,低电平有效)
   9                    DB0~DB7----D0~D7
  10          *******************************************************************************/
  11          
  12          
  13          #include "Lcd.h"
  14          #include "ASCII.h"
  15          
  16          
  17          /*******************************************************************************
  18          函数:LcdWaitBusy()
  19          功能:读取LCD的Busy标志,如果LCD忙则等待,如果空闲则返回
  20          说明:每次操作之前都应当确认LCD处于空闲状态
  21          *******************************************************************************/
  22          void LcdWaitBusy()
  23          {
  24   1      	while ( (XBYTE[0xA002] & 0x80) != 0 );
  25   1      }
  26          
  27          
  28          /*******************************************************************************
  29          函数:LcdOn()
  30          功能:打开LCD显示
  31          *******************************************************************************/
  32          void LcdOn()
  33          {
  34   1      	LcdWaitBusy();
  35   1      	XBYTE[0xA000] = 0x3F;
  36   1      }
  37          
  38          
  39          /*******************************************************************************
  40          函数:LcdOff()
  41          功能:关闭LCD显示
  42          *******************************************************************************/
  43          void LcdOff()
  44          {
  45   1      	LcdWaitBusy();
  46   1      	XBYTE[0xA000] = 0x3E;
  47   1      }
  48          
  49          
  50          /*******************************************************************************
  51          函数:LcdStartLine()
  52          功能:设置显示起始行
  53          参数:line是行号,取值0~63
  54          *******************************************************************************/
  55          void LcdStartLine(unsigned char line)
C51 COMPILER V6.12  LCD                                                                    03/28/2007 21:57:40 PAGE 2   

  56          {
  57   1      	LcdWaitBusy();
  58   1      	XBYTE[0xA000] = line | 0xC0;
  59   1      }
  60          
  61          
  62          /*******************************************************************************
  63          函数:LcdSetP()
  64          功能:设置页地址
  65          参数:page取值0~7
  66          *******************************************************************************/
  67          void LcdSetP(unsigned char page)
  68          {
  69   1      	LcdWaitBusy();
  70   1      	XBYTE[0xA000] = (page & 0x07) | 0xB8;
  71   1      }
  72          
  73          
  74          /*******************************************************************************
  75          函数:LcdSetY()
  76          功能:设置Y地址
  77          参数:y取值0~63
  78          *******************************************************************************/
  79          void LcdSetY(y)
  80          {
  81   1      	LcdWaitBusy();
  82   1      	XBYTE[0xA000] = (y & 0x3F) | 0x40;
  83   1      }
  84          
  85          
  86          /*******************************************************************************
  87          函数:LcdWriteDat()
  88          功能:写显示数据
  89          参数:dat为显示数据
  90          说明:写完后,Y地址自动加1
  91          *******************************************************************************/
  92          void LcdWriteDat(unsigned char dat)
  93          {
  94   1      	LcdWaitBusy();
  95   1      	XBYTE[0xA001] = dat;
  96   1      }
  97          
  98          
  99          /*******************************************************************************
 100          函数:LcdReadDat()
 101          功能:读显示数据
 102          返回:读到的数据
 103          *******************************************************************************/
 104          /*
 105          unsigned char LcdReadDat()
 106          {
 107          	LcdWaitBusy();
 108          	return XBYTE[0xA003];
 109          }
 110          */
 111          
 112          
 113          void _LcdClear_()
 114          {
 115   1      	unsigned char p,y;
 116   1      	for ( p=0; p<8; p++ )
 117   1      	{
C51 COMPILER V6.12  LCD                                                                    03/28/2007 21:57:40 PAGE 3   

 118   2      		LcdSetP(p);
 119   2      		LcdSetY(0);
 120   2      		for ( y=0; y<64; y++ )
 121   2      		{
 122   3      			LcdWriteDat(0x00);
 123   3      		}
 124   2      	}
 125   1      }
 126          
 127          
 128          //定义光标的横纵坐标
 129          unsigned char LcdCursorX;
 130          unsigned char LcdCursorY;
 131          
 132          
 133          /*******************************************************************************
 134          函数:LcdGotoXY()
 135          功能:把光标移到(x,y)处
 136          参数:(x,y)为屏幕坐标,x=0~15,y=0~4
 137          *******************************************************************************/
 138          void LcdGotoXY(unsigned char x, unsigned char y)
 139          {
 140   1      	LcdCursorX = x & 0x0F;
 141   1      	LcdCursorY = y & 0x03;
 142   1      }
 143          
 144          
 145          /*******************************************************************************
 146          函数:LcdClear()
 147          功能:LCD清屏
 148          *******************************************************************************/
 149          void LcdClear()
 150          {
 151   1      	LCD_CSA = 0;
 152   1      	_LcdClear_();
 153   1      	LCD_CSA = 1;
 154   1      	LCD_CSB = 0;
 155   1      	_LcdClear_();
 156   1      	LCD_CSB = 1;
 157   1      	LcdCursorX = 0;
 158   1      	LcdCursorY = 0;
 159   1      }
 160          
 161          
 162          /*******************************************************************************
 163          函数:LcdInit()
 164          功能:LCD初始化
 165          *******************************************************************************/
 166          void LcdInit()
 167          {
 168   1      	LCD_CSA = 1;
 169   1      	LCD_CSB = 1;
 170   1      	LcdStartLine(0);
 171   1      	LcdClear();
 172   1      	LcdOn();
 173   1      }
 174          
 175          
 176          /*******************************************************************************
 177          函数:LcdPutchar()
 178          功能:在LCD上显示ASCII码
 179          *******************************************************************************/
C51 COMPILER V6.12  LCD                                                                    03/28/2007 21:57:40 PAGE 4   

 180          void LcdPutchar(unsigned char c)
 181          {
 182   1      	unsigned char i;
 183   1      	unsigned char n;
 184   1      	unsigned char code *p;
 185   1      //检查是否为可显示字符
 186   1      	if ( c < ' ' )	//如果是控制字符
 187   1      	{
 188   2      		if ( c == '\r' )	//如果是回车符
 189   2      		{
 190   3      			LcdCursorX = 0;
 191   3      		}
 192   2      		else if ( c == '\n' )	//如果是换行符
 193   2      		{
 194   3      			LcdCursorY++;
 195   3      			if ( LcdCursorY >= 4 )
 196   3      			{
 197   4      				LcdCursorY = 0;
 198   4      			}
 199   3      		}
 200   2      		return;
 201   2      	}
 202   1      //计算字符点阵位置
 203   1      	p = ASCII_TAB + (c - ' ') * 16;
 204   1      //确定显示位置在左半屏还是右半屏
 205   1      	if ( LcdCursorX < 8 )
 206   1      	{
 207   2      		LCD_CSB = 0;
 208   2      //		x = 0;
 209   2      	}
 210   1      	else
 211   1      	{
 212   2      		LCD_CSA = 0;
 213   2      //		x = 64;
 214   2      	}
 215   1      //显示ASCII码
 216   1      	for ( i=0; i<2; i++ )
 217   1      	{
 218   2      		LcdSetP(LcdCursorY*2+i);	//设置页地址
 219   2      		LcdSetY(LcdCursorX*8);		//设置Y地址
 220   2      		n = 8;
 221   2      		do
 222   2      		{
 223   3      			LcdWriteDat(*p++);		//写入显示数据
 224   3      		} while ( --n != 0 );
 225   2      	}
 226   1      //取消选中
 227   1      	if ( LcdCursorX < 8 )
 228   1      	{
 229   2      		LCD_CSB = 1;
 230   2      	}
 231   1      	else
 232   1      	{
 233   2      		LCD_CSA = 1;
 234   2      	}
 235   1      //光标移到下个位置
 236   1      	LcdCursorX++;
 237   1      	if ( LcdCursorX >= 16 )
 238   1      	{
 239   2      		LcdCursorX = 0;
 240   2      		LcdCursorY++;
 241   2      		if ( LcdCursorY >= 4 )
C51 COMPILER V6.12  LCD                                                                    03/28/2007 21:57:40 PAGE 5   

 242   2      		{
 243   3      			LcdCursorY = 0;
 244   3      		}
 245   2      	}
 246   1      }
 247          


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