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

📄 lcda_driver.c

📁 C8051F020单片机AD转换程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************************
*  Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* File name: LCDA.C
* Processor: C8051F020
* Compiler : Keil C51 Compiler
* 
* Author:  李林利
* Version: 1.20
* Date:    2007.6.1
* Email:   GavinLi@126.com
* Description: 本文件是以T6963为控制器的LCD显示驱动程序文件,现支持的液晶为128x64,160x128,
*		  	   240x64,240x128;
*
* Others: LCD(240x128为例)显示屏坐标图:
*                   |O(0,0)
*                 --|----------------------------------------------------------> y 列坐标         
*                   |                                                 |240
*                   |                                                 | 
*				    |                  铭朗科技                       |
*					|                                                 |     
*					|                 ML-F020ICB                      |
*					|                                                 |   
*					|                                                 |
*					|               LCD240x128 显示屏                 |
*					|                                                 |   
*					|                                                 |
*					|                                                 |
*					|                                                 |
*				128	|-------------------------------------------------|(128,240)
*					|
*				   \|/
*                   | x 行坐标
*
* Function List:
*	1. void LCDA_WriteData(unsigned char val)
*	2. unsigned char LCDA_ReadData(void)
*   3. unsigned char LCDA_ReadStatus(void)
*	4. void LCDA_WriteCmd1(unsigned char cmd)
*	5. void LCDA_WriteCmd2(unsigned char val, unsigned char cmd)		
*   6. void LCDA_WriteCmd3(unsigned char val1, unsigned char val2, unsigned char cmd)
*	7. void LCDA_ClearScreen(void)
*	8. void LCDA_ClearTextScreen(void)
*	9. void LCDA_Init(unsigned char lcd_type)
*	10. unsigned char LCDA_SetTextMaps(unsigned char id)
*	11. unsigned char LCDA_SetGraphMaps(unsigned char id)
*	12. void LCDA_DrawPixel(unsigned char x, y, bit mode)
*   13. void LCDA_DrawLine(unsigned char x1, y1, x2, y2, bit mode)
*	14. void LCDA_DrawRectangle(unsigned char x1, y1, x2, y2, bit mode)
*	15. void LCDA_DrawFillRectangle(unsigned char x1, y1, x2, y2, bit mode)
*	16. void LCDA_DrawCircle(unsigned char x, y, r, bit mode)
*	17. void LCDA_DrawByte(unsigned char x, y, unsigned char val)
*	18. void LCDA_ShowHZxy(unsigned char x, y, unsigned char line, col, unsigned char *p)
*	19. void LCDA_ShowChar(unsigned char x, y, unsigned char *p, unsigned char len)
*
* History:
*   1. Author:       李林利  
*	   Version: 	 1.10
*	   Date:         2007.3.12
*      Modification: none
*
*   2. Author:       李林利   
*	   Version: 	 1.00
*      Date:         2004.11.24
*      Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include <INTRINS.H>
#include <ABSACC.H>
#include <MATH.H>
#include  "delay.h"
#include  "LCDA_Driver.h"
/************************************************************************************/


/************************************************************************************
// 常量及全局变量定义
*************************************************************************************/
#define bool 			bit
#define TRUE 			1
#define FALSE			0

#define LCD_CMD_ADDR	0x8801					// LCD命令端口地址
#define LCD_DATA_ADDR	0x8800					// LCD数据端口地址

#define CMD_ADDR		XBYTE[LCD_CMD_ADDR]  	//	LCD命令端口
#define DATA_ADDR 		XBYTE[LCD_DATA_ADDR] 	//	LCD数据端口


#define VRAM_SIZE  		0x8000 			 		// 显存容量

#define CGRAM_ADDR 		0x0000 			 		// CGRAM区地址
#define TEXT_ADDR  		0x0800			 		// 字符VRAM区地址
#define TEXT_SIZE  		0x0800			 		// 字符VRAM区大小
#define GRAPH_ADDR 		0x1000 			 		// 图形VRAM区地址

unsigned int 			Text_BaseAddr;
unsigned int 			Graph_BaseAddr;

unsigned int 			Text_VRAM;
unsigned int 			Graph_VRAM;

unsigned char xdata 	LCDA_LineChar;	 		// LCD 每行字符数变量(8x8字符或8x6字符)
/*************************************************************************************/
//
// 						T6963为控制器的LCD显示驱动程序函数定义
//
/*************************************************************************************/

/***********************************************************************************
* Function: LCDA_RWCheck;
*
* Description: 指令,数据读写状态检查;
*              
* Input:  none;
*
* Output: none;
*
* Return: 返回TRUE,允许指令,数据读写;返回FALSE,系统忙;
*
* Note:   none;
************************************************************************************/
bool LCDA_RWCheck(void) 
{
	unsigned char xdata sta; 
	
	sta=CMD_ADDR & 0x03; 
	 
	if (sta!=0x03)
		return FALSE;
    else
		return TRUE;
}

/***********************************************************************************
* Function: LCDA_AutoRCheck;
*
* Description: 数据自动读,状态检查;
*              
* Input:  none;
*
* Output: none;
*
* Return: 返回TRUE,允许数据自动读;返回FALSE,系统忙;
*
* Note:   none;
************************************************************************************/
bool LCDA_AutoRCheck(void)
{ 
	unsigned char xdata sta; 
	
	sta = CMD_ADDR & 0x04; 
	
	if (sta!=0x04)
		return FALSE;
	else
		return TRUE;
}

/***********************************************************************************
* Function: LCDA_AutoWCheck;
*
* Description: 数据自动写,状态检查;
*              
* Input:  none;
*
* Output: none;
*
* Return: 返回TRUE,允许数据自动写;返回FALSE,系统忙;
*
* Note:   none;
************************************************************************************/
bool LCDA_AutoWCheck(void)
{ 
	unsigned char xdata sta; 
	
	sta = CMD_ADDR & 0x08; 
	
	if (sta!=0x08)
		return FALSE;
	else
		return TRUE;
}

/***********************************************************************************
* Function: LCDA_WritePara;
*
* Description: 向LCD数据口写参数;
*              
* Input:  val,要写的参数;
*
* Output: none;
*
* Return: none;
*
* Note:   none;
************************************************************************************/
void LCDA_WritePara(unsigned char val) 
{ 
	while (!LCDA_RWCheck()); 
	DATA_ADDR = val;
}

/***********************************************************************************
* Function: LCDA_WriteData;
*
* Description: 向LCD数据口写数据;
*              
* Input:  val,要写的数据;
*
* Output: none;
*
* Return: none;
*
* Note:   none;
************************************************************************************/
void LCDA_WriteData(unsigned char val) 
{ 
	while (!LCDA_AutoWCheck()); 
	DATA_ADDR = val;
}

/***********************************************************************************
* Function: LCDA_ReadData;
*
* Description: 从LCD数据口读数据;
*              
* Input:  none;
*
* Output: none;
*
* Return: 读到的数据;
*
* Note:   none;
************************************************************************************/
unsigned char LCDA_ReadData(void)
{
	 while (!LCDA_AutoRCheck()); 
	 return(DATA_ADDR);
}

/***********************************************************************************
* Function: LCDA_ReadStatus;
*
* Description: 读取LCD状态;
*              
* Input:  none;
*
* Output: none;
*
* Return: 返回LCD状态数据;
*
* Note:   none;
************************************************************************************/
unsigned char LCDA_ReadStatus(void)
{ 
	return (CMD_ADDR); 
}


/***********************************************************************************
* Function: LCDA_WriteCmd1;
*
* Description: 向LCD写有1个参数命令;
*              
* Input:  cmd,LCD操作命令;
*
* Output: none;
*
* Return: none;
*
* Note:   none;
************************************************************************************/
void LCDA_WriteCmd1(unsigned char cmd) 
{ 
	while (!LCDA_RWCheck()); 
	CMD_ADDR = cmd; 
}

/***********************************************************************************
* Function: LCDA_WriteCmd2;
*
* Description: 向LCD写有2个参数命令;
*              
* Input:  val, cmd, LCD操作参数命令;
*
* Output: none;
*
* Return: none;
*
* Note:   none;
************************************************************************************/
void LCDA_WriteCmd2(unsigned char val, unsigned char cmd) 
{ 
	LCDA_WritePara(val);
	LCDA_WriteCmd1(cmd);
}

/***********************************************************************************
* Function: LCDA_WriteCmd3;
*
* Description: 向LCD写有3个参数命令;
*              
* Input:  val1,val2,cmd, LCD操作参数命令;
*
* Output: none;
*
* Return: none;
*
* Note:   none;
************************************************************************************/
void LCDA_WriteCmd3(unsigned char val1, unsigned char val2, unsigned char cmd) 
{ 
	LCDA_WritePara(val1);
	LCDA_WritePara(val2);
	LCDA_WriteCmd1(cmd);
}
/***********************************************************************************
* Function: LCDA_ClearVRAM;
*
* Description: 显示存储器清零函数;
*              
* Input:  none;
*
* Output: none;
*
* Return: none;
*
* Note:   LCD显示VRAM范围 0000h--7FFFh (32k);
************************************************************************************/
void LCDA_ClearVRAM(void) //显示存储器清零 
{
	unsigned int xdata i;

	LCDA_WriteCmd3(0x00,0x00,CMD_ADDR_POINT); 	//设置指针地址0000H
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_WRITE); 		//设置自动写状态
	for(i=0;i<VRAM_SIZE;i++)					// 清显示 RAM 区 0x0000h--0x7fffh (32k)
		 LCDA_WriteData(0);  
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_END); 		// 自动写结束
}

/***********************************************************************************
* Function: LCDA_ClearScreen;
*
* Description: LCD图形显示屏幕函数;
*              
* Input:  none;
*
* Output: none;
*
* Return: none;
*
* Note:   本函数只清除当前选择的图形显示屏幕;
************************************************************************************/
void LCDA_ClearScreen(void)
{
	unsigned int xdata i;

	LCDA_WriteCmd3((unsigned char)Graph_BaseAddr,(unsigned char)(Graph_BaseAddr>>8),CMD_ADDR_POINT); 	//设置指针地址0000H
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_WRITE); 		//设置自动写状态
	for(i=0;i<Graph_VRAM;i++)					// 清显示 RAM 区 0000h--2000h (8k)
		 LCDA_WriteData(0);  
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_END); 		// 自动写结束
}

/***********************************************************************************
* Function: LCDA_ClearTextScreen;
*
* Description: LCD字符显示屏幕函数;;
*              
* Input:  none;
*
* Output: none;
*
* Return: none;
*
* Note:   本函数只清除当前选择的字符显示屏幕;
************************************************************************************/
void LCDA_ClearTextScreen(void)
{
	unsigned int xdata i;

	LCDA_WriteCmd3((unsigned char)Text_BaseAddr,(unsigned char)(Text_BaseAddr>>8),CMD_ADDR_POINT); 	//设置指针地址0000H
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_WRITE); 		//设置自动写状态
	for(i=0;i<Text_VRAM;i++)					// 清显示 RAM 区 0000h--2000h (8k)
		 LCDA_WriteData(0);  
	LCDA_WriteCmd1(CMD_CGRAM_AUTO_END); 		// 自动写结束

⌨️ 快捷键说明

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