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

📄 lcd1602.h

📁 本产品是由c语言开发的万年历本产品是由c语言开发的万年历
💻 H
字号:
//==========================================================
//作    者: 雨枭风
//联系QQ:401386501
//您下载的资料属于电子前沿原创,转载请注明出处
//关于此程序您有任何问题可到http://www.e-fad.com.cn/留言
//==========================================================
#ifndef _lcd1602_display_
#define _lcd1602_display_
#include "commmon.h"
#include "ds1302.h"
/***********lcm内部等待函数*************/
void lcd_wait(void)
{
    DATAPORT=0xff;	     
	LCM_EN=1;
    LCM_RS=0;   			
    LCM_RW=1;   			
    _nop_();
    while(DATAPORT&BUSY)
	{  LCM_EN=0;
	   _nop_();
	   _nop_();
	   LCM_EN=1;
	   _nop_();
	   _nop_();
	   }
   	LCM_EN=0;
	
}
/**********写指令到LCM子函数************/

void WriteCommandLCM(uchar WCLCM,uchar BusyC)
{
    if(BusyC)lcd_wait();
	DATAPORT=WCLCM;
    LCM_RS=0;                   // 选中指令寄存器
    LCM_RW=0;               	// 写模式	
    LCM_EN=1;    
	_nop_();   
	_nop_();
	_nop_(); 
    LCM_EN=0;  
}

/**********写数据到LCM子函数************/
void WriteDataLCM(uchar WDLCM)
{ 
    lcd_wait( );            //检测忙信号    
	DATAPORT=WDLCM;
    LCM_RS=1;               // 选中数据寄存器
    LCM_RW=0;           	// 写模式
    LCM_EN=1;
    _nop_();
	_nop_();
	_nop_();
    LCM_EN=0;
}
/**********LCM初始化子函数***********/
void initLCM( )
{   
	DATAPORT=0;	
	delay_LCM(15);
	WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号
    delay_LCM(5); 
    WriteCommandLCM(0x38,0);
    delay_LCM(5); 
    WriteCommandLCM(0x38,0);
    delay_LCM(5); 
    WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号
    WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号
    WriteCommandLCM(0x01,1);    //清屏,检测忙信号
    WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号
    WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号
}

/****************显示指定坐标的一个字符子函数光标不会闪*************/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
    Y&=1;
    X&=15;
    if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
    X|=0x80;                    //指令码为地址码+0X80
    WriteCommandLCM(X,0);
    WriteDataLCM(DData);
}
void DisplayListChar(uchar X,uchar Y,uchar code *DData)
{
    uchar ListLength=0;
    Y&=0x01;
    X&=0x0f;
    while(X<16)
    {
        DisplayOneChar(X,Y,DData[ListLength]);
        ListLength++;
        X++;
    }
}
/***************液晶显示子函数1 正常显示,调整及功能设置*****************/
void displayfun1(void)
{	
	WriteCommandLCM(0x0c,1);   					 //显示屏打开,光标不显示,不闪烁,检测忙信号	
	DisplayListChar(0,0,str0);	
	DisplayListChar(0,1,str1);

	if(flag&bit_hour){DisplayOneChar(5,0,0x20);DisplayOneChar(6,0,0x20);}
	else{DisplayOneChar(5,0,hourh+0x30);DisplayOneChar(6,0,hourl+0x30);}

	if(flag&bit_minute){DisplayOneChar(8,0,0x20);DisplayOneChar(9,0,0x20);}
	else{DisplayOneChar(8,0,miniteh+0x30);DisplayOneChar(9,0,minitel+0x30);}
	 
	if(flag&bit_second){DisplayOneChar(11,0,0x20);DisplayOneChar(12,0,0x20);}
	else{DisplayOneChar(11,0,secondh+0x30);DisplayOneChar(12,0,secondl+0x30);}

	if(flag&bit_week){DisplayOneChar(15,0,0x20);}
    else{DisplayOneChar(15,0,weekl+0x30);}

	if(flag&bit_year){DisplayOneChar(5,1,0x20);DisplayOneChar(6,1,0x20);}
    else{DisplayOneChar(5,1,yearh+0x30);DisplayOneChar(6,1,yearl+0x30);}

	if(flag&bit_month){DisplayOneChar(8,1,0x20);DisplayOneChar(9,1,0x20);}
    else{DisplayOneChar(8,1,monthh+0x30);DisplayOneChar(9,1,monthl+0x30);}

	if(flag&bit_day){DisplayOneChar(11,1,0x20);DisplayOneChar(12,1,0x20);}
    else{DisplayOneChar(11,1,dayh+0x30);DisplayOneChar(12,1,dayl+0x30);}

	if(flag&bit_n_zh){DisplayOneChar(14,1,0x20);}
    else{DisplayOneChar(14,1,n_zh);}

	if(flag&bit_z_d){DisplayOneChar(15,1,0x20);}
    else{DisplayOneChar(15,1,z_d);}
}
/***************液晶显示子函数2 显示闹钟设置界面*****************/
void displayfun2(void)
{	
	WriteCommandLCM(0x0c,1);   					 //显示屏打开,光标不显示,不闪烁,检测忙信号	
	DisplayListChar(0,0,str6);	
	DisplayListChar(0,1,str7);

	if(flag&bit_clock_hour){DisplayOneChar(5,1,0x20);DisplayOneChar(6,1,0x20);}
	else{DisplayOneChar(5,1,clock_hourh+0x30);DisplayOneChar(6,1,clock_hourl+0x30);}

	if(flag&bit_clock_minute){DisplayOneChar(8,1,0x20);DisplayOneChar(9,1,0x20);}
	else{DisplayOneChar(8,1,clock_minh+0x30);DisplayOneChar(9,1,clock_minl+0x30);}
	 
	if(flag&bit_clock_second){DisplayOneChar(11,1,0x20);DisplayOneChar(12,1,0x20);}
	else{DisplayOneChar(11,1,clock_sech+0x30);DisplayOneChar(12,1,clock_secl+0x30);}
	
	if(flag&bit_clock_contrl){DisplayOneChar(14,1,0x20);}
	else{DisplayOneChar(14,1,_clock_key);}	
}
/*****************显示函数*****************/
void display(void)		  	                
 { //Scan_Key();
   secondh=Read1302(sec|read)/16;delay_LCM(10);secondl=Read1302(sec|read)%16;delay_LCM(10);
   miniteh=Read1302(min|read)/16;delay_LCM(10);minitel=Read1302(min|read)%16;delay_LCM(10);
   hourh=Read1302(hou|read)/16;delay_LCM(10);hourl=Read1302(hou|read)%16;delay_LCM(10);
   dayh=Read1302(day|read)/16;delay_LCM(10);dayl=Read1302(day|read)%16;delay_LCM(10);
   monthh=Read1302(month|read)/16;delay_LCM(10);monthl=Read1302(month|read)%16;delay_LCM(10);
   yearh=Read1302(year|read)/16;delay_LCM(10);yearl=Read1302(year|read)%16;delay_LCM(10);
   weekl=Read1302(week|read)%16; if(weekl==1)weekl=7; else weekl-=1;
   n_zh=Read1302(clock|read);delay_LCM(10); 	z_d=Read1302(_zd|read);delay_LCM(10);
   clock_hourh=Read1302(clock_hour|read)/16;delay_LCM(10);clock_hourl=Read1302(clock_hour|read)%16;delay_LCM(50);
   clock_minh=Read1302(clock_min|read)/16;delay_LCM(10);clock_minl=Read1302(clock_min|read)%16;delay_LCM(10);
   clock_sech=Read1302(clock_sec|read)/16;delay_LCM(10);clock_secl=Read1302(clock_sec|read)%16;delay_LCM(10);
   _clock_key=Read1302(clock_key|read);	delay_LCM(10);                                                                                                                                                                                    
   		
    if(!disp_mode)displayfun1(); 
	if(disp_mode)displayfun2();
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -