竞赛时写的几个程序分享了液晶驱动LCD12864.docx
《竞赛时写的几个程序分享了液晶驱动LCD12864.docx》由会员分享,可在线阅读,更多相关《竞赛时写的几个程序分享了液晶驱动LCD12864.docx(15页珍藏版)》请在冰豆网上搜索。
![竞赛时写的几个程序分享了液晶驱动LCD12864.docx](https://file1.bdocx.com/fileroot1/2022-11/15/c2ec2c62-58eb-4c38-8fed-a4651b297f69/c2ec2c62-58eb-4c38-8fed-a4651b297f691.gif)
竞赛时写的几个程序分享了液晶驱动LCD12864
竞赛时写的几个程序,分享了——液晶驱动LCD12864
暑假为竞赛准备的,写得不好……大家多多赐教……
ARMLPC2103,编译环境为ADS
/*******************************************************************************************************
**Filename:
LCD12864_Driver.c
**Createdby:
LiPeng
**Createddate:
2008-09-07
**Version:
1.0
**Descriptions:
TheOriginalVersion
**
**------------------------------------------------------------------------------------------------------
**SystemFunction:
LCDDriver------液晶驱动
** 液晶型号:
12864
**使用LPC2103连接方式:
(串行)
** SID:
P0.6(MOSI),SCLK:
P0.4(SCK0)
** PSB:
GND(serial),/RST:
VCC,CS:
VCC
** LEDA:
VCC,LEDK:
GND
**
**------------------------------------------------------------------------------------------------------
**Modifiedby:
**Modifieddate:
**Version:
**Descriptions:
**
********************************************************************************************************/
#include"config.h"
/*系统常量定义*/
/*PINSEL0引脚功能选择寄存器常量*/
#defineSCK0 (1<<8) //P0.4定义位,01
#defineMOSI0 (1<<12) //P0.6定义位,01
/*SPI_SPCRSPI控制寄存器常量*/
#defineCPHA (1<<3) //时钟相位控制
#defineCPOL (1<<4) //时钟极性控制
#defineMSTR (1<<5) //主模式选择
#defineLSBF (1<<6) //字节的移动方向
#defineSPI_MODEMSTR //选择SPI接口模式为主模式、SCK高有效空闲状态为0,上升沿采样,MSB传输在前
/*变量定义*/
uint8uiDisp_Addr=0x00;//液晶显示ddram地址
/*********************************************************************************************************
**Functionname:
delay
**Descriptions:
延时函数
**Inputparameters:
uiDly
**Outputparameters:
无
*********************************************************************************************************/
voiddelay(uint32uiDly)
{
uint32i;
for(;uiDly>0;uiDly--)
for(i=0;i<5000;i++);
}
/*********************************************************************************************************
**Functionname:
LCD_SPI_Initial
**Descriptions:
SPI接口初始化
**Inputparameters:
无
**Outputparameters:
无
*********************************************************************************************************/
voidLCD_SPI_Initial()
{
PINSEL0|=(SCK0|MOSI0);//设置P0.4为SPI0串行时钟端,P0.6为SPI主出从入端
SPI_SPCCR=8; //SPI时钟计数寄存器
SPI_SPCR=SPI_MODE; //SPI控制寄存器
}
/*********************************************************************************************************
**Functionname:
LCD_Serial_Send
**Descriptions:
主控CPU向LCD串行发送数据或指令
**Inputparameters:
uidata 待发送数据或指令;uimark 数据或指令标志,1为指令,0为数据
**Outputparameters:
无
*********************************************************************************************************/
voidLCD_Serial_Send(uint8uidata,uint8uimark)
{
uint8uiComorData;
switch(uimark)
{
case0:
uiComorData=0xfa;
break;
case1:
uiComorData=0xf8;
break;
}
SPI_SPDR=uiComorData; //写入SPI数据寄存器,发送数据或指令判断控制字
while((SPI_SPSR&0x80)==0);//等待发送完毕(SPIF传输完成标志置位)
delay
(1);
SPI_SPDR=(uidata&0xf0); //写入SPI数据寄存器,启动发送高4位
while((SPI_SPSR&0x80)==0);//等待发送完毕(SPIF传输完成标志置位)
delay
(1);
SPI_SPDR=((uidata&0x0f)<<4);//写入SPI数据寄存器,启动发送低4位
while((SPI_SPSR&0x80)==0);//等待发送完毕(SPIF传输完成标志置位)
delay
(1);
}
/*********************************************************************************************************
**Functionname:
LCD_Initial
**Descriptions:
LCD初始化
**Inputparameters:
无
**Outputparameters:
无
*********************************************************************************************************/
voidLCD_Initial() //LCD初始化
{
LCD_Serial_Send(0x30,1);//功能设置:
基本指令集
LCD_Serial_Send(0x04,1);//点设定:
显示字符/光标从左到右移位,DDRAM地址加1
LCD_Serial_Send(0x0c,1);//显示设定:
开显示,不显示光标位置
LCD_Serial_Send(0x01,1);//清DDRAM
LCD_Serial_Send(0x02,1);//DDRAM地址归位
LCD_Serial_Send(0x80,1);//显示地址设置
}
/*********************************************************************************************************
**Functionname:
LCD_Erase
**Descriptions:
清LCDDDRAM寄存器
**Inputparameters:
无
**Outputparameters:
无
*********************************************************************************************************/
voidLCD_Erase()
{
LCD_Serial_Send(0x01,1);
}
/*********************************************************************************************************
**Functionname:
LCD_Position_Select
**Descriptions:
选择LCDDDRAM地址
**Inputparameters:
uiline,uirow显示行和列的值
**Outputparameters:
无
*********************************************************************************************************/
voidLCD_Position_Select(uint8uiline,uint8uirow)
{
if(uiline==1)
uiDisp_Addr=0x80+uirow-1;
elseif(uiline==2)
uiDisp_Addr=0x90+uirow-1;
elseif(uiline==3)
uiDisp_Addr=0x88+uirow-1;
else
uiDisp_Addr=0x98+uirow-1;
}
/*********************************************************************************************************
**Functionname:
LCD_Disp_Char
**Descr