📄 lcd.c
字号:
//*******************************************************************
// Copyright 2004 SHENZHEN UNIVERSITY EDA CENTER
//*******************************************************************
// File Name : lcd.c
// Abstract : LCD命令接口程序
// Modifications :
// Model 1.0
// Rev. Date Coded by
// 0.0.1 04-03-02 K.H.Li frist release
//*******************************************************************
#include "type.h"
#include "mcf5249.h"
#include "base.h"
//#include "sysinit.h"
#include "lcd.h"
//初始化LCD
void LCD_Init(void)
{
uint8 column;
imm2->gpio.G1OR &= ~MCF5249_GPIO56; //LCD_Reset
delay10ms();
imm2->gpio.G1OR |= MCF5249_GPIO56;
delay10ms();
//LCD_WriteCommand(0xae); //LCD display off
LCD_WriteCommand(0x2c); //VC = 1
delay10ms();
LCD_WriteCommand(0x2e); //VR = 1
delay10ms();
LCD_WriteCommand(0x2f); //VF = 1
delay10ms();
LCD_WriteCommand(0x40); //DDRAM line(0)->COM0
LCD_WriteCommand(0xb0); //Page address = 0
LCD_WriteCommand(0x10); //Column address MSB = 0
LCD_WriteCommand(0x00); //Column address LSB = 0
LCD_WriteCommand(0xa0); //ADC = 0
LCD_WriteCommand(0xa6); //REV = 0
LCD_WriteCommand(0xa4); //EON = 0, Normal display
LCD_WriteCommand(0xa2); //BIAS = 0, LCD bias = 1/6
LCD_WriteCommand(0xc0); //SHL = 0
LCD_WriteCommand(0x23); //Regulator Resistor Select
LCD_WriteCommand(0x81); //Set reference voltage mode
LCD_WriteCommand(0x08); //Set reference voltage
delay10ms();
LCD_Clear(0);
LCD_Clear(1);
LCD_Clear(2);
LCD_Clear(3);
LCD_DisplayText("Hello!");
delay1ms();
LCD_WriteCommand(0xaf); //LCD display on
}
//Display USB mode
void LCD_DisplayUSB(void)
{
uint8 column;
LCD_Clear(0);
LCD_Clear(1);
LCD_Clear(2);
LCD_Clear(3);
LCD_WriteCommand(0xb3); //Page address = 3
LCD_WriteCommand(0x10); //Column address MSB = 0
LCD_WriteCommand(0x01); //Column address LSB = 0
delay1ms();
for(column=0; column<15; column++) //Display LOGO
{
LCD_WriteData(logo[column]);
}
delay1ms();
}
//Display MP3 mode
void LCD_DisplayMP3(void)
{
uint8 column;
uint8 min,sec;
LCD_Clear(0);
LCD_Clear(1);
LCD_Clear(2);
LCD_Clear(3);
LCD_WriteCommand(0xb3); //Page address = 3
LCD_WriteCommand(0x10); //Column address MSB = 0
LCD_WriteCommand(0x01); //Column address LSB = 1
delay1ms();
for(column=15; column<30; column++) //Display LOGO
{
LCD_WriteData(logo[column]);
}
for(column=16; column<25; column++)
{
LCD_WriteData(0x00);
}
for(column=24; column<36; column++) //Display OP_STA
{
LCD_WriteData(op_sta[column]>>8);
}
for(column=37; column<47; column++)
{
LCD_WriteData(0x00);
}
min = (MP3Play_min/10)*6; //Display MP3Play minute
for(column=min; column<min+6; column++)
{
LCD_WriteData(figure_16[column]>>8);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
min = (MP3Play_min%10)*6;
for(column=min; column<min+6; column++)
{
LCD_WriteData(figure_16[column]>>8);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData(0x0c); //Display MP3play ':'
LCD_WriteData(0x0c);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
sec = (MP3Play_sec/10)*6; //Display MP3Play second
for(column=sec; column<sec+6; column++)
{
LCD_WriteData(figure_16[column]>>8);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
sec = (MP3Play_sec%10)*6;
for(column=sec; column<sec+6; column++)
{
LCD_WriteData(figure_16[column]>>8);
}
delay1ms();
LCD_WriteCommand(0xb2); //Page address = 2
LCD_WriteCommand(0x11); //Column address MSB = 1
LCD_WriteCommand(0x09); //Column address LSB = 9
delay1ms();
for(column=24; column<36; column++) //Display OP_STA
{
LCD_WriteData(op_sta[column]);
}
for(column=37; column<47; column++)
{
LCD_WriteData(0x00);
}
min = (MP3Play_min/10)*6; //Display MP3Play minute
for(column=min; column<min+6; column++)
{
LCD_WriteData(figure_16[column]);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
min = (MP3Play_min%10)*6;
for(column=min; column<min+6; column++)
{
LCD_WriteData(figure_16[column]);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData(0xc0); //Display MP3play ':'
LCD_WriteData(0xc0);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
sec = (MP3Play_sec/10)*6; //Display MP3Play second
for(column=sec; column<sec+6; column++)
{
LCD_WriteData(figure_16[column]);
}
LCD_WriteData(0x00);
LCD_WriteData(0x00);
sec = (MP3Play_sec%10)*6;
for(column=sec; column<sec+6; column++)
{
LCD_WriteData(figure_16[column]);
}
delay1ms();
}
//Display SMC mode
void LCD_DisplaySMC(void)
{
uint8 column;
LCD_Clear(0);
LCD_Clear(1);
LCD_Clear(2);
LCD_Clear(3);
LCD_WriteCommand(0xb3); //Page address = 3
LCD_WriteCommand(0x10); //Column address MSB = 0
LCD_WriteCommand(0x01); //Column address LSB = 1
delay1ms();
for(column=30; column<45; column++) //Display LOGO
{
LCD_WriteData(logo[column]);
}
for(column=16; column<25; column++)
{
LCD_WriteData(0x00);
}
for(column=0; column<12; column++) //Display OP_STA
{
LCD_WriteData(op_sta[column]>>8);
}
delay1ms();
LCD_WriteCommand(0xb2); //Page address = 2
LCD_WriteCommand(0x11); //Column address MSB = 1
LCD_WriteCommand(0x09); //Column address LSB = 9
delay1ms();
for(column=0; column<12; column++) //Display OP_STA
{
LCD_WriteData(op_sta[column]);
}
delay1ms();
}
//Display text
void LCD_DisplayText(char *text)
{
uint8 i,m,num,column;
uint8 asciitemp[16];
uint16 hanzitemp[16];
uint8 changetemp[16];
uint32 hanzi;
uint8 b1,b0;
uint16 *hanzitext;
LCD_Clear(0);
LCD_Clear(1);
num = 0;
column = 0;
while(text[num]!='\0')
{
b1 = text[num];
if(b1<=0x80)
{
for(i=0; i<16; i++)
{
asciitemp[i] = ascii_16[i+b1*16];
}
for(m=0; m<8; m++)
{
changetemp[m] = ((asciitemp[0]<<(m+8))&0x8000|
(asciitemp[1]<<(m+7))&0x4000|
(asciitemp[2]<<(m+6))&0x2000|
(asciitemp[3]<<(m+5))&0x1000|
(asciitemp[4]<<(m+4))&0x0800|
(asciitemp[5]<<(m+3))&0x0400|
(asciitemp[6]<<(m+2))&0x0200|
(asciitemp[7]<<(m+1))&0x0100)>>8;
}
b1 = 0x10|(column>>4);
b0 = column&0x0f;
LCD_WriteCommand(0xb1); //Page address = 1
LCD_WriteCommand(b1); //Column address MSB
LCD_WriteCommand(b0); //Column address LSB
delay1ms();
for(m=0; m<8; m++)
{
LCD_WriteData(changetemp[m]);
}
for(m=0; m<8; m++)
{
changetemp[m] = ((asciitemp[8]<<(m+8))&0x8000|
(asciitemp[9]<<(m+7))&0x4000|
(asciitemp[10]<<(m+6))&0x2000|
(asciitemp[11]<<(m+5))&0x1000|
(asciitemp[12]<<(m+4))&0x0800|
(asciitemp[13]<<(m+3))&0x0400|
(asciitemp[14]<<(m+2))&0x0200|
(asciitemp[15]<<(m+1))&0x0100)>>8;
}
b1 = 0x10|(column>>4);
b0 = column&0x0f;
LCD_WriteCommand(0xb0); //Page address = 0
LCD_WriteCommand(b1); //Column address MSB
LCD_WriteCommand(b0); //Column address LSB
delay1ms();
for(m=0; m<8; m++)
{
LCD_WriteData(changetemp[m]);
}
num++;
column = column+8;
if(column>=128) return;
}
else
{
b0 = text[num+1];
b1 = b1-0xa0;
b0 = b0-0xa0;
hanzi = 16*((b1-1)*94+(b0-1));
hanzitext = (uint16 *)(FLASH_ADDRESS+0x1b0000);
for(i=0; i<16; i++)
{
hanzitemp[i] = hanzitext[i+hanzi];
}
for(m=0; m<16; m++)
{
changetemp[m] = ((hanzitemp[0]<<(m+8))&0x800000|
(hanzitemp[1]<<(m+7))&0x400000|
(hanzitemp[2]<<(m+6))&0x200000|
(hanzitemp[3]<<(m+5))&0x100000|
(hanzitemp[4]<<(m+4))&0x080000|
(hanzitemp[5]<<(m+3))&0x040000|
(hanzitemp[6]<<(m+2))&0x020000|
(hanzitemp[7]<<(m+1))&0x010000)>>16;
}
b1 = 0x10|(column>>4);
b0 = column&0x0f;
LCD_WriteCommand(0xb1); //Page address = 1
LCD_WriteCommand(b1); //Column address MSB
LCD_WriteCommand(b0); //Column address LSB
delay1ms();
for(m=0; m<16; m++)
{
LCD_WriteData(changetemp[m]);
}
for(m=0; m<16; m++)
{
changetemp[m] = ((hanzitemp[8]<<(m+8))&0x800000|
(hanzitemp[9]<<(m+7))&0x400000|
(hanzitemp[10]<<(m+6))&0x200000|
(hanzitemp[11]<<(m+5))&0x100000|
(hanzitemp[12]<<(m+4))&0x080000|
(hanzitemp[13]<<(m+3))&0x040000|
(hanzitemp[14]<<(m+2))&0x020000|
(hanzitemp[15]<<(m+1))&0x010000)>>16;
}
b1 = 0x10|(column>>4);
b0 = column&0x0f;
LCD_WriteCommand(0xb0); //Page address = 0
LCD_WriteCommand(b1); //Column address MSB
LCD_WriteCommand(b0); //Column address LSB
delay1ms();
for(m=0; m<16; m++)
{
LCD_WriteData(changetemp[m]);
}
num = num+2;
column = column+16;
if(column>=128) return;
}
}
}
//*******************************************************************
//*******************************************************************
//Clear LCD display
void LCD_Clear(uint8 page)
{
uint8 b,column;
if(page>=4) return;
b = 0xb0|page;
LCD_WriteCommand(b); //Page address
LCD_WriteCommand(0x10); //Column address MSB = 0
LCD_WriteCommand(0x00); //Column address LSB = 0
delay1ms();
for(column=0; column<128; column++)
{
LCD_WriteData(0x00);
}
delay1ms();
}
//Write a command to LCD
void LCD_WriteCommand(uint8 data)
{
imm2->gpio.G1OR &= ~MCF5249_GPIO36; //LCD_RS=0
delayIIC();
//Wait for transmit to complete
while((imm->qspi.QDLYR)&MCF5249_QSPI_QDLYR_SPE);
imm->qspi.QAR = 0x0020; //command buffer
imm->qspi.QDR = 0x0e00;
imm->qspi.QAR = 0x0000; //transmit buffer
imm->qspi.QDR = data;
//initiate transfer
imm->qspi.QDLYR |= MCF5249_QSPI_QDLYR_SPE;
}
//Write a data to LCD
void LCD_WriteData(uint8 data)
{
imm2->gpio.G1OR |= MCF5249_GPIO36; //LCD_RS=1
delayIIC();
//Wait for transmit to complete
while((imm->qspi.QDLYR)&MCF5249_QSPI_QDLYR_SPE);
imm->qspi.QAR = 0x0020; //command buffer
imm->qspi.QDR = 0x0e00;
imm->qspi.QAR = 0x0000; //transmit buffer
imm->qspi.QDR = data;
//initiate transfer
imm->qspi.QDLYR |= MCF5249_QSPI_QDLYR_SPE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -