⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_drv.c

📁 这款液晶的型号是k2501,它的功耗很低,是作的功耗产品理想的选择
💻 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 + -