📄 lcd_drv.c
字号:
/*******************************************************************
一、程序说明:
LCD驱动功能模块
二、硬件连接:
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);//写数据
/****************************************************************************
* 名称:SEND_LCD_COMMAND()
* 功能:发送LCD控制命令
输入:无
输出:无
* 说明:发送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屏幕上显示整形数据
输入:整形数据
输出:无
* 说明:在LCD屏幕上显示整形数据
*
****************************************************************************/
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()
* 功能:写入一个字节的数据到指定位
* 入口参数:
addr-----------------------指定的LCD位
dd-------------------------数据
* 出口参数:无
* 说明:采用连续写方式(单次为半个字节),但是每次写入一个字节
****************************************************************************/
void WRITE_LCD_DATA(uint8 addr,uint8 dd) //写数据
{
uint8 index_LCD_bit=addr*2;//-------------转换为LCD的位地址
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()
* 功能:显示时间,分和秒
* 入口参数:
min------------------------分(0-60)
sec------------------------秒(0-60)
have_P2--------------------':'分秒分隔符号(0x00,0x01)
0x01-------------有分隔符
0x00-------------没有分隔符
* 出口参数:无
* 说明:无
****************************************************************************/
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---------------指定的数据索引
输出:无
* 说明:在LCD屏幕上显示指定的数据索引
*
****************************************************************************/
void write_LCD_speci_data(uint8 LCD_bit, uint8 index_LCD_data)
{
WRITE_LCD_DATA(LCD_bit,DISP_TAB[index_LCD_data]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -