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

📄 main.c

📁 LCD12864液晶C语言,菜单功能应用
💻 C
字号:
//***********************************************************
//*标题:自制板实验 - ZZ004_12864LCD(带汉字库)程序优化
//*硬件:自制板
//*文件:ZZ004.c
//*日期:2005-12-29
//*版本:1.0
//*作者:lluct
//*邮箱:lluct@hotmail.com
//*********************************************************
//*描述:
//*     	显示画面和汉字
//*	   
//*********************************************************
//*【版权】 lluct, GPL
//*【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!
//*********************************************************
#include	<regx52.h>
#include	<intrins.h>
#include	<string.h>

//-----------------------------------------------
//TS12864并口相关设定//
#define	BUSY_FLAG	P0_7						//液晶模块忙标志
#define	BG_LED_SET	P1_7						//液晶背景光控制
#define	MPU_RS_CH	P2_0						//寄存器选择输入
#define	MPU_RW_CH	P2_1						//读写控制
#define	MPU_ENABLE	P2_2						//使能控制
#define	MPU_PS_CH	P2_3						//串/并传输控制
#define	MPU_RESET	P2_5						//液晶复位控制
#define	LCD_DATA	P0							//液晶数据口
#define LOW			0							//低电平
#define	HIGH		1							//高电平
//-----------------------------------------------
//液晶模块定义集指令//
#define	cClearDisplay	0x01					//清显示指令
#define	cEntryModeSet	0x06					//设置输入模式
#define	cDisplayOnCtrl	0x0c					//设置开显控制
#define	cFunctionSetB	0x30					//功能设定(基本指令)
#define	cFunctionSetE	0x34					//功能设定(扩充指令)
#define	cFuncDrawOn		0x36					//设置绘图功能
//-----------------------------------------------
unsigned char lcdPosX, lcdPosY;					//X,Y坐标
unsigned char halfScr, blStart, basicBlock;		//半屏,下半屏,16*8块

