📄 lcd.c
字号:
#include "LCD.H"
#include "lpc214x.h"
//
Uchar8 SYSTEMSET_code[8] = {0x30, 0x87, 0x07, 0x28, 0x42, 0xf0, 0x30, 0x00}; //P1-P8参数
Uchar8 SCRTAB_code[10] = {0x00, 0x00, 0xf0, 0x00, 0x40, 0xf0, 0x00, 0x80, 0x00, 0x00}; //P1-P10参数
void InputData (Uchar8 dat) {
IO1PIN =((IO1PIN&0xFF00FFFF)|(dat<<16));
}
/*********************************************************************************************************
** 函数: delay1ms()
** 函数功能 :延时1ms函数
** 入口参数 :count计数初值.
** 出口参数 :无
*********************************************************************************************************/
void Delay1ms(Uint32 count)
{
int i,j;
for(i=0;i<=count;i++)
for(j=0;j<=583;j++);
}
/*********************************************************************************************************
** 函数名称 : LCD_CommandWrite()
** 函数功能 :液晶写控制命令函数
** 入口参数 :cmdx要写的控制字
** 出口参数 :无
*********************************************************************************************************/
void LCD_CommandWrite(Uchar8 CMD)
{
IO1DIR |= Data_1DIR; //2148向LCD传输数据
H_LCD_RD(); //LCD_RD = 1;
InputData(CMD);
H_LCD_A0(); //LCD_A0 = 1;
L_LCD_CS(); //LCD_CS = 0;
L_LCD_WR(); //LCD_WR = 0;
H_LCD_WR(); //LCD_WR = 1;
H_LCD_CS(); //LCD_CS = 1;
}
/*******************************************************************************************************
** 函数名称 : LCD_DataWrite()
** 函数功能 :液晶写数据函数
** 入口参数 :datax要写的数据
** 出口参数 :无
*********************************************************************************************************/
void LCD_DataWrite(Uchar8 DATA)
{
IO1DIR |= Data_1DIR;
H_LCD_RD(); //LCD_RD = 1;
L_LCD_A0(); //LCD_A0 = 0;
InputData(DATA);
L_LCD_CS(); //LCD_CS = 0;
L_LCD_WR(); //LCD_WR = 0;
H_LCD_WR(); //LCD_WR = 1;
H_LCD_CS(); //LCD_CS = 1;
H_LCD_A0(); //LCD_A0 = 1;
}
/*********************************************************************************************************
** 函数名称 : LCD_CommandRead()
** 函数功能 :液晶读命令函数
** 入口参数 :无
** 出口参数 :数据返回到address_cmd中
*********************************************************************************************************/
Uint32 LCD_CommandRead(void)
{
return 0;
}
/*********************************************************************************************************
** 函数名称 : LCD_DataRead()
** 函数功能 :读液晶RAM区数据函数
** 入口参数 :无
** 出口参数 :数据返回到address_data中
*********************************************************************************************************/
Uint32 LCD_DataRead(void)
{
return 0;
}
/*********************************************************************************************************
** 函数名称: LCD_Cursorxy()
** 函数功能 :光标位置
** 入口参数 : x,y为光标的座标
** 出口参数 :无
*********************************************************************************************************/
void LCD_Cursorxy( char x, char y)
{
LCD_DataWrite(CSRW);
LCD_DataWrite(x);
LCD_DataWrite(y);
}
/*********************************************************************************************************
** 函数名称 :LCD_Initial()
** 函数功能 :液晶初始化函数,写8835控制字
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void LCD_Initial()
{
Uchar8 p;
LCD_CommandWrite(SYSTEMSET); //初始化命令
for(p = 0; p < 8; p++)
{
LCD_DataWrite(SYSTEMSET_code[p]);
}
LCD_CommandWrite(SCROLL); //显示区域,
for(p = 0; p < 10; p++)
{
LCD_DataWrite(SCRTAB_code[p]);
}
LCD_CommandWrite(HDOTSCR); //设置点单元卷动位置
LCD_DataWrite(0x00);
LCD_CommandWrite(DISP_OFF); //DISP OFF
LCD_DataWrite(0x54); //FP5 FP4 FP3 FP2 FP1 FP0 FC1 FC0 00 01 10 11
//第3显示区 第2显示区 第1显示区 光标关显示 显示,关闪烁 显示,FR/32Hz闪烁 显示,FR/64Hz闪烁
LCD_CommandWrite(CSRFORM); //设置光标的显示方式及其形状
LCD_DataWrite(0X00); //CRX
LCD_DataWrite(0X00); //CRY
LCD_CommandWrite(DISP_ON); //开显示
LCD_DataWrite(0x57);
LCD_CommandWrite(OVLAY ); //设置合成显示方式
LCD_DataWrite(0x00);
}
/********************************************************************************************************
** 函数名称 : LCD_Clear()
** 函数功能 :清屏函数,清除32KRAM
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void LCD_Clear()
{
int i;
LCD_Cursorxy(0x00,0x00);
LCD_DataWrite(MWRTTE);
for(i=0;i<0x7fff;i++)
LCD_DataWrite(0xff);
}
/*********************************************************************************************************
** 函数名称 : pixelw(),控制320×240的屏,图形区从2580开始
** 函数功能 :LCD绘点.消点子函数
** 入口参数 : x绘点/消点的x座标,y绘点/消点的y座标,attr为1表示在该座标下画一个点,为其它表示消除该座标下的点.
** 出口参数 :无
*********************************************************************************************************/
void pixelw(Uint32 x,Uint32 y, char attr) //描一点 x:0--319 y:0--239
{
Uint32 addr;
Uint32 dat;
addr=y*40+(x)/8+0x2580;
LCD_Cursorxy(addr%256,addr/256);
LCD_CommandWrite(MREAD);
dat=LCD_DataRead();
LCD_Cursorxy(addr%256,addr/256);
LCD_CommandWrite(MWRTTE);
if(attr==0x01)
{
switch (x%8)
{
case 0 :LCD_DataWrite((dat | 0x00400000)>>15);break;
case 1 :LCD_DataWrite((dat | 0x00200000)>>15);break;
case 2 :LCD_DataWrite((dat | 0x00100000)>>15);break;
case 3 :LCD_DataWrite((dat | 0x00080000)>>15);break;
case 4 :LCD_DataWrite((dat | 0x00040000)>>15);break;
case 5 :LCD_DataWrite((dat | 0x00020000)>>15);break;
case 6 :LCD_DataWrite((dat | 0x00010000)>>15);break;
case 7 :LCD_DataWrite((dat | 0x00008000)>>15);break;
}
}
else
{
switch (x%8)
{
case 0 :LCD_DataWrite((dat &~0x00400000)>>15);break;
case 1 :LCD_DataWrite((dat &~0x00200000)>>15);break;
case 2 :LCD_DataWrite((dat &~0x00100000)>>15);break;
case 3 :LCD_DataWrite((dat &~0x00080000)>>15);break;
case 4 :LCD_DataWrite((dat &~0x00040000)>>15);break;
case 5 :LCD_DataWrite((dat &~0x00020000)>>15);break;
case 6 :LCD_DataWrite((dat &~0x00010000)>>15);break;
case 7 :LCD_DataWrite((dat &~0x00008000)>>15);break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -