|
- /**************************************************************************
-
- THE 1602 CHAR LCD LIB
- File Name: LCD.h
- Modified: NO
- Revision: 1.0
-
- ***************************************************************************/
- #ifndef LCD_CHAR_1602_2005_4_9
- #define LCD_CHAR_1602_2005_4_9
- #include <intrins.h>
- //Port Definitions**********************************************************
- sbit LcdRs = P2^0;
- sbit LcdRw = P2^1;
- sbit LcdEn = P2^2;
- sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口
- //內部等待函數**************************************************************************
- unsigned char LCD_Wait(void)
- {
- LcdRs=0;
- LcdRw=1; _nop_();
- LcdEn=1; _nop_();
- //while(DBPort&0x80);//在用Proteus仿真時,注意用屏蔽此語句,在調用GotoXY()時,會進入死循環,
- //可能在寫該控制字時,該模塊沒有返回寫入完備命令,即DBPort&0x80==0x80
- //實際硬件時打開此語句
- LcdEn=0;
- return DBPort;
- }
- //向LCD寫入命令或數據************************************************************
- #define LCD_COMMAND 0 // Command
- #define LCD_DATA 1 // Data
- #define LCD_CLEAR_SCREEN 0x01 // 清屏
- #define LCD_HOMING 0x02 // 光標返回原點
- void LCD_Write(bit style, unsigned char input)
- {
- LcdEn=0;
- LcdRs=style;
- LcdRw=0; _nop_();
- DBPort=input; _nop_();//注意順序
- LcdEn=1; _nop_();//注意順序
- LcdEn=0; _nop_();
- LCD_Wait();
- }
- //設置顯示模式************************************************************
- #define LCD_SHOW 0x04 //顯示開
- #define LCD_HIDE 0x00 //顯示關
- #define LCD_CURSOR 0x02 //顯示光標
- #define LCD_NO_CURSOR 0x00 //無光標
- #define LCD_FLASH 0x01 //光標閃動
- #define LCD_NO_FLASH 0x00 //光標不閃動
- void LCD_SetDisplay(unsigned char DisplayMode)
- {
- LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
- }
- //設置輸入模式************************************************************
- #define LCD_AC_UP 0x02
- #define LCD_AC_DOWN 0x00 // default
- #define LCD_MOVE 0x01 // 畫面可平移
- #define LCD_NO_MOVE 0x00 //default
- void LCD_SetInput(unsigned char InputMode)
- {
- LCD_Write(LCD_COMMAND, 0x04|InputMode);
- }
- //移動光標或屏幕************************************************************
- /*
- #define LCD_CURSOR 0x02
- #define LCD_SCREEN 0x08
- #define LCD_LEFT 0x00
- #define LCD_RIGHT 0x04
- void LCD_Move(unsigned char object, unsigned char direction)
- {
- if(object==LCD_CURSOR)
- LCD_Write(LCD_COMMAND,0x10|direction);
- if(object==LCD_SCREEN)
- LCD_Write(LCD_COMMAND,0x18|direction);
- }
- */
- //初始化LCD************************************************************
- void LCD_Initial()
- {
- LcdEn=0;
- LCD_Write(LCD_COMMAND,0x38); //8位數據端口,2行顯示,5*7點陣
- LCD_Write(LCD_COMMAND,0x38);
- LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示, 無光標
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫面不動
- }
- //************************************************************************
- void GotoXY(unsigned char x, unsigned char y)
- {
- if(y==0)
- LCD_Write(LCD_COMMAND,0x80|x);
- if(y==1)
- LCD_Write(LCD_COMMAND,0x80|(x-0x40));
- }
- void Print(unsigned char *str)
- {
- while(*str!='\0')
- {
- LCD_Write(LCD_DATA,*str);
- str++;
- }
- }
- /*
- void LCD_LoadChar(unsigned char user[8], unsigned char place)
- {
- unsigned char i;
- LCD_Write(LCD_COMMAND,0x40|(place*8));
- for(i=0; i<8; i++)
- LCD_Write(LCD_DATA,user[i]);
- }
- */
- //************************************************************************
- #endif
復制代碼 |
-
-
-
ds1302時鐘.zip
2018-7-4 14:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
103.29 KB, 下載次數: 13, 下載積分: 黑幣 -5
評分
-
查看全部評分
|