unsigned char code powerOnPhoto [] = {			//开机画面
 0xFF,0xFF,0xFF,0xFE,0x00,0x3E,0x18,0x00,
      0x00,0x00,0x00,0x00,0x1F,0x3F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF2,0x00,0x1E,0x1C,0x00,
      0x00,0x00,0x00,0x00,0x07,0xBF,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF3,0x00,0x0E,0x0C,0x00,
      0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF5,0x80,0x04,0x06,0x00,
      0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFC,0x80,0x00,0x06,0x00,
      0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFE,0xC0,0x00,0x02,0x00,
      0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0x7C,0x00,0x03,0x00,
      0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFD,0x00,0x03,0x00,
      0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFD,0x1C,0x03,0x00,
      0x00,0x00,0x04,0x20,0x00,0x1F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
      0x00,0x00,0x3E,0x2C,0x00,0x0F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
      0x00,0x00,0x7E,0xE9,0x00,0x0F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,
      0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xE0,0x00,
      0x00,0x01,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xCF,0xF8,0xE0,0x00,
      0x00,0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xEF,0xFC,0xE0,0x60,
      0x00,0x03,0xDF,0xFF,0xF8,0x03,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x60,
      0x00,0x03,0xFF,0xF9,0xFC,0x00,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x60,
      0x00,0x00,0x7F,0xF3,0xFE,0x01,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x60,
      0x00,0x00,0x1F,0x7F,0xFE,0x01,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x60,
      0x00,0x00,0x08,0x1F,0xFA,0x01,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xB0,0x60,0x00,0x00,0xE0,
      0x00,0x00,0x00,0x00,0x78,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xD0,0x00,0x00,0x00,0xE0,
      0x00,0x00,0x00,0x00,0x39,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xE0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x01,0xE0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x01,0xE0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x01,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x03,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x07,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x07,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x0F,0x80,
      0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x0F,0x80,
      0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
      0xFF,0xFF,0xFF,0x88,0x00,0x00,0x0E,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0x80,0x00,0x00,0x1C,0x30,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0xA0,0x00,0x00,0x1C,0x38,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0x90,0x00,0x00,0x18,0x38,
      0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,
      0xFF,0xFF,0xFF,0x98,0x00,0x00,0x18,0xFC,
      0x0E,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0x80,0x00,0x00,0x19,0xFD,
      0x1F,0x80,0x00,0x00,0x00,0x00,0x7F,0xFF,
      0xFF,0xFF,0xFF,0xC4,0x00,0x00,0x39,0xFE,
      0xBF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x31,0xFE,
      0xFF,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x38,0xFF,
      0xC7,0x80,0x00,0x00,0x00,0x00,0xBF,0xFF,
      0xFF,0xFF,0xFF,0xD0,0x00,0x00,0x38,0x75,
      0x87,0x80,0x00,0x00,0x00,0x01,0xBF,0xFF,
      0xFF,0xFF,0xFF,0xD0,0x00,0x00,0x38,0x70,
      0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x3C,0xC0,
      0x00,0x30,0x00,0x00,0x00,0x01,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x1F,0xE0,
      0x00,0x20,0x00,0x00,0x00,0x02,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x06,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x04,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x05,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x0B,0xF7,0xFE,
      0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x13,0xF7,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x13,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x11,0xFF,0xFF,
      0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x11,0xFD,0xFF,
      0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,0x18,
      0x00,0x00,0x00,0x00,0x00,0x01,0xBC,0xF7,
      0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x07,0x7F,
      0xFE,0x00,0x00,0x00,0x00,0x03,0xBC,0xFF,
      0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x0F,0xFF,
      0xFE,0xC0,0x00,0x00,0x00,0x03,0xFE,0xEF,
      0xFF,0xFF,0xFF,0xF9,0x00,0x00,0x7F,0xFF,
      0xFF,0xC0,0x00,0x00,0x00,0x03,0xFE,0x6F,
      0xFF,0xFF,0xFF,0xF9,0x00,0x00,0x7F,0xE3,
      0x9F,0xC0,0x00,0x00,0x00,0x03,0xFE,0xFF,
      0xFF,0xFF,0xFF,0xFC,0x00,0x01,0xFF,0xC0,
      0x0F,0xF0,0x00,0x00,0x00,0x07,0xFE,0xFF,
      0xFF,0xFF,0xFF,0xFC,0x00,0x01,0xFE,0xC0,
      0x05,0xFC,0x00,0x00,0x00,0x07,0xCE,0xFF,
      0xFF,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0xCB,
      0x4D,0xFF,0x80,0x00,0x00,0x07,0xFE,0xFF,
      0xFF,0xFF,0xFF,0xFE,0x00,0x03,0xFC,0x00,
      0x00,0xFF,0xC0,0x00,0x00,0x0E,0x00,0xF7,
      0xFF,0xFF,0xFF,0xFE,0x00,0x01,0xC0,0x00,
      0x00,0x0F,0xC0,0x00,0x00,0x06,0x01,0xFF,
      0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x1D,0x00,
      0x00,0x01,0xC0,0x00,0x00,0x0E,0x03,0xFF
};
//-----------------------------------------------
sbit	KEY1 = P3^2;							//按键1定义
sbit	KEY2 = P3^3;							//按键2定义
sbit	KEY3 = P3^4;							//按键3定义
sbit	KEY4 = P3^5;							//按键4定义
sbit	BEEP = P3^7;							//蜂鸣器定义
//-----------------------------------------------
void lcdInit (void);
//初始化LCD子程序
void lcdClear (void);
//清除LCD屏幕子程序
void lcdWriteCommand (unsigned char Command);
//写入控制命令到LCD子程序
//输入参数:控制命令
void lcdWriteData (unsigned char Data);
//写入显示数据到LCD子程序
//输入参数:显示数据
void checkLcdBusy (void);
//检测LCD忙碌子程序
void displayPhoto (unsigned char *bmp);
//全屏显示图形子程序
//输入参数:图形数据
void wrPosition (void);
//坐标写入子程序
void dispString (unsigned char X, Y, speed, unsigned char *msg);
//显示字符串子程序
//输入参数:X=行(0-3), Y=列(0-7), speed=显示速度(毫秒), msg=字符数据
void delayMs (unsigned char ms);
//延时(毫秒)子程序
//输入参数:毫秒数
void delaySec (unsigned char sec);
//延时(秒)子程序
//输入参数:秒数
//===============================================


void main (void)
{
	BG_LED_SET = LOW;
	lcdInit ();
	
	while(1)
	{
		lcdClear();
		displayPhoto(powerOnPhoto);
		delaySec(3);
		lcdClear();
		dispString (0, 0, 1, "┏━━━━━━┓");
		dispString (1, 0, 1, "┃12864LCD测试┃");
		dispString (2, 0, 1, "┃画面人物宝儿┃");
		dispString (3, 0, 1, "┗━━━━━━┛");
		delaySec(5);
	}
}


//===============================================
void lcdInit (void)
{
	MPU_RESET = LOW;
	delayMs(40);
	MPU_RESET = HIGH;
	delayMs(1);
	MPU_PS_CH = HIGH;

	lcdWriteCommand(cFunctionSetE);
	lcdWriteCommand(cFunctionSetB);
	lcdClear();
	lcdWriteCommand(cEntryModeSet);
	lcdWriteCommand(cDisplayOnCtrl);
}
//===============================================
void lcdClear (void)
{
	lcdWriteCommand(cClearDisplay);
}
//===============================================
void lcdWriteCommand (unsigned char Command)
{
	checkLcdBusy();
	MPU_RS_CH = LOW;
	MPU_RW_CH = LOW;
	LCD_DATA = Command;
	MPU_ENABLE = 1;
	delayMs(1);
	MPU_ENABLE = LOW;
}
//===============================================
void lcdWriteData (unsigned char Data)
{
	checkLcdBusy();
	MPU_RS_CH = HIGH;
	MPU_RW_CH = LOW;
	LCD_DATA = Data;
	MPU_ENABLE = HIGH;
	delayMs(1);
	MPU_ENABLE = LOW;
}
//===============================================
void checkLcdBusy (void)
{
	LCD_DATA = 0xff;
	MPU_RS_CH = LOW;
	MPU_RW_CH = HIGH;
	MPU_ENABLE = HIGH;
	while (BUSY_FLAG);
	MPU_ENABLE = LOW;
}
//===============================================
void displayPhoto (unsigned char *bmp)
{
	lcdPosX = 0x80;
	halfScr = 2;
	
	for (;halfScr != 0; halfScr--)
	{
		lcdPosY = 0x80;
		blStart = 32;
		
		for (;blStart != 0; blStart--)
		{
			basicBlock = 16;
			wrPosition ();
			
			for (; basicBlock != 0; basicBlock--)
			{
				lcdWriteData (*bmp++);
			}
			lcdPosY++;
		}
		lcdPosX = 0x88;
	}
	lcdWriteCommand(cFuncDrawOn);
	lcdWriteCommand(cFunctionSetB);
}
//===============================================
void wrPosition (void)
{
	lcdWriteCommand(cFunctionSetE);
	lcdWriteCommand(lcdPosY);
	lcdWriteCommand(lcdPosX);
	lcdWriteCommand(cFunctionSetB);
}
//===============================================
void dispString (unsigned char X, Y, speed, unsigned char *msg)
{
	if (X == 0)
	{
		X = 0x80;
	}
	else if (X == 1)
	{
		X = 0x90;
	}
	else if (X == 2)
	{
		X = 0x88;
	}
	else if (X == 3)
	{
		X = 0x98;
	}
	Y = X + Y;
	lcdWriteCommand(Y);
	while (*msg)
	{
		lcdWriteData(*msg++);
		delayMs(speed);
	}
}
//===============================================
void delayMs (unsigned char ms)
{
	unsigned char i;
	while (--ms)
	{
		for (i = 0; i < 125; i++);
	}
}
//===============================================
void delaySec (unsigned char sec)
{
	unsigned char i;
	while (--sec)
	{
		for (i = 0; i < 200; i++)
		{
			delayMs (6);
		}
	}
}
//===============================================

⌨️ 快捷键说明

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