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

📄 lcddriv.c

📁 2812驱动128*64液晶,把该文件加到工程中
💻 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 + -