0.png (25.88 KB, 下載次數: 60)
下載附件
2016-11-16 21:02 上傳
本文件分四個部分 生成一個HEX文件
萬年歷完整版.rar
(65.46 KB, 下載次數: 124)
2016-11-16 16:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- //--------------------------LCD_12864.c-------------------------
- // 名稱 :12864LCD顯示驅動程序(不帶字庫)
- //-----------------------------------------------------------------
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD_DB_PORT P0 // 液晶數據線端口DB0-DB7
- #define LCD_START_ROW 0xc0 //起始行命令
- #define LCD_PAGE 0xB8 // 頁指令
- #define LCD_COL 0x40 // 列指令
- bit Reverse_Display=0;//是否反相顯示(白底黑字/黑底白字)
- //液晶引腳定義
- sbit DI=P2^0;
- sbit RW=P2^1;
- sbit E=P2^2;
- sbit CS1=P2^3;
- sbit CS2=P2^4;
- sbit RST=P2^5;
- //---------------------------------------------------------------
- // 檢查LCD是否忙
- //--------------------------------------------------------------
- bit LCD_IS_BUSY()
- {
- LCD_DB_PORT=0xFF;
- RW=1;
- _nop_();
- DI=0;
- E=1;
- _nop_();
- E=0;
- return (bit)(P0&0x80);
- }
- //---------------------------------------------------------------
- // 向LCD寫入一個字節(一般用于發送命令)
- //--------------------------------------------------------------
- void Write_Byte_To_LCD(uchar comand)
- {
- while(LCD_IS_BUSY());
- LCD_DB_PORT=0xFF;
- RW=0;
- _nop_();
- DI=0;
- LCD_DB_PORT=comand;
- E=1;
- _nop_();
- E=0;
- }
- //---------------------------------------------------------------
- // 向LCD寫入數據
- //--------------------------------------------------------------
- void Write_Data_To_LCD(uchar dat)
- {
- while(LCD_IS_BUSY());
- LCD_DB_PORT=0xFF;
- RW=0;
- _nop_();
- DI=1;
- if(!Reverse_Display) //根據Reverse_Display決定是否反相顯示
- LCD_DB_PORT=dat;
- else
- LCD_DB_PORT=~dat;
- E=1;
- _nop_();
- E=0;
- }
- //---------------------------------------------------------------
- // 初始化LCD
- //--------------------------------------------------------------
- void LCD12864_Initialization()
- {
- CS1=1;
- CS2=1;
- Write_Byte_To_LCD(0x38);
- Write_Byte_To_LCD(0x0F);
- Write_Byte_To_LCD(0x01);
- Write_Byte_To_LCD(0x06);
- Write_Byte_To_LCD(LCD_START_ROW);
- }
- //---------------------------------------------------------------
- // 通用顯示函數 從第P頁第L列顯示W個字節數據,具體顯示的數據在r所
- //--------------------------------------------------------------
- void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant
- {
- uchar i;
- if(L<64)
- {
- CS1=1;
- CS2=0;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L);
- if(L+W<64)
- {
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- else
- {
- for(i=0;i<64-L;i++)
- Write_Data_To_LCD(r[i]);
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL);
- for(i=64-L;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- }
- else
- {
- CS1=0;
- CS2=1;
- Write_Byte_To_LCD(LCD_PAGE+P);
- Write_Byte_To_LCD(LCD_COL+L-64);
- for(i=0;i<W;i++)
- Write_Data_To_LCD(r[i]);
- }
- }
- //---------------------------------------------------------------
- // 顯示一個8×16點陣字符
- //--------------------------------------------------------------
- void Display_char(uchar P1,uchar L1,uchar *M) reentrant
- {
- LCD_Show(P1,L1,8,M);
- LCD_Show(P1+1,L1,8,M+8);
- }
- //-------------------------------------------------------------------
- // 顯示一個16×16點陣字符 (漢字上半部分與下半部分分別處在相鄰兩頁中)
- //-------------------------------------------------------------------
- void Display_Word(uchar P2,uchar L2,uchar *M) reentrant
- {
- LCD_Show(P2,L2,16,M);
- LCD_Show(P2+1,L2,16,M+16);
- }
復制代碼
|