發一個我用開的12864程序,正常使用中。
- /*--------------------------------------------------------------------------
- LCD12864.H
- 128*64 液晶顯示屏
- --------------------------------------------------------------------------*/
- #ifndef __LCD12864_H__
- #define __LCD12864_H__
- /*****************************************************************************/
- //定義參數
- sbit CLK_l = P1^3; //時鐘 6腳
- sbit DAT_l = P1^4; //數據 5腳
- sbit RES_l = P1^0; //復位 17腳
-
- /*******************************************************************************/
- //液晶顯示程序
- /******************************************************************************/
- //發送一個字節(底層函數)
- void write_lcd_byte(uchar bbyte) {
- uchar i;
- for(i=0;i<8;i++){
- DAT_l=bbyte&0x80; //取出最高位
- CLK_l=1;
- CLK_l=0;
- bbyte<<=1; //左移
- }
- }
- /*****************************************************************************/
- //寫指令或數據 (0,指令) (1,數據)
- void write_lcd_code(bit start, uchar ddata) {
- uchar start_data,Hdata,Ldata;
- if(start==0)
- start_data=0xf8; //0:寫指令
- else
- start_data=0xfa; //1:寫數據
- Hdata=ddata&0xf0; //取高四位
- Ldata=(ddata<<4)&0xf0; //取低四位
- write_lcd_byte(start_data); //發送起始信號
- DelayUs(1); //延時是必須的
- write_lcd_byte(Hdata); //發送高四位
- DelayUs(1); //延時是必須的
- write_lcd_byte(Ldata); //發送低四位
- DelayUs(1); //延時是必須的
- }
- /*****************************************************************************/
- //向lcd發送一個字符串,長度64字符之內。
- void write_lcd_word(uchar *str){
- while(*str != '\0'){
- write_lcd_code(1,*str++);
- }
- *str = 0;
- }
- /****************************************************************************/
- //初始化lcd
- void Init_Lcd(void) {
- DelayMs(1); //啟動等待,等lcd講入工作狀態
- write_lcd_code(0,0x30); //8 位介面,基本指令集
- write_lcd_code(0,0x0c); //顯示打開,光標關,反白關
- write_lcd_code(0,0x01); //清屏,將DDRAM的地址計數器歸零
- DelayMs(1); //啟動等待,等lcd講入工作狀態
- }
- /******************************************************************************/
- //清屏函數
- void Clean(){
- uint j=0;
- uchar x,y;
- for(y=0;y<32;y++) {
- write_lcd_code(0,0x36);//功能設置---8BIT控制界面,擴充指令集
- write_lcd_code(0,0x80+y); //行地址
- write_lcd_code(0,0x80); //列地址
- write_lcd_code(0,0x30);
- for(x=0;x<32;x++){
- write_lcd_code(1,0x00);
- }
- }
- }
- void Clr_Lcd(void){
- write_lcd_code(0,0x01);
- DelayMs(1); //啟動等待,等lcd講入工作狀態
- }
- #endif
復制代碼
|