標(biāo)題:
lcd19264液晶的單片機(jī)測(cè)試程序
[打印本頁(yè)]
作者:
筱豆先生
時(shí)間:
2017-11-14 11:37
標(biāo)題:
lcd19264液晶的單片機(jī)測(cè)試程序
19264液晶屏程序測(cè)試單片機(jī)源程序如下:
#include <reg52.h>
#include <intrins.h>
#include <Ctype.h>
/* 按鍵*/
sbit key=P2^4;
/*19264引腳定義*/
sbit cs1=P1^1;
sbit reset=P1^0;
sbit rs=P2^0;
sbit sclk=P2^6;
sbit sid=P2^5;
sbit Rom_SCK=P1^3;
sbit Rom_OUT=P1^4;
sbit Rom_IN=P1^5;
sbit Rom_CS=P1^2;
/* */
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code ascii_table_5x8[95][5];
uchar code bmp1[];
uchar code z[];
uchar code k[];
uchar code y[];
uchar code b[];
uchar code yi[];
//LCD模塊 寫(xiě)指令
void transfer_command(int data1)
{
char i;
cs1=0;
rs=0;
for(i=0;i<8;i++)
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1=data1<<=1;
}
cs1=1;
}
//寫(xiě)數(shù)據(jù)到LCD模塊
void transfer_data(int data1)
{
char i;
cs1=0;
rs=1;
for(i=0;i<8;i++)
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1=data1<<=1;
}
cs1=1;
}
//??
void delay(int i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<110;k++);
}
void waitkey()
{
//repeat:
if(key==1)while(key==1); //等待按鍵,如果沒(méi)按就一直循環(huán)等待,或用while(key==1)不用goto也可
if(key==0)while(key==0);
else delay(400);
}
//LCD 初始化
void initial_lcd()
{
reset=0; //地點(diǎn)評(píng)復(fù)位
delay(100);
reset=1; //復(fù)位完畢
delay(100);
transfer_command(0xe2); //軟復(fù)位
delay(500);
transfer_command(0x2f); //打開(kāi)內(nèi)部生壓
delay(500);
transfer_command(0x81); //微調(diào)對(duì)比度
transfer_command(0x45); //對(duì)比度值0x00~0xFF
transfer_command(0xeb); //1/9 偏壓比(bias)
transfer_command(0xc4); //?????:???? oxc2
transfer_command(0xa0); //?????:????
transfer_command(0xaf); //開(kāi)顯示
}
void lcd_address(uchar page,uchar column)//行 列
{
column=column-1; //????????1 ?,?LCD ??IC ???0 ?????????1.
page=page-1;
transfer_command(0xb0+page); //?????????8 ???????64 ????8 ???????????1 ?,?LCD ??IC ???0 ?,???????1
transfer_command(((column>>4)&0x0f)+0x10); //???????4 ?
transfer_command(column&0x0f); //???????4 ?
}
//????
void clear_screen()
{
unsigned char i,j;
for(i=0;i<9;i++)
{
lcd_address(1+i,1);
for(j=0;j<192;j++)
{
transfer_data(0x00);
}
}
}
void display_graphic_192x64(uchar *dp)
{
uchar i,j;
for(i=0;i<9;i++)
{
lcd_address(1+i,1);
for(j=0;j<192;j++)
{
transfer_data(*dp);
dp++;
}
}
}
void display_graphic_32x32(uchar page,uchar column,uchar *dp)
{
uchar i,j;
for(j=0;j<4;j++)
{
lcd_address(page+j,column);
for (i=0;i<31;i++)
{
transfer_data(*dp); //????LCD,?????8 ???????????1
dp++;
}
}
}
//??16x16 ????????????16x16 ???????
void display_graphic_16x16(uchar page,uchar column,uchar *dp)
{
uchar i,j;
for(j=0;j<2;j++)
{
lcd_address(page+j,column);
for (i=0;i<16;i++)
{
transfer_data(*dp); //????LCD,?????8 ???????????1
dp++;
}
}
}
//?? 8x16 ?????ASCII, ?8x16 ????????????
void display_graphic_8x16(uchar page,uchar column,uchar *dp)
{
uchar i,j;
for(j=0;j<2;j++)
{
lcd_address(page+j,column);
for (i=0;i<8;i++)
{
transfer_data(*dp); //????LCD,?????8 ???????????1
dp++;
}
}
}
void display_string_5x8(uint page,uint column,uchar reverse,uchar *text)
{
uchar i=0,j,k,data1;
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
lcd_address(page,column);
for(k=0;k<5;k++)
{
if(reverse==1) data1=~ascii_table_5x8[j][k];
else data1=ascii_table_5x8[j][k];
transfer_data(data1);
}
if(reverse==1) transfer_data(0xff);
else transfer_data(0x00);
i++;
column+=6;
}
else
i++;
}
}
void send_command_to_ROM( uchar datu )
{
uchar i;
for(i=0;i<8;i++ )
{
if(datu&0x80)
Rom_IN = 1;
else
Rom_IN = 0;
datu = datu<<1;
Rom_SCK=0;
Rom_SCK=1;
}
}
/****??????IC ?????????(1 ???)***/
static uchar get_data_from_ROM( )
{
uchar i;
uchar ret_data=0;
Rom_SCK=1;
for(i=0;i<8;i++)
{
Rom_OUT=1;
Rom_SCK=0;
ret_data=ret_data<<1;
if( Rom_OUT )
ret_data=ret_data+1;
else
ret_data=ret_data+0;
Rom_SCK=1;
}
return(ret_data);
}
/*?????(addrHigh:?????,addrMid:?????,addrLow:?????)?????DataLen ???
???? pBuff ???*/
/*????*/
void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uchar addrLow,uchar *pBuff,uchar DataLen )
{
uchar i;
Rom_CS = 0;
cs1=1;
Rom_SCK=0;
send_command_to_ROM(0x03);
send_command_to_ROM(addrHigh);
send_command_to_ROM(addrMid);
send_command_to_ROM(addrLow);
for(i = 0; i < DataLen; i++ )
*(pBuff+i) =get_data_from_ROM();
Rom_CS = 1;
}
/******************************************************************/
ulong fontaddr=0;
void display_GB2312_string(uchar y,uchar x,uchar *text)
{
uchar i= 0;
uchar addrHigh,addrMid,addrLow ;
uchar fontbuf[32];
while((text[i]>0x00))
{
if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1))
{
/*????(GB2312)?????IC ????????????:*/
/*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
/*????8 ???????????,????????*/
fontaddr = (text[i]- 0xb0)*94;
fontaddr += (text[i+1]-0xa1)+846;
fontaddr = (ulong)(fontaddr*32);
addrHigh = (fontaddr&0xff0000)>>16; /*????8?,?24?*/
addrMid = (fontaddr&0xff00)>>8; /*????8?,?24?*/
addrLow = fontaddr&0xff; /*????8?,?24?*/
get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*?32 ??????,??
"fontbuf[32]"*/
display_graphic_16x16(y,x,fontbuf);/*?????LCD?,y ????,x ????,fontbuf[]?
??*/
i+=2;
x+=16;
}
else if((text[i]>=0x20) &&(text[i]<=0x7e))
{
unsigned char fontbuf[16];
fontaddr = (text[i]- 0x20);
fontaddr = (unsigned long)(fontaddr*16);
fontaddr = (unsigned long)(fontaddr+0x3b7c0);
addrHigh = (fontaddr&0xff0000)>>16;
addrMid = (fontaddr&0xff00)>>8;
addrLow = fontaddr&0xff;
get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,16 );/*?16 ??????,??
"fontbuf[32]"*/
display_graphic_8x16(y,x,fontbuf);/*??8x16?ASCII??LCD?,y ????,x ????,
fontbuf[]???*/
i+=1;
x+=8;
}
else
i++;
}
}
void main(void)
{
initial_lcd();
clear_screen(); //clear all dots
display_string_5x8(1,1,0,"welcome use");
display_graphic_32x32(3,10,z);
display_graphic_32x32(3,45,k);
display_graphic_32x32(3,80,y);
display_graphic_32x32(3,115,b);
display_graphic_32x32(3,150,yi);
display_string_5x8(8,157,0,"key in");
waitkey();
while(1)
{
// clear_screen();
display_graphic_192x64(bmp1);
display_string_5x8(1,1,1," IAP15W4K58S4 ");display_string_5x8(1,120,1,"Step shaking");
display_string_5x8(3,1,0," Select>>>>");
display_string_5x8(3,100,1,"1.Mode 1");
display_string_5x8(4,100,0,"2.Mode 2" );
display_string_5x8(5,100,0,"3.Mode 3");
display_string_5x8(6,100,0,"4.Mode 4");
display_string_5x8(7,100,0,"5.Mode 5");
display_string_5x8(8,1,1,"Make By KBQ in WWW house");
waitkey();
// clear_screen();
display_graphic_192x64(bmp1);
display_GB2312_string(1,1,"JLX19264G-333,帶中文字庫(kù)");
display_GB2312_string(3,1,"16X16簡(jiǎn)體漢字庫(kù),或8X16點(diǎn)");
display_GB2312_string(5,1,"陣ASCII,或5x8點(diǎn)陣ASCII碼");
display_GB2312_string(7,1,"{<!@#$%^&*()_-+]/;.,?[>}");
waitkey();
}
}
uchar code ascii_table_5x8[95][5]={
/*??ASCII ??:5x8 ??*/
0x00,0x00,0x00,0x00,0x00,//- - //space
0x00,0x00,0x4f,0x00,0x00,//-!-
0x00,0x07,0x00,0x07,0x00,//-"-
0x14,0x7f,0x14,0x7f,0x14,//-#-
0x24,0x2a,0x7f,0x2a,0x12,//-$-
0x23,0x13,0x08,0x64,0x62,//-%-
0x36,0x49,0x55,0x22,0x50,//-&-
0x00,0x05,0x07,0x00,0x00,//-'-
0x00,0x1c,0x22,0x41,0x00,//-(-
0x00,0x41,0x22,0x1c,0x00,//-)-
0x14,0x08,0x3e,0x08,0x14,//-*-
0x08,0x08,0x3e,0x08,0x08,//-+-
0x00,0x50,0x30,0x00,0x00,//-,-
0x08,0x08,0x08,0x08,0x08,//---
0x00,0x60,0x60,0x00,0x00,//-.-
0x20,0x10,0x08,0x04,0x02,//-/-
0x3e,0x51,0x49,0x45,0x3e,//-0-
0x00,0x42,0x7f,0x40,0x00,//-1-
0x42,0x61,0x51,0x49,0x46,//-2-
0x21,0x41,0x45,0x4b,0x31,//-3-
0x18,0x14,0x12,0x7f,0x10,//-4-
0x27,0x45,0x45,0x45,0x39,//-5-
0x3c,0x4a,0x49,0x49,0x30,//-6-
0x01,0x71,0x09,0x05,0x03,//-7-
0x36,0x49,0x49,0x49,0x36,//-8-
0x06,0x49,0x49,0x29,0x1e,//-9-
0x00,0x36,0x36,0x00,0x00,//-:-
0x00,0x56,0x36,0x00,0x00,//-;-
0x08,0x14,0x22,0x41,0x00,//-<-
0x14,0x14,0x14,0x14,0x14,//-=-
0x00,0x41,0x22,0x14,0x08,//->-
0x02,0x01,0x51,0x09,0x06,//-?-
0x32,0x49,0x79,0x41,0x3e,//-@-
0x7e,0x11,0x11,0x11,0x7e,//-A-
0x7f,0x49,0x49,0x49,0x36,//-B-
0x3e,0x41,0x41,0x41,0x22,//-C-
0x7f,0x41,0x41,0x22,0x1c,//-D-
0x7f,0x49,0x49,0x49,0x41,//-E-
0x7f,0x09,0x09,0x09,0x01,//-F-
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
19264測(cè)試.rar
(41.87 KB, 下載次數(shù): 117)
2017-11-14 20:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
zzdren
時(shí)間:
2018-5-8 15:03
贊,多謝樓主分享 黑幣各種不夠用
作者:
zgs660429
時(shí)間:
2019-12-12 21:48
謝謝你,還不會(huì)用。
作者:
上帝的左手
時(shí)間:
2021-1-5 17:25
這個(gè)再整點(diǎn)測(cè)試的圖片及電路要求就更好了。先下來(lái)看看,希望不會(huì)浪費(fèi)我的黑豆
。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1