0xbc指令 st75256_st75256 - 涂Sir的个人空间 - OSCHINA - 中文开源技术交流社区

/* 液晶模块型号: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;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值