0.png (65.98 KB, 下載次數: 73)
下載附件
2017-2-22 17:43 上傳
完整代碼下載:
12864波形 顯示.zip
(45.33 KB, 下載次數: 38)
2017-2-22 08:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
12864顯示程序如下:
- #include<lcd12864.h>
- /*------------------檢查忙位-----------------------------*/
- void Check_Busy()
- {
- LCD12864_RS=0;
- LCD12864_RW=1;
- LCD12864_E=1;
- LCD12864_DATAPINS=0xff;
- while((LCD12864_DATAPINS&0x80)==0x80);
- LCD12864_E=0;
- }
- /******************************************
- *函數名 :Delay
- *函數功能 :延時
- *輸入 :t
- *輸出 :無
- *說明 :該函數是在12MHz
- *******************************************/
- void Delay(unsigned int t)
- {
- unsigned int i,j ;
- for(i=0;i<t;i++)
- for(j=0;j<10;j++);
- }
- /****************************************************
- * 函 數 名 : LcdWriteCom
- * 函數功能 : 向LCD寫入一個字節的命令
- * 輸 入 : com
- * 輸 出 : 無
- *****************************************************/
- void LcdWriteCom(unsigned char com)
- {
- Check_Busy();
- LCD12864_RS=0;
- LCD12864_RW=0;
- LCD12864_E=1;
- LCD12864_DATAPINS=com;
- Delay(5);
- LCD12864_E=0;
- Delay(5);
- }
- /**********************************************
- * 函 數 名 : LcdWriteData
- * 函數功能 : 向LCD寫入一個字節的數據
- * 輸 入 : dat
- * 輸 出 : 無
- ***********************************************/
- void LcdWriteData(unsigned char dat)
- {
- Check_Busy();
- LCD12864_RS=1;
- LCD12864_RW=0;
- LCD12864_E=1;
- LCD12864_DATAPINS=dat;
- Delay(5);
- LCD12864_E=0 ;
- Delay(5);
- }
- /*******************************************
- *函數名: Lcd_pos
- *函數功能: 定位顯示
- *入口參數: x,y,date
- *輸出參數: 無
- ********************************************/
- void lcd_pos(uchar X,uchar Y)
- {
- uchar pos;
- if(X==0)
- {X=0x80;}
- else if(X==1)
- {X=0x90;}
- else if(X==2)
- {X=0x88;}
- else if(X==3)
- {X=0x98;}
- pos = X+Y;
- LcdWriteCom(pos); //顯示地址
- }
- /****************************************
- * 函 數 名 : LcdInit()
- * 函數功能 : 初始化LCD屏
- * 輸 入 : 無
- * 輸 出 : 無
- ****************************************/
- void LcdInit()
- {
- Delay(2000);
- LcdWriteCom(0x30);
- Delay(10); //選擇基本指令集
- LcdWriteCom(0x30); //選擇8bit數據流
- Delay(5);
- LcdWriteCom(0x0c); //開顯示(無游標、不反白)
- Delay(10);
- LcdWriteCom(0x01); //清除顯示,并且設定地址指針為00H
- Delay(500);
- LcdWriteCom(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
- Delay(0);
- }
- /*------------------顯示字符串--------------------------*/
- void hzkdis(unsigned char code*s)
- {
- while(*s>0)
- {
- LcdWriteData(*s);
- s++;
- Delay(50);
- }
- }
- //------------------清整個GDRAM
- void clrgdram()
- {
- unsigned char x,y ;
- for(y=0;y<64;y++)
- for(x=0;x<16;x++)
- {
- LcdWriteCom(0x34);
- LcdWriteCom(y+0x80); //行地址
- LcdWriteCom(x+0x80); //列地址
- LcdWriteCom(0x30);
- LcdWriteData(0x00);
- LcdWriteData(0x00);
- }
- }
- //------------------------------------------------------------
- void clrscreen()
- {
- LcdWriteCom(0x01);
- Delay(10);
- }
- unsigned char ReadByte(void)
- {
- unsigned char byReturnValue ;
- Check_Busy();
- LCD12864_DATAPINS=0xff ;
- LCD12864_RS=1 ;
- LCD12864_RW=1 ;
- LCD12864_E=0 ;
- LCD12864_E=1 ;
- byReturnValue=LCD12864_DATAPINS ;
- LCD12864_E=0 ;
- return byReturnValue ;
- }
- //增加畫點子程序
- void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
- {
- unsigned char Row,Tier,Tier_bit ;
- unsigned char ReadOldH,ReadOldL ;
- LcdWriteCom(0x34);
- LcdWriteCom(0x36);
- Tier=X>>4 ;
- Tier_bit=X&0x0f ;
- if(Y<32)
- {
- Row=Y ;
- }
- else
- {
- Row=Y-32 ;
- Tier+=8 ;
- }
- LcdWriteCom(Row+0x80);
- LcdWriteCom(Tier+0x80);
- ReadByte();
- ReadOldH=ReadByte();
- ReadOldL=ReadByte();
- LcdWriteCom(Row+0x80);
- LcdWriteCom(Tier+0x80);
- if(Tier_bit<8)
- {
- switch(Color)
- {
- case 0 :
- ReadOldH&=(~(0x01<<(7-Tier_bit)));
- break ;
- case 1 :
- ReadOldH|=(0x01<<(7-Tier_bit));
- break ;
- case 2 :
- ReadOldH^=(0x01<<(7-Tier_bit));
- break ;
- default :
- break ;
- }
- LcdWriteData(ReadOldH);
- LcdWriteData(ReadOldL);
- }
- else
- {
- switch(Color)
- {
- case 0 :
- ReadOldL&=(~(0x01<<(15-Tier_bit)));
- break ;
- case 1 :
- ReadOldL|=(0x01<<(15-Tier_bit));
- break ;
- case 2 :
- ReadOldL^=(0x01<<(15-Tier_bit));
- break ;
- default :
- break ;
- }
- LcdWriteData(ReadOldH);
- LcdWriteData(ReadOldL);
- }
- LcdWriteCom(0x30);
- }
復制代碼 |