您的位置:首页 > 其它

12864带字库显示屏自定义字符显示CGRAM

2015-07-26 16:21 253 查看
/*****************************************************/
//描述:LCD12864的驱动
//作者:小四叶草
//时间:2015/06/30
//CGRAM 字符发生RAM,用户自定义4个16×16字符
//功能:显示自定义的字符
/*****************************************************/
#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 Read_Busy(void);
void WriteCmd12864(Uint16 cmd);
void WriteData12864(Uint16 dat);
void DisplayDdram(uchar *hz);
void DisplayChar();
void CGRAM(void);

uchar A[] = "输出功率:";
uchar A_DATA[] = "123.45";
uchar B[] = "日发电量:";
uchar B_DATA[] = "123.45";
uchar C[] = "本月发电量:";
uchar C_DATA[] = "123.45";
uchar D[] = "总发电量:";
uchar D_DATA[] = "123.45";
uchar danwei[] = " kWh";
uchar danwei_kw[] = " kW";

uchar fanlong[] = {0x10,0x80,0x08,0x80,0x7E,0xFC,0x24,0x80,0x18,0xFC,0xFF,0x04,0x00,0xFC,0x3E,0x80,
0x22,0xF8,0x3E,0x80,0x22,0xF8,0x3E,0x80,0x22,0xFA,0x22,0x82,0x2A,0x82,0x24,0x7E};/*龍,16 X 16 ,逐行式,顺向(高位,低位)*/

uchar guo[] = {0x7F,0xFC,0x40,0x84,0x40,0xA4,0x40,0xA4,0x5F,0xF4,0x40,0x84,0x5E,0xA4,0x52,0xB4,
0x5E,0x64,0x40,0x44,0x46,0xD4,0x59,0x54,0x42,0x24,0x40,0x04,0x7F,0xFC,0x40,0x04};/*"國",0*//* (16 X 16 , 宋体 )*/

void main(void)
{
InitSysCtrl();
InitXintf();
InitXintf16Gpio();
DINT;
InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

ConfigGpio();
InitLcd();
WriteCmd12864(CLEAR_SCREEN);
DELAY_US(50);
DisplayChar();
while(1)
{
//DisplayChar();
}
}

void ConfigGpio(void)
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
GpioCtrlRegs.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(0x0C);
DELAY_US(5);

WriteCmd12864(CLEAR_SCREEN);
DELAY_US(30);

WriteCmd12864(AC_INIT);
DELAY_US(4);

}
void Read_Busy() //读忙标志最高位为1,则busy,不能进行读写操作
{
RS = LOW;
RW = HIGH;
E = HIGH;
while(LCD_DATA & 0X80);
E = LOW;
}
void WriteCmd12864(Uint16 cmd)
{
Read_Busy();
RS = LOW;
RW = LOW;//写数据
E = HIGH;
LCD_DATA  = cmd;
E = LOW;
}

void WriteData12864(Uint16 dat)
{
Read_Busy();
RS = HIGH;
RW = LOW;//写数据
E = HIGH;
LCD_DATA  = dat;
E = LOW;
}

void DisplayChar()
{

WriteCmd12864(0x81);
DisplayDdram(A);

CGRAM();

WriteCmd12864(0x90);
WriteData12864(0x00);
WriteData12864(0x00);

WriteCmd12864(0x88);
WriteData12864(0x00);
WriteData12864(0x02);

WriteCmd12864(0x98);
WriteData12864(0x00);
WriteData12864(0x04);

WriteData12864(0x00);
WriteData12864(0x06);
}
void DisplayDdram(uchar *hz)
{
while(*hz != '\0')
{
WriteData12864(*hz);//地址里面的值
hz++;
}
}
/*======================================================================
自定义函数:CGRAM 自定义显示字符对应地址及编码
地址			显示编码
0x40			0x0000
0x50			0x0002
0x60			0x0004
0x70			0x0006
CGRAM的地址是从0X40开始的,0x40+16 = 0x50;以后的地址就是加16得到的。
======================================================================*/
void CGRAM()
{
uchar i;
WriteCmd12864(0x40);//CGRAM的地址

WriteCmd12864(0x30);//基本指令
for(i=0;i<32;i++)
{
WriteData12864(fanlong[i]); //
}

WriteCmd12864(0x50);
for(i=0;i<32;i++)
{
WriteData12864(guo[i]); //
}

WriteCmd12864(0x60);
for(i=0;i<32;i++)
{
WriteData12864(guo[i]); //
}

WriteCmd12864(0x70);
for(i=0;i<32;i++)
{
WriteData12864(guo[i]); //
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: