#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "DrvTIMER.h"
#include "LCD4884.h"
//---------------------------------------
//函数名称: LCD_init
//函数功能:5110LCD初始化函数
//输 入:无
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_init(void)
{
unsigned char k;
CLR_RES; //LCD复位
for(k=0;k<250;k++);
SET_RES;
LCD_write_byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
LCD_write_byte(0xd0,0);//设置VOP值,室温下的编程范围为3.00-10.68
//Vlcd=3.06+(VOP)*0.06,本例VOP为0B0101 0000为十进制的80,Vlcd=7.86V
LCD_write_byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
LCD_write_byte(0x0C,0);//设定显示配置:普通模式
}
//---------------------------------------
//函数名称: LCD_clear
//函数功能:LCD清屏函数
//输 入:无
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_clear(void)
{
unsigned char t;
unsigned char k;
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD_write_byte(0,1);
}
}
}
//---------------------------------------
//函数名称: LCD_write_byte
//函数功能:使用SPI接口写数据到LCD
//输 入:dat:写入的数据 command: 1-数据/0-命令
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_write_byte(unsigned char dat, unsigned char command)
{
unsigned char i;
CLR_SCE; //使能LCD
if(command==1)
DATE_DC; //DC=1写数据
else
COMMEND_DC; //DC=0写指令
for(i=0;i<8;i++)
{
if(dat&(0x80>>i))
SET_SDIN; //写1
else
CLR_SDIN; //写0
CLR_SCLK;
SET_SCLK; //时钟上升沿写入数据到LCD
}
DATE_DC;
SET_SCE;
SET_SDIN;
}
//---------------------------------------
//函数名称: LCD_write_char
//函数功能:显示英文字符
//输 入:c:显示的字符在font6x8表格中的位置
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_write_char(unsigned char c)
{
unsigned char line;
c-= 32;
for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);
}
//---------------------------------------
//函数名称: LCD_set_XY
//函数功能:设置坐标函数
//输 入:X:0-83 Y:0-5
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0);
LCD_write_byte(0x80 | X, 0);
}
//---------------------------------------
//函数名称: LCD_write_String
//函数功能:显示英文字符串
//输 入:XY:设置坐标(X:0-83 Y:0-5) *s:英文字符串指针(带双引号的英文字符串)
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//-----------------------------------------
void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
LCD_set_XY(X,Y);
while (*s)
{
LCD_write_char(*s);
s++;
}
}
//---------------------------------------
//函数名称: LCD_Disp16_16
//函数功能:写一个16*16的汉字到LCD
//输 入:x,y:写入汉字的地址 index: 写入汉字在han表格中的位置
//输 出:无
//作 者:zxcscm
//日期版本:20120131-01
//---------------------------------------
void LCD_Disp16_16(unsigned char x,unsigned char y,unsigned char index)
{
unsigned char c;
LCD_set_XY(x*8, y);
for(c=0;c<16;c++)
{
LCD_write_byte(han[index*32+c],1);
}
LCD_set_XY(x*8, y+1);
for(c=16;c<32;c++)
{
LCD_write_byte(han[index*32+c],1);
}
}
void GPIOInit()
{
DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );//设置GPA.2~GPA.9为输出模式
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 6, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 7, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 8, E_IO_INPUT );
DrvGPIO_Open( E_GPA, 9, E_IO_INPUT );
DrvGPIO_Open( E_GPC,14, E_IO_OUTPUT );//设置GPC为输出模式
DrvGPIO_Open( E_GPC,15, E_IO_OUTPUT );
DrvGPIO_Open( E_GPC, 6, E_IO_OUTPUT );
DrvGPIO_Open( E_GPC, 7, E_IO_OUTPUT );
}
int main()
{
GPIOInit();
DrvGPIO_SetBit(E_GPC, 6);//作为LCD的电源
DrvGPIO_ClrBit(E_GPC, 7);//作为LCD的地
LCD_init(); //初始化LCD模块
LCD_clear(); //清屏幕
LCD_Disp16_16(0,0,0); //菜
LCD_Disp16_16(2,0,1); //农
LCD_Disp16_16(4,0,2); //助
LCD_Disp16_16(6,0,3); //学
LCD_Disp16_16(8,0,4); //板
LCD_Disp16_16(1,2,5); //祝
LCD_Disp16_16(3,2,6); //愿
LCD_Disp16_16(5,2,7); //园
LCD_Disp16_16(7,2,8); //地
LCD_Disp16_16(0,4,9); //越
LCD_Disp16_16(2,4,10); //来
LCD_Disp16_16(4,4,11); //越
LCD_Disp16_16(6,4,12); //红
LCD_Disp16_16(8,4,13); //火
SET_BackLed; //开背光
while(1)
{
;
}
}