?? lcd_drv.c
字號(hào):
/*******************************************************************
一、程序說明:
LCD驅(qū)動(dòng)功能模塊
二、硬件連接:
P0.1-------------CLK
P0.2-------------DA
P0.2-------------CS
*******************************************************************/
#define uint8 unsigned char
#define uint16 unsigned int
#include <Reg935.h>
sbit DA = P0^2 ;
sbit CLK = P0^1 ;
sbit CS = P0^3 ;
#define LCD_DA_H() DA=1
#define LCD_DA_L() DA=0
#define LCD_CS_L() CS=0
#define LCD_CS_H() CS=1
#define LCD_CLK_H() CLK=1
#define LCD_CLK_L() CLK=0
code uint8 DISP_TAB[20] = { 0xF5,0x05,0xB6,0xF2,0x63,0xD3,0xD7,0x70,
// 0 1 2 3 4 5 6 7
0xF7,0xF3,0x77,0xC7,0x95,0xE6,0x97,0x17,
// 8 9 A B C D E F
0x02,0x00,0x37};
// - "" P
void WRITE_LCD_DATA(uint8 addr,uint8 dd);//寫數(shù)據(jù)
/****************************************************************************
* 名稱:SEND_LCD_COMMAND()
* 功能:發(fā)送LCD控制命令
輸入:無
輸出:無
* 說明:發(fā)送LCD控制命令
*
****************************************************************************/
void SEND_LCD_COMMAND(uint8 command) //寫指令
{
uint8 i;
LCD_CLK_H();
LCD_DA_H();
LCD_CS_H();
LCD_CS_L();
LCD_CLK_L();
LCD_DA_H(); LCD_CLK_H(); LCD_CLK_L();
LCD_DA_L(); LCD_CLK_H(); LCD_CLK_L();
LCD_DA_L(); LCD_CLK_H(); LCD_CLK_L();
for(i=0;i<8;i++){
if(command&0x80)
LCD_DA_H();
else
LCD_DA_L();
LCD_CLK_H();
LCD_CLK_L();
command<<=1;
}
LCD_CLK_H();
LCD_CLK_L();
LCD_CLK_H();
LCD_CS_H();
}
/****************************************************************************
* 名稱:LCD_INI()
* 功能:LCD初始化功能模塊
輸入:無
輸出:無
* 說明:LCD初始化功能模塊
*
****************************************************************************/
void LCD_INI(void)
{
P0M1&=~(0x0E);
P0M2|=(0x0E);
SEND_LCD_COMMAND(0x01); //SYS EN
SEND_LCD_COMMAND(0x03); //LCD ON
SEND_LCD_COMMAND(0x18); //RC OSC
SEND_LCD_COMMAND(0x20|(2<<2)); //BIAS ab=10
}
/****************************************************************************
* 名稱:LCD_SHOW_INT()
* 功能:在LCD屏幕上顯示整形數(shù)據(jù)
輸入:整形數(shù)據(jù)
輸出:無
* 說明:在LCD屏幕上顯示整形數(shù)據(jù)
*
****************************************************************************/
void LCD_SHOW_INT(int Data)
{
uint8 temp_int[4]="";
temp_int[0]=Data/1000;
temp_int[1]=(Data-temp_int[0]*1000)/100;
temp_int[2]=(Data-temp_int[0]*1000-temp_int[1]*100)/10;
temp_int[3]=(Data-temp_int[0]*1000-temp_int[1]*100-temp_int[2]*10);
WRITE_LCD_DATA(0,DISP_TAB[temp_int[0]]);
WRITE_LCD_DATA(1,DISP_TAB[temp_int[1]]);
WRITE_LCD_DATA(2,DISP_TAB[temp_int[2]]);
WRITE_LCD_DATA(3,DISP_TAB[temp_int[3]]);
}
/****************************************************************************
* 名稱:WRITE_LCD_DATA()
* 功能:寫入一個(gè)字節(jié)的數(shù)據(jù)到指定位
* 入口參數(shù):
addr-----------------------指定的LCD位
dd-------------------------數(shù)據(jù)
* 出口參數(shù):無
* 說明:采用連續(xù)寫方式(單次為半個(gè)字節(jié)),但是每次寫入一個(gè)字節(jié)
****************************************************************************/
void WRITE_LCD_DATA(uint8 addr,uint8 dd) //寫數(shù)據(jù)
{
uint8 index_LCD_bit=addr*2;//-------------轉(zhuǎn)換為L(zhǎng)CD的位地址
uint8 i;
LCD_CS_H();
LCD_CLK_H();
LCD_DA_H();
LCD_CS_L();
LCD_DA_H(); LCD_CLK_L(); LCD_CLK_H();
LCD_DA_L(); LCD_CLK_L(); LCD_CLK_H();
LCD_DA_H(); LCD_CLK_L(); LCD_CLK_H();
for(i=0;i<6;i++){
if(index_LCD_bit&0x20)
LCD_DA_H();
else
LCD_DA_L();
LCD_CLK_L();
LCD_CLK_H();
index_LCD_bit<<=1;
}
for(i=0;i<8;i++){
if(dd&0x01)
LCD_DA_H();
else
LCD_DA_L();
LCD_CLK_L();
LCD_CLK_H();
dd=dd>>1;
}
LCD_CS_H();
}
/****************************************************************************
* 名稱:write_LCD_timer()
* 功能:顯示時(shí)間,分和秒
* 入口參數(shù):
min------------------------分(0-60)
sec------------------------秒(0-60)
have_P2--------------------':'分秒分隔符號(hào)(0x00,0x01)
0x01-------------有分隔符
0x00-------------沒有分隔符
* 出口參數(shù):無
* 說明:無
****************************************************************************/
void write_LCD_timer(uint8 min,uint8 sec,uint8 have_P2)
{
uint8 temp_int[4]="";
temp_int[0]=min/10;
temp_int[1]=min-temp_int[0]*10;
temp_int[2]=sec/10;
temp_int[3]=sec-temp_int[2]*10;
WRITE_LCD_DATA(0,DISP_TAB[temp_int[0]]);
if(have_P2)
WRITE_LCD_DATA(1,DISP_TAB[temp_int[1]]|0x08);
else
WRITE_LCD_DATA(1,DISP_TAB[temp_int[1]]);
WRITE_LCD_DATA(2,DISP_TAB[temp_int[2]]);
WRITE_LCD_DATA(3,DISP_TAB[temp_int[3]]);
}
/****************************************************************************
* 名稱:write_LCD_speci_data()
* 功能:刷新程序的顯示RAM
輸入:LCD_bit----------------指定的LCD位,0為最低位
LCD_data---------------指定的數(shù)據(jù)索引
輸出:無
* 說明:在LCD屏幕上顯示指定的數(shù)據(jù)索引
*
****************************************************************************/
void write_LCD_speci_data(uint8 LCD_bit, uint8 index_LCD_data)
{
WRITE_LCD_DATA(LCD_bit,DISP_TAB[index_LCD_data]);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -