您的位置:首页 > 其它

12864带字库显示屏显示汉字程序

2017-03-10 09:32 323 查看
/*****************************************************/

//描述:LCD12864的驱动

//作者:happygrilclh

//时间:2015/06/30

/*****************************************************/

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File

#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

#define LCD_DATA (*((volatile Uint16 *)0x45EF))

#define E GpioDataRegs.GPBDAT.bit.GPIO61

#define RW GpioDataRegs.GPADAT.bit.GPIO27

#define RS GpioDataRegs.GPBDAT.bit.GPIO60

#define LOW 0

#define HIGH 1

#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H

#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置

#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)

#define FUN_MODE 0x30 //工作模式:8位基本指令集

#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白

#define DISPLAY_OFF 0x08 //显示关

#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1

#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH

#define SET_DD_AC 0x80

#define DELAY_MS(A) DELAY_US((long double)A * 1000.0L)

#define DELAY_100US(B) DELAY_US((long double)B * 100.0L)

void InitXintf(void);

void ConfigGpio(void);

void InitLcd(void);

void WriteCmd12864(Uint16 cmd);

void WriteData12864(Uint16 dat);

void DisplayDdram(uchar *hz);

void DisplayChar();

uchar A[] = {"输  出功率:"};

uchar B[] = {"当天发电量:"};

uchar C[] = {"当月发电量:"};

uchar D[] = {"总  发电量:"};

void main(void)

{

InitSysCtrl();

InitXintf();

InitXintf16Gpio();

DINT;

InitPieCtrl();

IER = 0x0000;

IFR = 0x0000;

ConfigGpio();

InitLcd();

DisplayChar();

while(1);

}

void ConfigGpio(void)

{

EALLOW;

GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;

GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;

GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;

GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;

Gpio
4000
CtrlRegs.GPAMUX2.bit.GPIO27 = 0;

GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;

EDIS;

}

void InitLcd(void)

{

DELAY_100US(5);

WriteCmd12864(FUN_MODE);

DELAY_US(5);

WriteCmd12864(FUN_MODE);

DELAY_US(5);

WriteCmd12864(DISPLAY_ON);

DELAY_US(5);

WriteCmd12864(CLEAR_SCREEN);

DELAY_US(20);

WriteCmd12864(AC_INIT);

DELAY_US(4);

}

void WriteCmd12864(Uint16 cmd)

{

RS = LOW;

RW = LOW;//写数据

E = HIGH;

LCD_DATA  = cmd;

E = LOW;

}

void WriteData12864(Uint16 dat)

{

RS = HIGH;

RW = LOW;//写数据

E = HIGH;

LCD_DATA  = dat;

E = LOW;

}

void DisplayChar()

{

WriteCmd12864(0x80);

DELAY_US(5);

DisplayDdram(A);

WriteCmd12864(0x90);

DELAY_US(5);

DisplayDdram(B);

WriteCmd12864(0x88);

DELAY_US(5);

DisplayDdram(C);

WriteCmd12864(0x98);

DELAY_US(5);

DisplayDdram(D);

}

void DisplayDdram(uchar *hz)

{

while(*hz != '\0')

{

WriteData12864(*hz);//地址里面的值

hz++;

DELAY_US(3);

}

}

有问题,请咨询,个人公众号。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: