買了塊64X64的lcd,ic是st7567
單片機(jī)源程序如下:
- /* 液晶演示程序JLX6464G-720,串行接口!
- 驅(qū)動(dòng)IC 是:ST7567
- */
- #include <reg52.H>
- #include <intrins.h>
- #include <Ctype.h>
- //=============接口定義======================
- sbit key=P2^0;
- sbit cs1=P1^1;
- sbit reset=P1^0;
- sbit rs=P3^0;
- sbit sclk=P3^1;
- sbit sid=P3^2;
- //==========================================
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- void delay(int i);
- void delay_us(int i);
- char code graphic1[];
- char code graphic2[];
- char code graphic3[];
- uchar code ascii_table_8x16[95][16];
- uchar code ascii_table_5x7[95][5];
- uchar code cheng1[]={
- /*-- 文字: 成 --*/
- /*-- 宋體23; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=31x31 --*/
- /*-- 高度不是 8 的倍數(shù),現(xiàn)調(diào)整為:寬度x 高度=32x32 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,
- 0xFC,0xFC,0x88,0x00,0x00,0x1C,0x78,0xF0,0xE0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0x83,0xC3,0xC3,0x03,0x1F,
- 0xFF,0xFF,0x83,0x03,0x03,0x03,0xC3,0xF3,0xF3,0x63,0x03,0x03,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xFC,0xFF,0x3F,0x00,0x80,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x03,
- 0x9F,0xFF,0xF8,0xF8,0xBE,0x1F,0x07,0x01,0x00,0x00,0xE0,0x20,0x00,0x00,0x20,0x38,
- 0x1F,0x07,0x01,0x00,0x00,0x01,0x01,0x07,0x07,0x23,0x31,0x18,0x0C,0x0E,0x07,0x03,
- 0x01,0x01,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1F,0x3F,0x30,0x00,0x00,0x00,0x00,0x00};
- uchar code gong1[]={
- /*-- 文字: 功 --*/
- /*-- 宋體23; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=31x31 --*/
- /*-- 高度不是8 的倍數(shù),現(xiàn)調(diào)整為:寬度x 高度=32x32 --*/
- 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0x00,
- 0x00,0x00,0x00,0xFE,0xFC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0C,0x04,0x04,
- 0x04,0x84,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0xFE,0xFE,0x04,0x00,0x00,0x00,0x00,
- 0xC0,0xC0,0xC0,0xC0,0xE0,0x60,0x7F,0x3F,0x30,0x30,0x10,0x18,0x18,0x88,0xC0,0xF8,
- 0x7F,0x1F,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,
- 0x01,0x00,0x00,0x00,0x00,0x20,0x20,0x30,0x18,0x0C,0x0C,0x07,0x03,0x01,0x00,0x04,
- 0x04,0x0C,0x0C,0x1C,0x38,0x3C,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- uchar code zhuang1[]={
- /*-- 文字: 狀 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=16x16 --*/
- 0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,
- 0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00};
- uchar code tai1[]={
- /*-- 文字: 態(tài) --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=16x16 --*/
- 0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
- 0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00};
- uchar code shi1[]={
- /*-- 文字: 使 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=16x16 --*/
- 0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
- 0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00};
- uchar code yong1[]={
- /*-- 文字: 用 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=16x16 --*/
- 0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
- 0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00};
- uchar code mao_hao[]={
- /*-- 文字: : (冒號(hào)) --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
- char code num0[]={
- /*-- 文字: 0 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00
- };
- char code num1[]={
- /*-- 文字: 1 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00
- };
- char code num2[]={
- /*-- 文字: 2 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00
- };
- char code num3[]={
- /*-- 文字: 3 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00
- };
- char code num4[]={
- /*-- 文字: 4 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00
- };
- char code num5[]={
- /*-- 文字: 5 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00
- };
- char code num6[]={
- /*-- 文字: 6 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00
- };
- char code num7[]={
- /*-- 文字: 7 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
- };
- char code num8[]={
- /*-- 文字: 8 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00
- };
- char code num9[]={
- /*-- 文字: 9 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x 高=8x16 --*/
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
- };
- /*寫指令到LCD 模塊*/
- void transfer_command(int data1)
- {
- char i;
- cs1=0;
- rs=0;
- for(i=0;i<8;i++)
- {
- sclk=0;
- // delay_us(2);
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- delay_us(2);
- data1=data1<<=1;
- }
- cs1=1;
- }
- /*寫數(shù)據(jù)到LCD 模塊*/
- void transfer_data(int data1)
- {
- char i;
- cs1=0;
- rs=1;
- for(i=0;i<8;i++)
- {
- sclk=0;
- // delay_us(1);
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- // delay_us(1);
- data1=data1<<=1;
- }
- cs1=1;
- }
- /*延時(shí)*/
- void delay(int i)
- {
- int j,k;
- for(j=0;j<i;j++)
- for(k=0;k<110;k++);
- }
- /*延時(shí)*/
- void delay_us(int i)
- {
- int j,k;
- for(j=0;j<i;j++)
- for(k=0;k<1;k++);
- }
- void waitkey()
- {
- repeat:
- if(key==1) goto repeat;
- else delay(3500);
- }
- /*LCD 模塊初始化*/
- void initial_lcd()
- {
- reset=0; /*低電平復(fù)位*/
- delay(100);
- reset=1; /*復(fù)位完畢*/
- delay(100);
- transfer_command(0xe2); /*軟復(fù)位*/
- delay(5);
- transfer_command(0xae); /*開顯示*/
- transfer_command(0x2c); /*升壓步聚1*/
- delay(5);
- transfer_command(0x2e); /*升壓步聚2*/
- delay(5);
- transfer_command(0x2f); /*升壓步聚3*/
- delay(5);
- transfer_command(0x24); /*粗調(diào)對(duì)比度,可設(shè)置范圍0x20~0x27*/
- transfer_command(0x81); /*微調(diào)對(duì)比度*/
- transfer_command(0x1a); /*微調(diào)對(duì)比度的值,可設(shè)置范圍0x00~0x3f*/
- transfer_command(0xa2); /*1/9 偏壓比(bias)*/
- transfer_command(0xc8); /*行掃描順序:從上到下*/
- transfer_command(0xa0); /*列掃描順序:從左到右*/
- transfer_command(0x40); /*起始行:第一行開始*/
- transfer_command(0xaf); /*開顯示*/
- }
- void lcd_address(uchar page,uchar column)
- {
- column=column-1; //我們平常所說的第1 列,在LCD 驅(qū)動(dòng)IC 里是第0 列。所以在這里減去1.
- page=page-1;
- transfer_command(0xb0+page); //設(shè)置頁地址。每頁是8 行。一個(gè)畫面的64 行被分成8 個(gè)頁。我們平常所說的第1 頁,在LCD*/
- transfer_command(((column>>4)&0x0f)+0x10); //設(shè)置列地址的高4 位
- transfer_command(column&0x0f); //設(shè)置列地址的低4 位
- }
- /*全屏清屏*/
- void clear_screen()
- {
- unsigned char i,j;
- for(i=0;i<9;i++)
- {
- lcd_address(1+i,1);
- for(j=0;j<132;j++)
- {
- transfer_data(0x00);
- }
- }
- }
- /*顯示32x32 點(diǎn)陣圖像、漢字、生僻字或32x32 點(diǎn)陣的其他圖標(biāo)*/
- 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); /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8 位的數(shù)據(jù)后列地址自動(dòng)加1*/
- dp++;
- }
- }
- }
- /*顯示16x16 點(diǎn)陣圖像、漢字、生僻字或16x16 點(diǎn)陣的其他圖標(biāo)*/
- void display_graphic_16x16(uchar page,uchar column,uchar reverse,uchar *dp)
- {
- uchar i,j;
- for(j=0;j<2;j++)
- {
- lcd_address(page+j,column);
- for (i=0;i<16;i++)
- {
- if(reverse==1)
- {
- transfer_data(*dp); /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8 位的數(shù)據(jù)后列地址自動(dòng)加1*/
- }
- else
- transfer_data(~*dp);
- dp++;
- }
- }
- }
- /*顯示8x16 點(diǎn)陣圖像、ASCII, 或8x16 點(diǎn)陣的自造字符、其他圖標(biāo)*/
- 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); /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8 位的數(shù)據(jù)后列地址自動(dòng)加1*/
- dp++;
- }
- }
- }
- void display_string_8x16(uint page,uint column,uchar *text)
- {
- uint 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]);/*顯示5x7的ASCII字到LCD 上,y 為頁地址,x 為列地址,最后為數(shù)據(jù)*/
- }
- }
- i++;
- column+=8;
- }
- else
- i++;
- }
- }
- void display_string_5x7(uint page,uint column,uchar *text)
- {
- uint i=0,j,k;
- 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++)
- {
- transfer_data(ascii_table_5x7[j][k]);/*顯示5x7的ASCII字到LCD上,y為頁地址,x 為列地址,最后為數(shù)據(jù)*/
- }
- i++;
- column+=6;
- }
- else
- i++;
- }
- }
- //==================display a piture of 128*64 dots================
- void disp_grap(uchar page,uchar column,uchar *dp)
- {
- int i,j;
- for(i=0;i<8;i++)
- {
- lcd_address(page+i,column);
- for(j=0;j<64;j++)
- {
- transfer_data(*dp);
- dp++;
- }
- }
- }
- void main(void)
- {
- while(1)
- {
- initial_lcd();
- clear_screen();
- disp_grap(1,1,graphic2); //display a picture of 128*64 dots
- waitkey();
- disp_grap(1,1,graphic3); //display a picture of 128*64 dots
- waitkey();
- clear_screen(); //clear all dots
- display_graphic_32x32(3,32*0,cheng1); /*在第1 頁,第49 列顯示單個(gè)漢字"成"*/
- display_graphic_32x32(3,32*1,gong1); /*在第1 頁,第49 列顯示單個(gè)漢字"功"*/
- waitkey();
- clear_screen();
- display_graphic_16x16(1,1,0,zhuang1); /*在第5 頁,第1 列顯示單個(gè)漢字"狀"*/
- display_graphic_16x16(1,(1+16),0,tai1); /*在第5 頁,第17 列顯示單個(gè)漢字"態(tài)"*/
- display_graphic_8x16(1,(1+16*2),mao_hao); /*在第5 頁,第25 列顯示單個(gè)字符":"*/
- display_graphic_16x16(4,(1+16*1),1,shi1); /*在第5 頁,第41 列顯示單個(gè)漢字"使"*/
- display_graphic_16x16(4,(1+16*2),1,yong1); /*在第5 頁,第49 列顯示單個(gè)漢字"用"*/
- display_graphic_8x16(7,(24),num0); /*在第5 頁,第89 列顯示單個(gè)數(shù)字"0"*/
- display_graphic_8x16(7,(24+8*1),num0); /*在第5 頁,第97 列顯示單個(gè)數(shù)字"0"*/
- display_graphic_8x16(7,(24+8*2),mao_hao); /*在第5 頁,第105 列顯示單個(gè)字符":"*/
- display_graphic_8x16(7,(24+8*3),num0); /*在第5 頁,第113 列顯示單個(gè)數(shù)字"0"*/
- display_graphic_8x16(7,(24+8*4),num0); /*在第5 頁,第121 列顯示單個(gè)數(shù)字"0"*/
- waitkey();
- clear_screen();
- disp_grap(1,1,graphic1); //display a picture of 128*64 dots
- waitkey();
- }
- }
- char code graphic1[]={
- /*-- ???????:E:\?????\?????\JLX6464G-720.bmp --*/
- /*-- ??x??=64x64 --*/
- 0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFD,0x25,0x25,0x25,
- 0x25,0x25,0xFD,0x01,0x01,0x01,0x01,0x01,0x09,0xF9,0x49,0x49,0xF9,0x09,0x01,0x41,
- 0x45,0x59,0xC1,0x51,0x4D,0x41,0x01,0x01,0x01,0x01,0x09,0x31,0x01,0x09,0x09,0xF9,
- 0x09,0x09,0x09,0xF9,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
- 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x24,0x24,0x25,0x25,0xFD,0x01,
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
程序.rar
(42.8 KB, 下載次數(shù): 86)
2018-4-9 19:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|