📄 lcddriv.c
字号:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#define Uchar unsigned char
#define Uint unsigned int
void WritByte(unsigned char num);
void SetBit(unsigned char bitnum,unsigned char HorL);
void DelayUS(unsigned char tim);
void DelayOneMS(unsigned int tim);
void inilcd(void);
void clrlcd(void);
Uchar showlitnum(Uchar x, Uchar y, long num, Uchar dot, Uchar length, Uchar color);
/***************************************************************************************
Copyright:None
Author:刘强 Version:1.0 Date:2004/9/2
Description:
lcd图形驱动程序,适用于sed15300系列液晶控制器128*64dot 等,430系列单片机,3.6V供电,并行总线接口,
I/O口模拟X86总线时序。
本程序分3层
第一层由宏定义组成,完成对io操作
第二层由对lcd的基本操作函数组成,完成lcd命令和数据寄存器的读写
第三层进行屏幕写字符、画点画线、写字符串、显示数字和清屏等操作
辅助操作包括延时,初始化。
对外接口仅提供第三层函数和辅助操作函数。
所有液晶操作函数为不可重入函数
***************************************************************************************/
//第一层
#define Uchar unsigned char
#define Uint unsigned int
#define LCDMAX_X 128 //dot on x number
#define LCDMAX_Y 64 //dot on y number
//#define INILCDPORT P4SEL&=~(BIT4+BIT5+BIT6+BIT7);P4DIR|=BIT4+BIT5+BIT6+BIT7;P5SEL=0x00
#define SETRST SetBit(13,1);DelayUS(8) //P4OUT|=BIT4 //reset b10
#define CLRRST SetBit(13,0);DelayUS(8) //P4OUT&=~BIT4
#define SETA0 SetBit(9,1);DelayUS(8) //P4OUT|=BIT5 //display data / control data
#define CLRA0 SetBit(9,0);DelayUS(8) //P4OUT&=~BIT5 // b9
#define SETWR SetBit(10,1);DelayUS(8) //P4OUT|=BIT6 // write signal
#define CLRWR SetBit(10,0);DelayUS(8) //P4OUT&=~BIT6 //b 11
#define SETRD SetBit(8,1);DelayUS(8) //P4OUT|=BIT7 //read signal
#define CLRRD SetBit(8,0);DelayUS(8) //P4OUT&=~BIT7 //8
#define W_DATA(dat) WritByte(dat);DelayUS(10) //P5DIR=0xff;P5OUT=dat //write data from p5
//#define R_DATA(dat) P5DIR=0x0;dat=P5IN //read data from p5
void WritByte(unsigned char num) //gpb 8-15
{
Uint16 temp;
temp=GpioDataRegs.GPBDAT.all;
temp=temp&0x00ff;
temp|=num<<8;
GpioDataRegs.GPBDAT.all=temp;
}
void SetBit(unsigned char bitnum,unsigned char HorL)
{
if(HorL>0)
{GpioDataRegs.GPFDAT.all|=1<<bitnum;} //f13 rest //f9 A0
else
{GpioDataRegs.GPFDAT.all&=~(1<<bitnum);} //f10 wr f8 RD
}
//
//第二层
void lcd_w_cmd(unsigned char cmd)
{
W_DATA(cmd);
CLRA0;
SETRD;
CLRWR;
SETWR;
SETA0;
}
void lcd_w_data(unsigned char data)
{
W_DATA(data);
SETA0;
SETRD;
CLRWR;
SETWR;
}
///程序移植秩序修改以上两层
void DelayUS(unsigned char tim)
{
unsigned char i,j;
for(i=0;i<tim;i++)
{
for(j=0;j<20;j++){}
}
}
void DelayOneMS(unsigned int tim)
{
unsigned int i,j;
for(i=0;i<tim;i++)
{
for(j=0;j<13325;j++){}
}
}
//第三层
void inilcd(void)//参数rstflg =0 不执行强行复位 ,
{ //参数rstflg =1 强行复位
//只使用于 sed15300
EALLOW;
GpioMuxRegs.GPBMUX.all&=0x00ff;
GpioMuxRegs.GPBDIR.all|=0xff00;
GpioMuxRegs.GPBQUAL.all&=0x00ff;
GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8=0;
GpioMuxRegs.GPFMUX.bit.MCLKRA_GPIOF9=0;
GpioMuxRegs.GPFMUX.bit.MFSXA_GPIOF10=0;
GpioMuxRegs.GPFMUX.bit.SPISTEA_GPIOF3=0;
GpioMuxRegs.GPFDIR.bit.GPIOF8=1;
GpioMuxRegs.GPFDIR.bit.GPIOF9=1;
GpioMuxRegs.GPFDIR.bit.GPIOF10=1;
GpioMuxRegs.GPFDIR.bit.GPIOF13=1;
EDIS;
SETWR;
SETRD;
CLRRST;
DelayOneMS(60);
SETRST;
lcd_w_cmd(0xa3);//lcd bias 1/8 :Lcd panel Characteristic
lcd_w_cmd(0xa0);//adc normal :No flip on x-direction(SEG)
lcd_w_cmd(0xc0);//outstatus register normal:No flip on y-direction(COM)
lcd_w_cmd(0x40);//Init Display Line=0:Display RAM"page0-D0" Matched to top line of the LCD
lcd_w_cmd(0x88);//Electronic control Register:Set to the middle of the range
//it may be adjusted for achieving the best display contrast
lcd_w_cmd(0x2f);//Power control:Trun on all the internal power circuit for driving the LCD normally
lcd_w_cmd(0xaf);//display ON/OFF: Turn on the LCd display
}
void clrlcd(void)
{
unsigned char x,y;
for(y=0;y<8;y++)
{
lcd_w_cmd(y+0xb0);//page address
lcd_w_cmd(0x10);//upper-4 column
lcd_w_cmd(0x0);//lower-4 column
W_DATA(0x0);
SETA0;
for(x=0;x<128;x++)
{
CLRWR;
SETWR;
}
}
}
unsigned char LCDlitNUM[30][5];
unsigned char writelitnum(unsigned char x, unsigned char y, unsigned char n, signed char color)/*5*8 */
{
unsigned char i;
unsigned char temp1, temp2;
if (x > 122 || y > 7 || n > 126)
{
return(1);
}
n -= 32;
temp1 = x & 0x0f;
temp2 = ((x >> 4) & 0x0f) + 0x10;
lcd_w_cmd(y + 0xb0);
lcd_w_cmd(temp1);
lcd_w_cmd(temp2);
for(i = 0; i < 5; i++)
{
lcd_w_data(LCDlitNUM[n][i] ^ color);
}
return(0);
}
Uchar showlitnum(Uchar x, Uchar y, long num, Uchar dot, Uchar length, Uchar color)
{
unsigned char lcdbuf[16], signflag;//显示缓冲区,符号标志
signed char i;
if (num < 0)
{
signflag = 0x00;
num =- num;
}
else
{
signflag = 0x01;
}
length--;
for (i = length; i >= 0; i--)
{
if (i == length - dot)
{
lcdbuf[i] = '.';
}
else if(num == 0 && i != length && i < length - dot - 1)
{
lcdbuf[i] = ' ';
}
else
{
lcdbuf[i] = num % 10 + '0';
num /= 10;
}
}
if (signflag == 0)
{
lcdbuf[0] = '-';
}
for (i = 0; i <= length; i++)
{
writelitnum(x, y, lcdbuf[i], color);
x += 5;
}
return(0);
}
//小字库
unsigned char LCDlitNUM[30][5]=
{
/*-- @Terminal6; 此字体下对应的点阵为:宽x高=5x8 --*/
0x00,0x00,0x00,0x00,0x00,/*-- 文字: --*/
0x00,0x00,0x5F,0x00,0x00,/*-- 文字: ! --*/
0x00,0x03,0x00,0x03,0x00,/*-- 文字: " --*/
0x14,0x7F,0x14,0x7F,0x14,/*-- 文字: # --*/
0x00,0x4C,0x7A,0x4F,0x32,/*-- 文字: $ --*/
0x00,0x66,0x16,0x68,0x66,/*-- 文字: % --*/
0x00,0x38,0x4F,0x4D,0x32,/*-- 文字: & --*/
0x00,0x00,0x00,0x03,0x00,/*-- 文字: ' --*/
0x00,0x00,0x3E,0x41,0x00,/*-- 文字: ( --*/
0x00,0x00,0x41,0x3E,0x00,/*-- 文字: ) --*/
0x00,0x1C,0x3E,0x1C,0x00,/*-- 文字: * --*/
0x00,0x08,0x3E,0x08,0x00,/*-- 文字: + --*/
0x00,0x00,0x00,0x60,0x00,/*-- 文字: , --*/
0x00,0x08,0x08,0x08,0x08,/*-- 文字: - --*/
0x00,0x00,0x40,0x00,0x00,/*-- 文字: . --*/
0x00,0x40,0x30,0x0C,0x03,/*-- 文字: / --*/
0x00,0x3E,0x41,0x41,0x3E,/*-- 文字: 0 --*/
0x00,0x42,0x7F,0x40,0x00,/*-- 文字: 1 --*/
0x00,0x62,0x51,0x49,0x46,/*-- 文字: 2 --*/
0x00,0x22,0x49,0x49,0x36,/*-- 文字: 3 --*/
0x00,0x38,0x26,0x7F,0x20,/*-- 文字: 4 --*/
0x00,0x4F,0x49,0x49,0x31,/*-- 文字: 5 --*/
0x00,0x3E,0x49,0x49,0x32,/*-- 文字: 6 --*/
0x00,0x03,0x71,0x09,0x07,/*-- 文字: 7 --*/
0x00,0x36,0x49,0x49,0x36,/*-- 文字: 8 --*/
0x00,0x26,0x49,0x49,0x3E,/*-- 文字: 9 --*/
0x00,0x00,0x24,0x00,0x00,/*-- 文字: : --*/
0x00,0x40,0x24,0x00,0x00/*-- 文字: ; --*/
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -