/* 液晶模块型号:JLX19296G-380
并行接口
驱动 IC 是:ST75256
版权所有:晶联讯电子:网址 http://www.jlxlcd.cn;
*/
#include
#include
#include
sbit cs1 = P3 ^ 4; /*3.4 接口定义*/
sbit reset = P3 ^ 5; /*3.3 接口定义*/
sbit rs = P3 ^ 3; /*接口定义*/
sbit rd = P3 ^ 0; /*接口定义*/
sbit wr = P2 ^ 1; /*接口定义。另外 P1.0~1.7 对应 DB0~DB7*/
sbit key = P2 ^ 0; /*按键接口,P2.0 口与 GND 之间接一个按键*/
#define uchar unsigned char
#define uint unsigned int
uchar code bmp10[];
/*延时:1 毫秒的 i 倍*/
void delay(int i)
{
int j, k;
for (j = 0; j
for (k = 0; k
;
}
/*延时:1us 的 i 倍*/
void delay_us(int i)
{
int j, k;
for (j = 0; j
for (k = 0; k
;
}
/*等待一个按键,我的主板是用 P2.0 与 GND 之间接一个按键*/
void waitkey()
{
repeat: if (key == 1)
goto repeat;
else
delay(2000);
}
//=============transfer command to LCM===============
void transfer_command_lcd(int data1)
{
cs1 = 0;
rs = 0;
rd = 0;
delay_us(1);
wr = 0;
P1 = data1;
rd = 1;
delay_us(1);
cs1 = 1;
rd = 0;
}
//-----------transfer data to LCM---------------
void transfer_data_lcd(int data1)
{
cs1 = 0;
rs = 1;
rd = 0;
delay_us(1);
wr = 0;
P1 = data1;
rd = 1;
delay_us(1);
cs1 = 1;
rd = 0;
}
void initial_lcd()
{
lcd_reset = 0;
delay(100);
lcd_reset = 1;
delay(100);
transfer_command_lcd(0x30); //EXT=0
transfer_command_lcd(0x94); //Sleep out
transfer_command_lcd(0x31); //EXT=1
transfer_command_lcd(0xD7); //Autoread disable
transfer_data_lcd(0X9F); //
transfer_command_lcd(0x32); //Analog SET
transfer_data_lcd(0x00); //OSC Frequency adjustment
transfer_data_lcd(0x01); //Frequency on booster capacitors->6KHz
transfer_data_lcd(0x03); //Bias=1/11
transfer_command_lcd(0x20); // Gray Level(灰度级)
transfer_data_lcd(0x01);
transfer_data_lcd(0x03);
transfer_data_lcd(0x05);
transfer_data_lcd(0x07);
transfer_data_lcd(0x09);
transfer_data_lcd(0x0b);
transfer_data_lcd(0x0d);
transfer_data_lcd(0x10);
transfer_data_lcd(0x11);
transfer_data_lcd(0x13);
transfer_data_lcd(0x15);
transfer_data_lcd(0x17);
transfer_data_lcd(0x19);
transfer_data_lcd(0x1b);
transfer_data_lcd(0x1d);
transfer_data_lcd(0x1f);
transfer_command_lcd(0x30); //EXT=0
transfer_command_lcd(0x75); //Page Address setting(设置页地址)
transfer_data_lcd(0X00); // XS=0
transfer_data_lcd(0X14); // XE=159 0x28
transfer_command_lcd(0x15); //Clumn Address setting(设置列地址)
transfer_data_lcd(0X00); // XS=0
transfer_data_lcd(0Xff); // XE=256
transfer_command_lcd(0xBC); //Data scan direction(数据扫描方向)
transfer_data_lcd(0x00); //MX.MY=Normal
transfer_data_lcd(0xA6); //(LCD 反显示)
transfer_command_lcd(0xCA); //Display Control(显示控制)
transfer_data_lcd(0X00); //
transfer_data_lcd(0X9F); //Duty=160
transfer_data_lcd(0X20); //Nline=off
transfer_command_lcd(0xF0); //Display Mode(显示模式)
transfer_data_lcd(0X10); //10=Monochrome Mode,11=4Gray
transfer_command_lcd(0x81); //EV control
transfer_data_lcd(0x3F); //VPR[5-0]
transfer_data_lcd(0x04); //VPR[8-6]
transfer_command_lcd(0x20); //Power control(功率控制)
transfer_data_lcd(0x0B); //D0=regulator ; D1=follower ; D3=booste, on:1 off:0
delay_us(100);
transfer_command_lcd(0xAF); //Display on (LCD 显示)
}
/*写 LCD 行列地址:X 为起始的列地址,Y 为起始的行地址,x_total,y_total 分别为列地址及行地址的起点到
终点的差值 */
void lcd_address(int x, int y, x_total, y_total)
{
x = x - 1;
y = y + 3;
transfer_command_lcd(0x15); //Set Column Address
transfer_data_lcd(x);
transfer_data_lcd(x + x_total - 1);
transfer_command_lcd(0x75); //Set Page Address
transfer_data_lcd(y);
transfer_data_lcd(y + y_total - 1);
transfer_command_lcd(0x30);
transfer_command_lcd(0x5c);
}
/*清屏*/
void clear_screen()
{
int i, j;
lcd_address(0, 0, 256, 17);
for (i = 0; i
{
for (j = 0; j
{
transfer_data_lcd(0x00);
delay(5);
}
}
}
void test(int x, int y)
{
int i, j;
lcd_address(x, y, 256, 16);
for (i = 0; i
{
for (j = 0; j
{
transfer_data_lcd(0xff);
}
}
}
void display_string_16x16(uchar column, uchar page, uchar *text)
{
uchar i, j, k;
uint address;
j = 0;
while (text[j] != '\0')
{
i = 0;
address = 1;
while (Chinese_text_16x16[i] > 0x7e)
{
if (Chinese_text_16x16[i] == text[j])
{
if (Chinese_text_16x16[i + 1] == text[j + 1])
{
address = i * 16;
break;
}
}
i += 2;
}
if (column > 255)
{
column = 0;