|
如題,12864液晶驅(qū)動(dòng)資料,包括軟件程序和資料
LCD12864顯示圖形、文字(請(qǐng)使用keil uvision3或以上版本打開)
0.png (46.53 KB, 下載次數(shù): 59)
下載附件
2018-1-25 00:30 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- //#include <at89x51.h>
- sbit LCD_RS=P1^0;//定義引腳
- sbit LCD_RW=P1^1;
- sbit LCD_E=P1^2;
- sbit PSB =P3^6; //PSB腳為12864-12系列的串、并通訊功能切換,我們使用8位并行接口,PSB=1
- #define LCD_Data P2
- #define Busy 0x80 //用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí)
- void WriteDataLCD(unsigned char WDLCD);
- void WriteCommandLCD(unsigned char WCLCD,BuysC);
- unsigned char ReadDataLCD(void);
- unsigned char ReadStatusLCD(void);
- void LCDInit(void);
- void LCDClear(void);
- void LCDFlash(void);
- void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
- void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
- void DisplayImage (unsigned char code *DData);
- void Delay5Ms(void);
- void Delay400Ms(void);
- code unsigned char uctech[] = {"大雄電子營(yíng)業(yè)部"};
- code unsigned char net[] = {"ic2012*taobao*co"};
- code unsigned char mcu[] = {"專業(yè)元件供應(yīng)商!"};
- code unsigned char qq[] = {" QQ: 571630059 "};
- code unsigned char tmp[]={//128*64點(diǎn)陣圖形數(shù)據(jù)
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
- void main(void)
- {
- Delay400Ms(); //啟動(dòng)等待,等LCD講入工作狀態(tài)
- LCDInit(); //LCM初始化
- Delay5Ms(); //延時(shí)片刻(可不要)
- while(1){
- LCDClear();
- DisplayImage(tmp);//顯示圖形
- Delay400Ms();
- Delay400Ms();
- Delay400Ms();
- Delay400Ms();
- Delay400Ms();
- LCDClear();
- DisplayListChar(0,1,uctech); //顯示字庫(kù)中的中文數(shù)字
- DisplayListChar(0,2,net); //顯示字庫(kù)中的中文數(shù)字
- DisplayListChar(0,3,mcu); //顯示字庫(kù)中的中文
- DisplayListChar(0,4,qq); //顯示字庫(kù)中的中文數(shù)字
- Delay400Ms();
- Delay400Ms();
- Delay400Ms();
- Delay400Ms();
- LCDFlash(); //閃爍效果
- //}
- }
- }
- //寫數(shù)據(jù)
- void WriteDataLCD(unsigned char WDLCD)
- {
- ReadStatusLCD(); //檢測(cè)忙
- LCD_RS = 1;
- LCD_RW = 0;
- LCD_Data = WDLCD;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- }
- //寫指令
- void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
- {
- if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙
- LCD_RS = 0;
- LCD_RW = 0;
- LCD_Data = WCLCD;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- }
- //讀數(shù)據(jù)
- unsigned char ReadDataLCD(void)
- {
- LCD_RS = 1;
- LCD_RW = 1;
- LCD_E = 0;
- LCD_E = 0;
- LCD_E = 1;
- return(LCD_Data);
- }
- //讀狀態(tài)
- unsigned char ReadStatusLCD(void)
- {
- LCD_Data = 0xFF;
- LCD_RS = 0;
- LCD_RW = 1;
- LCD_E = 1;
- while (LCD_Data & Busy); //檢測(cè)忙信號(hào)
- LCD_E = 0;
- return(LCD_Data);
- }
- void LCDInit(void) //LCM初始化
- {
- WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
- WriteCommandLCD(0x01,1); //顯示清屏
- WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
- WriteCommandLCD(0x0C,1); // 顯示開及光標(biāo)設(shè)置
- }
- void LCDClear(void) //清屏
- {
- WriteCommandLCD(0x01,1); //顯示清屏
- WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置
- WriteCommandLCD(0x30,1); // 顯示開及光標(biāo)設(shè)置
- }
- void LCDFlash(void) //閃爍效果
- {
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
- Delay400Ms();
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
- Delay400Ms();
- WriteCommandLCD(0x08,1); //顯示清屏
- Delay400Ms();
- }
- //按指定位置顯示一個(gè)字符
- void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
- {
- if(Y<1)
- Y=1;
- if(Y>4)
- Y=4;
- X &= 0x0F; //限制X不能大于16,Y不能大于1
- switch(Y){
- case 1:X|=0X80;break;
- case 2:X|=0X90;break;
- case 3:X|=0X88;break;
- case 4:X|=0X98;break;
- }
- WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
- WriteDataLCD(DData);
- }
- //按指定位置顯示一串字符
- void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
- {
- unsigned char ListLength,X2;
- ListLength = 0;
- X2=X;
- if(Y<1)
- Y=1;
- if(Y>4)
- Y=4;
- X &= 0x0F; //限制X不能大于16,Y在1-4之內(nèi)
- switch(Y){
- case 1:X2|=0X80;break; //根據(jù)行數(shù)來選擇相應(yīng)地址
- case 2:X2|=0X90;break;
- case 3:X2|=0X88;break;
- case 4:X2|=0X98;break;
- }
- WriteCommandLCD(X2, 1); //發(fā)送地址碼
- while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
- {
- if (X <= 0x0F) //X坐標(biāo)應(yīng)小于0xF
- {
- WriteDataLCD(DData[ListLength]); //
- ListLength++;
- X++;
- Delay5Ms();
- }
- }
- }
- //圖形顯示122*32
- void DisplayImage (unsigned char code *DData){
- unsigned char x,y,i;
- unsigned int tmp=0;
- for(i=0;i<9;){ //分兩屏,上半屏和下半屏,因?yàn)槠鹗嫉刂凡煌枰珠_
- for(x=0;x<32;x++){ //32行
- WriteCommandLCD(0x34,1);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
12864說明書+例子程序.rar
(608.94 KB, 下載次數(shù): 22)
2018-1-24 22:19 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|