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

📄 lcd12864.c

📁 EasyARM1138的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 + -