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

📄 lcd.c

📁 简单的LCD多级菜单显示
💻 C
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
/******************************************
功能:void check_busy( void )
功能:检查是否LCD忙碌的子程序
实参输入:void
返回值:void
******************************************/
void check_busy(void) 
{  	 
	 P1    = 0xff; 
     RS    = 0; 
     RW    = 1; 
     while (1) 
     {
	      smNop(); 
          E =1; 
          smNop();		 
		  if( P1 < 0x80 ) 
		      break; 
          smNop();
          E =0; 
      } 
     E = 0; 
}

/*****************************************
名称:void send_com( unsigned char command )
功能:数据写命令
实参输入:unsigned char command
返回值:void
*****************************************/
void send_com(const unsigned char command) 
{ 
     check_busy(); 
     RS = 0; 
     RW = 0;	 
	 P1 = command; 
     E  = 1; 
     smNop(); 
     E = 0; 
}

/********************************************************
名称:void send_com_init( unsigned char command_init )
功能:LCD初始化时的送命令
实参输入:unsigned char command_init
返回值:void
********************************************************/
void send_com_init(const unsigned char command_init ) 
{ 
     RS    = 0; 
     RW    = 0;
	 P1    = command_init; 
     E     = 1; 
     smNop();
     E     = 0; 
}

/*******************************************************
名称:void send_data( unsigned char data_a )
功能:写数据
实参输入:unsigned char data_a
返回值:void
*******************************************************/ 
void send_data(const unsigned char data_a)
{ 
     check_busy(); 
     RS    = 1; 		//DB7-DB0为显示数据
     RW    = 0; 	    //写入数据
	 P1    = data_a; 
     E     = 1; 	
     smNop();
     E     = 0; 			//下降沿
}

/*********************************************************
名称:void clear_LCD( void )
功能:清屏
实参输入:void
返回值:void
*********************************************************/
void clear_LCD(void) 
{ 
     send_com(0x01);  //清除显示//
     send_com(0x34);  // 功能设定:扩充指令集动作 //
     send_com(0x30);   //功能设定:基本指令集动作//
}

/*************************************************************
名称:void initial_LCD( void )
功能:LCD初始化
实参输入:void
返回值:void
*************************************************************/
void initial_LCD(void) 
{   
     PSB = 1; 	//水平显示
     RST = 0;   //复位 
     _nop_(); 
     _nop_(); 
     RST = 1;   //不复位
     _nop_(); 
     delay_10us(10); 
     send_com_init(0x30);//30H--基本指令操作 
     delay_10us(4); 
     send_com_init(0x0c);//开显示,关光标,不闪烁。 
     delay_10us(10); 
     send_com_init(0x01);//清除显示 
     delay_ms(10); 
     send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。     
}


/*********************************************************************
名称:void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示字符串				 2					  1						6
参数输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length
返回值:void
*********************************************************************/
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{    
     unsigned char ddram = 0x00;
	 unsigned char i1;

	 if(line == 1)
	 	ddram = 0x80;
	 if(line == 2)
	 	ddram = 0x90;
	 if(line == 3)
	 	ddram = 0x88;
	 if(line == 4)
	    ddram = 0x98;

     ddram = ddram + col - 1;

     send_com( ddram );  //定位显示起始地址

	 for( i1 = 0;i1 < length;i1 ++ )
	 {
		 send_data( ptr[i1] );//输出单个字符 
     }		  
}

/********************************************************
名称: void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示汉字子程序
实参输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned length
返回值:void
********************************************************/
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{

	 unsigned char ddram = 0x00;
	 unsigned char i1;
	 if(line == 1)
	 	ddram = 0x80;
	 if(line == 2)
	 	ddram = 0x90;
	 if(line == 3)
	 	ddram = 0x88;
	 if(line == 4)
	    ddram = 0x98;

	 ddram = ddram + col - 1;
     send_com( ddram );   //定位显示起始地址
   	 for( i1 = 0;i1 < length;i1 ++ )
	 {
 		 send_data(ptr[i1*2]);//输出单个字符
		 send_data(ptr[i1*2+1]); 
     }		  
}
void xianshi(void)
{   Display_ch(jiemian0,1,1,6);  
	Display_ch(jiemian1,2,1,6);				   
	Display_ch(jiemian2,3,1,6);
	Display_ch(jiemian3,4,1,5);
}

⌨️ 快捷键说明

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