st7565主控的12864液晶驅動程序,全部分享。
0.png (63.97 KB, 下載次數: 110)
下載附件
2017-1-5 22:31 上傳
下載地址:
st7565r-并口.rar
(59.11 KB, 下載次數: 62)
2017-1-2 08:42 上傳
點擊文件名下載附件
12864驅動程序 下載積分: 黑幣 -5
部分源碼預覽:
- /*************************************************************************
- Module name : CH12864F(128*64 dots) COG產品
- Driver IC : ST7565R
- interface : 6800 for 8 bit mcu interface
- ************************************************************************/
- #include<REG52.H>
- #include<INTRINS.H>
- #include"int/ascii0816x.c"
- #include"int/ascii0508x.c"
- #include"int/hanzi1616.c"
- #include"int/photo.c"
- #define uchar unsigned char
- #define uint unsigned int
- #define data P1
-
- sbit cs = P3^0;
- sbit rst = P3^1;
- sbit di = P3^2;
- sbit wr = P3^3;
- sbit rd = P3^4;
-
- // Delay microsecond less than 255us
- void delayUs(uint Tus)
- {
- // If Tus >= 18, the delay is precise, otherwise not!
- if (Tus > 17)
- {
- Tus = Tus/2 - 9;
- if (Tus != 0)
- while(--Tus != 0);
- }
- }
- // Delay Tms ms
- void delayMs(uint Tms)
- {
- uint i;
- while(Tms-- != 0)
- {
- i = 4;
- while(i-- != 0)
- delayUs(250);
- }
- }
-
-
- /****************************reset IC for start****************************/
- void LCD_Reset()
- {
- IE = 0x00;
- rst = 0;
- delayMs(50);
- rst = 1;
- delayMs(50);
- }
- //-----------------寫指令或者數據--------------------
- void write_cmd_dat(uchar cmda,uchar com)
- {
- cs=0;
- di=cmda;
- rd=1;
- wr=0;
- data=com;
- delayUs(2);
- wr=1;
- delayUs(2);
- }
- // set Column address
- void SetCA(uchar Caddr)
- {
- write_cmd_dat(0,Caddr & 0x0F); // Lower 4-bit
- write_cmd_dat(0,(Caddr >> 4) | 0x10); // Higher 4-bit
- }
- // set page address
- void SetPA(uchar Paddr)
- {
- write_cmd_dat(0,0xb0+Paddr);
- }
- //--------------向某頁某列寫數據----------------------------
- void write_data(uint com,uchar page,uchar clum)
- {
- SetPA(page);
- SetCA(clum);
- write_cmd_dat(1,com);
- }
- // Display data RAM page and column address
- void GotoXY(uchar Paddr, uchar Caddr)
- {
- SetPA(Paddr);
- SetCA(Caddr);
- }
- //----------------------組裝測試-------------------------
- void display_test(uchar fst,uchar snd)
- {
- uchar i,j;
- for(j=0;j<8;j++)
- {
- GotoXY(j,0);
- for(i=0;i<128/2;i++)
- {
- write_cmd_dat(1,fst);
- write_cmd_dat(1,snd);
- }
- }
- }
- // Clear LCD screen
- void Clear(void)
- {
- display_test(0x00,0x00);
- delayUs(4);
- }
- // Wait some time and clear the screen
- void wait_and_clear(void)
- {
- delayMs(200);
- Clear();
- }
-
- void lcd_test()
- {
- uchar i;
- uchar code tdata[][2]=
- {
- {0xff,0xff}, // All
- {0x00,0x00}, // None
- {0x00,0xFF}, // Virtical
- {0xff,0x00}, // Virtical
- {0xAA,0xAA}, // Horizontal
- {0x55,0x55}, // Horizontal
- {0xAA,0x55}, // Stars
- {0x55,0xaa}, // Stars
- };
- for(i=0;i<8;i++)
- {
- display_test(tdata[i][0],tdata[i][1]);
- wait_and_clear();
- }
- }
- //------------------顯示方框-----------------------
- void lcd_kuang(void)
- {
- uchar i,j;
- for(i=0;i<8;i++)
- {
- for(j=0;j<128;j++)
- {
- if((j==0)||(j==127)) { GotoXY(i,j); write_cmd_dat(1,0xff);}
- if(i==0)
- {
- if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x01);}}
- if(i==7)
- {
- if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x80);}}
- }
- }
- }
- //------------------顯示8X16點陣字符串-------------------------
- void disp_ascii0816(uchar *ptrAscii, uchar startP, uchar startC)
- {
- uchar i,xclum;
- uint index;
- GotoXY(startP,startC);
- while((*ptrAscii) != '\0')
- {
- index = ((*ptrAscii)-0x20)*16;
-
- for(i=0;i<16;i++)
- {
- if(i%8==0)
- {
- xclum=startC;
- }
- write_data(AsciiDot0816[index++],startP+i/8,xclum++);
- }
- startC+=8;
- ptrAscii++;
- // if((128-xclum)<8)
- // {
- // startP+=2;
- // startC=0;
- //if(startP<8)
- // {Gotoxy(startP,startC);}
- // }
- }
- }
- //------------------顯示5X8點陣字庫串-------------------------
- void disp_ascii0508(uchar *ptrAscii, uchar startP, uchar startC)
- {
- uchar i;
- uint index;
- GotoXY(startP,startC);
- while((*ptrAscii) != '\0')
- {
- index = ((*ptrAscii) - 0x20)*5;
- for (i=0;i<5;i++)
- {
- write_data(AsciiDot0508[index++],startP,startC++);
- }
- ptrAscii++;
- if((128-startC)<6)
- {
- startP++;
- startC=0;
- if(startP<8)
- {GotoXY(startP,startC);}
- }
- }
- }
- //------------------顯示一個漢字-------------------------
- void display_hanzi(uchar *p,uchar startP, uchar startC)
- {
- uchar i,j;
- for(i=0;i<2;i++)
- {
- GotoXY(startP+i,startC);
- for(j=0;j<16;j++)
- {write_cmd_dat(1,*p++);}//發送數據
- }
- }
- //------------------顯示一個反白漢字-------------------------
- void display_hanzi_fan(uchar *p,uchar startP, uchar startC)
- {
- uchar i,j;
- for(i=0;i<2;i++)
- {
- GotoXY(startP+i,startC);
- for(j=0;j<16;j++)
- {write_cmd_dat(1,~*p++);}//發送數據
- }
- }
- //-------------顯示一副128X32點陣的圖片------------------------------
- void display_photo(uchar *p,uchar startP,uchar startC)
- {
- uchar i,j;
- GotoXY(startP,startC);
- for(i=0;i<4;i++)
- {
- for(j=0;j<128;j++)
- {
- write_data(*p++, startP+i, startC+j);
- }
- }
- }
-
- void Init_IC()
- {
- cs = 0;
- P1 = 0xFF;
- LCD_Reset();
- write_cmd_dat(0,0xE2); //initialize interal function
- write_cmd_dat(0,0xA2); //LCD Bias selection(1/65 Duty,1/9Bias)
- write_cmd_dat(0,0xA0); //ADC selection(SEG0->SEG128) //改變SEG掃描方向
- write_cmd_dat(0,0xC8); //SHL selection(COM64->COM0) //改變COM掃描方向
- write_cmd_dat(0,0x2F); //power control(VB,VR,VF=1,1,1)
- write_cmd_dat(0,0x25); //Regulator resistor select 110 內部電位器調節
- write_cmd_dat(0,0x81); //set reference voltage mode
- write_cmd_dat(0,0x50); //set reference voltage //改變此值可以改變效果
- write_cmd_dat(0,0x40); //Initial Display Line
- write_cmd_dat(0,0xAF); //Display on
- Clear();
- }
-
- void main()
- {
-
- uint i;
- Init_IC();
- while(1)
- {
- lcd_kuang();
- delayMs(500);
- Clear();
- lcd_test(); // lcd 組裝測試
- display_hanzi(shen,0,0); //顯示16X16點陣漢字
- display_hanzi(zhen,0,16);
- display_hanzi(chuan,0,32);
- display_hanzi(hang,0,48);
- display_hanzi(dian,0,64);
- display_hanzi(zi,0,80);
- display_hanzi(ke,0,96);
- display_hanzi(ji,0,112);
- disp_ascii0816("CH12864F-COG",2,0);
- display_hanzi(gong,2,96);
- display_hanzi(yi,2,112);
- disp_ascii0816("st7565r-",4,0);
- display_hanzi(bing,4,64);
- display_hanzi(kou,4,80);
- display_hanzi(chuan1,4,96);
- display_hanzi(kou,4,113);
- display_hanzi_fan(ci,6,0);
- display_hanzi_fan(chun,6,16);
- disp_ascii0816(":",6,32);
- disp_ascii0508("54.0 x 50.0 x 7",6,48);
- disp_ascii0508("44.0 x 29.0 mm",7,48);
- delayMs(500);
- Clear();
- display_hanzi(shen,0,0); //顯示16X16點陣漢字
- display_hanzi(zhen,0,16);
- display_hanzi(chuan,0,32);
- display_hanzi(hang,0,48);
- display_hanzi(dian,0,64);
- display_hanzi(zi,0,80);
- display_hanzi(ke,0,96);
- display_hanzi(ji,0,112);
- disp_ascii0816("CH12864F-COG",2,0);
- display_hanzi(gong,2,96);
- display_hanzi(yi,2,112);
- display_photo(tupian,4,0); //顯示一副128X32點陣的圖片
- delayMs(500);
- Clear();
- }
- }
復制代碼
|