標題:
ST7571 JLX128*128液晶屏的STM32驅(qū)動程序 寄存器版和庫函數(shù)版
[打印本頁]
作者:
Sanada
時間:
2018-11-24 13:08
標題:
ST7571 JLX128*128液晶屏的STM32驅(qū)動程序 寄存器版和庫函數(shù)版
分享下JLX高性價比的液晶的驅(qū)動程序,這款是模擬IIC驅(qū)動的,操作很方便
單片機源程序如下:
/* 液晶模塊型號:JLX128128G-610-PN-IIC
I2C接口
驅(qū)動IC是:ST7571
//單片機:STM32F103RBT6
*/
#include <stm32f10x_lib.h>
#include <sys.h>
#include <delay.h>
#include <JLX128128G_610_PN_IIC.h>
#include <chinese_code.h>
#include <image.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//等待按鍵,3個按鍵,有任何一個按鍵按下都可以進入下一步
void waitkey(void)
{
repeat:
if(key2==1&&key3==1&&key4==1) goto repeat;
else delay_ms(600);
}
void transfer(int data1)
{
int i;
for(i=0;i<8;i++)
{
LCD_SCL=0;
if(data1&0x80) LCD_SDA=1;
else LCD_SDA=0;
LCD_SCL=1;
LCD_SCL=0;
data1=data1<<1;
}
LCD_SDA=0;
LCD_SCL=1;
LCD_SCL=0;
}
void start_flag()
{
LCD_SCL=1; /*START FLAG*/
LCD_SDA=1; /*START FLAG*/
LCD_SDA=0; /*START FLAG*/
}
void stop_flag()
{
LCD_SCL=1; /*STOP FLAG*/
LCD_SDA=0; /*STOP FLAG*/
LCD_SDA=1; /*STOP FLAG*/
}
//寫命令到液晶顯示模塊
void transfer_command(uchar com)
{
start_flag();
transfer(0x78);
transfer(0x80);
transfer(com);
stop_flag();
}
//寫數(shù)據(jù)到液晶顯示模塊
void transfer_data(uchar dat)
{
start_flag();
transfer(0x78);
transfer(0xC0);
transfer(dat);
stop_flag();
}
void initial_lcd()
{
LCD_RST=0;
delay_ms(1);
LCD_RST=1;
delay_ms(10);
transfer_command(0x2c);
delay_ms(200);
transfer_command(0x2e);
delay_ms(200);
transfer_command(0x2f);
delay_ms(10);
transfer_command(0xae); //顯示關
transfer_command(0x38); //模式設置
transfer_command(0xb8); //85HZ
transfer_command(0xc8); //行掃描順序
transfer_command(0xa0); //列掃描順序
transfer_command(0x44); //Set initial COM0 register
transfer_command(0x00);
transfer_command(0x40); //Set initial display line register
transfer_command(0x00);
transfer_command(0xab);
transfer_command(0x67);
transfer_command(0x27); //粗調(diào)對比度,可設置范圍0x20~0x27
transfer_command(0x81); //微調(diào)對比度
transfer_command(0x28); //微調(diào)對比度的值,可設置范圍0x00~0x3f
transfer_command(0x56); //0x56 1/11 bias
transfer_command(0xf3);
transfer_command(0x04);
transfer_command(0x93);
transfer_command(0xaf); //顯示開
}
void lcd_address(uchar page,uchar column)
{
column=column;
page=page-1;
transfer_command(0xb0+page);
transfer_command(((column>>4)&0x0f)+0x10);
transfer_command(column&0x0f);
}
void clear_screen()
{
uchar i,j;
for(j=0;j<16;j++)
{
lcd_address(j+1,0);
for(i=0;i<128;i++)
{
transfer_data(0x00);
transfer_data(0x00);
}
}
}
//顯示8x16的點陣的字符串,括號里的參數(shù)分別為(頁,列,字符串指針)
void display_string_8x16(u8 page,u8 column,u8*text)
{
u8 i=0,j,k,n;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
for(n=0;n<2;n++)
{
lcd_address(page+n,column);
for(k=0;k<8;k++)
{
transfer_data(ascii_table_8x16[j][k+8*n]);
transfer_data(ascii_table_8x16[j][k+8*n]);
}
}
i++;
column+=8;
}
else
i++;
if(column>127)
{
column=0;
page+=2;
}
}
}
//寫入一組16x16點陣的漢字字符串(字符串表格中需含有此字)
//括號里的參數(shù):(頁,列,漢字字符串)
void display_string_16x16(u8 page,u8 column,u8 *text)
{
u8 i,j,k;
u16 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>127)
{
column =0;
page +=2;
}
if(address !=1)
{
for(k=0;k<2;k++)
{
lcd_address(page+k,column);
for(i=0;i<16;i++)
{
transfer_data(Chinese_code_16x16[address]);
transfer_data(Chinese_code_16x16[address]);
address++;
}
}
j +=2;
}
else
{
for(k=0;k<2;k++)
{
lcd_address(page+k,column);
for(i=0;i<16;i++)
{
transfer_data(0x00);
transfer_data(0x00);
}
}
j++;
}
column +=16;
}
}
//顯示16x16點陣的漢字或者ASCII碼8x16點陣的字符混合字符串
//括號里的參數(shù):(頁,列,字符串)
void display_string_8x16_16x16(u8 page,u8 column,u8 *text)
{
u8 temp[3];
u16 i=0;
while(text[i] !='\0')
{
if(text[i]>0x7e)
{
temp[0]=text[i];
temp[1]=text[i+1];
temp[2]='\0'; //漢字為兩個字節(jié)
display_string_16x16(page,column,temp); //顯示漢字
column +=16;
i +=2;
if(column>127)
{
column =0;
page +=2;
}
}
else
{
temp[0]=text[i];
temp[1]='\0'; //字母占一個字節(jié)
display_string_8x16(page,column,temp); //顯示字母
column +=8;
i++;
if(column>127)
{
column =0;
page +=2;
}
}
}
}
void display_32x32(u8 page,u8 column,u8 *dp)
{
u8 i,j;
for(j=0;j<4;j++)
{
lcd_address(page+j,column);
for(i=0;i<32;i++)
{
transfer_data(*dp);
transfer_data(*dp);
dp++;
}
}
}
void display_graphic(u8 *dp)
{
u8 i,j;
for(j=0;j<16;j++)
{
lcd_address(j+1,0);
for(i=0;i<128;i++)
{
transfer_data(*dp);
transfer_data(*dp);
dp++;
}
}
}
//==========主程序==========================================
int main(void)
{
Stm32_Clock_Init(9); //8MHZ*9倍頻=72MHz
delay_init(72); //72MHz
MCU_Port_initial();
initial_lcd();
while(1)
{
clear_screen();
display_graphic(bmp2);
waitkey();
clear_screen();
display_32x32(1,16,jing32);
display_32x32(1,48,lian32);
display_32x32(1,80,xun32);
display_string_16x16(5,1,"深圳市晶聯(lián)訊電子有限公司是集研發(fā)、生產(chǎn)、銷售于一體的從事液晶顯示屏及液晶顯示模塊的高科技公司。");
waitkey();
clear_screen();
display_string_8x16(1,1,"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+-,-./:;<=>?@[\]^_^{|}~0123456789ABCDFGHIJKLMNOPQRSTUVWXYZ");
waitkey();
clear_screen();
display_string_8x16_16x16(1,1,"深圳市晶聯(lián)訊電子 JLX128128G-610 128x128點陣 視區(qū):59.4x59.4mm帶16x16點陣中文 字庫,或8x16或5x7點陣ASCII碼,四灰度級顯示功能。");
waitkey();
}
}
復制代碼
所有資料51hei提供下載:
128128改庫函數(shù)版本.rar
(304.32 KB, 下載次數(shù): 168)
2018-11-24 15:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
JLX128128G-610-PN-IIC-STM32.7z
(148.29 KB, 下載次數(shù): 116)
2018-11-24 13:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
yvtf608
時間:
2020-1-12 13:24
下載試一下能不能點亮
作者:
cylon
時間:
2020-2-20 15:56
下來看看能不能驅(qū)起來
作者:
海嵌
時間:
2020-3-2 18:45
你好,我想問一下,顯示內(nèi)容的灰度是怎么設置的,初始已經(jīng)設置成Gray-Scale mode了,說明書好像只說了灰度模式需要2個字節(jié)每8個像素,黑白模式只需1個字節(jié)
作者:
新生者
時間:
2020-11-17 15:18
正需要,下載參考下資源文件
作者:
lmn2005
時間:
2024-5-18 08:40
顯示屏的對比度一般,灰度實在沒有多大意義。
作者:
dontium
時間:
2024-7-26 10:51
謝謝樓主提供這么好的資料。
作者:
eb900001
時間:
2025-3-19 09:37
學習了,正是需要的資料,很不錯,感謝分享,下載了!�。�!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1