📄 lcd12864.c
字号:
#include "LCD12864.h"
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_sysctl.h>
#include <hw_gpio.h>
#include <sysctl.h>
#include <gpio.h>
#include <ctype.h>
#define uchar unsigned char
// 将较长的标识符定义成较短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
/**********引脚定义*********/
//sbit lck = P3^5;//锁存信号
/********常用命令及参数定义********/
#define DISPON 0x3f //液晶开显示,与控制器的控制参数设置有关
#define DISPOFF 0x3e //液晶关显示
#define DISPFIRST 0xc0 //显示的初始行设置
#define SETX 0x40 //设置数据地址列指针
#define SETY 0xb8 //设置地址数据页指针
#define LCDBUZY 0x80 //液晶的判忙信号
#define L 0x00 //定义左
#define R 0x40 //定义右
#define LIMIT 0x80
// 定义全局的系统时钟变量
unsigned long TheSysClock1 = 12000000UL;
/**********全局变量************/
uchar cbyte;
uchar statu;
extern uchar char_Table[95][16];
void Date_Control(uchar x)
{
GPIOPinWrite(LCD_DATA,LCD_PDB0|LCD_PDB1|LCD_PDB2|LCD_PDB3|LCD_PDB4|LCD_PDB5|LCD_PDB6|LCD_PDB7,x);
}
void Instruct_Control(uchar x)
{
GPIOPinWrite(LCD_CONTROL,LCD_PCS1|LCD_PCS2|LCD_PRS|LCD_PRD_WR|LCD_PnRST|LCD_PEN|GPIO_PIN_6|GPIO_PIN_7,x);
}
void Lock(uchar x)
{
if((x & 0x01)==0x01)
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,0x01 ); // PD0输出高电平 lck=1
else
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,0x00 ); // PD0输出低电平 lck=0
}
/***************微秒级延时*****************/
void delay(unsigned int time)
{
unsigned int i;
for(i=0;i<time;i++);
}
/***************延时***********************/
void Delay1(unsigned long ulVal)
{
while ( --ulVal != 0 );
}
/***********初始化LCD*******************/
void Lcminit (void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); // 使能GPIOA端口
GPIOPinTypeOut(LCD_DATA,LCD_PDB0|LCD_PDB1|LCD_PDB2|LCD_PDB3|
LCD_PDB4|LCD_PDB5|LCD_PDB6|LCD_PDB7); //将GPIOA定义为输出类型
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF); // 使能GPIOF端口
GPIOPinTypeOut(LCD_CONTROL,LCD_PCS1|LCD_PCS2|LCD_PRS|LCD_PRD_WR|
LCD_PnRST|LCD_PEN|GPIO_PIN_6|GPIO_PIN_7); // 设置GPIOF为输出类型
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); // 使能GPIOD端口
GPIOPinTypeOut(GPIO_PORTD_BASE,GPIO_PIN_0); // 设置PD0为输入类型
cbyte=DISPOFF; //初始化过程先让液晶关显示
WrL(cbyte); //写左关
WrR(cbyte); //写右关
cbyte=DISPON; //让液晶开显示
WrL(cbyte); //写左开
WrR(cbyte); //写右开
cbyte=DISPFIRST; //让液晶显示第一行
WrL(cbyte); //写左第一
WrR(cbyte); //写右第一
Lcmcls(); //
Locatexy(0,0); //
}
/***************LCD清屏********************/
void Lcmcls(void)
{
uchar i,j;
for(i=0;i<8;i++)
{
delay(6);
for(j=0;j<LIMIT;j++)
{
delay(6);
Wrdata(0x0,i,j);
}
}
}
/*****************读数据函数*********************/
uchar Readdata()
{
char a;
GPIOPinTypeIn(LCD_DATA , GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); // 设置PA输入类型
Delay1(1 * (TheSysClock1 / 20000));
a=GPIOPinRead(LCD_DATA , GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 );
GPIOPinTypeOut(LCD_DATA ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 ); // 设置PA为输出类型
return(a);
}
/**************写左区***************/
void WrL(uchar x)
{
//P0=0xFF;//P0口送FF,准备读
Date_Control(0xFF);
//lck = 0;
Lock(0x00);
//P1 = 0x2a;//ELCD=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -