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

📄 lcdxianshi.c

📁 简单的LCD多级菜单显示
💻 C
字号:
/*
**	Create : 2007 7 31
**	Author : oDon
**	email  : yuanonline@hotmail.com	
**	Description:**
** 	This project is using for a library of solutions of CM12864
**	functions will implements to display ZH_CN ASCII IMAGE on
**	CM12864 LCD.etc..
*/
#include <intrins.h>
#include<func.h>
#include<reg52.h>
sbit RS  = P2^0;
sbit RW  = P2^1;
sbit E   = P2^2;
sbit PSB = P2^3;
sbit RST = P2^4;

#define DATA P1
volatile uchar command;				/*Command Word*/

/**************************************************
*			Function Definations Below			  */

void check_busy(void);
void send_com(const unsigned char command);
void send_com_init(const unsigned char command_init);
void send_data(const unsigned char data_a);
void send_data(const unsigned char data_a);
void clear_LCD(void);
void initial_LCD(void); 
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length );
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length );
/*			Function Definations End			  *
**************************************************/

/*void xianshi(void)
{
	clear_LCD();
	smNop();
	initial_LCD();
	smNop();
	clear_LCD();
	smNop();
	Display_ch(suc, 2, 1, 6);
	while(1);
		
}  */


/******************************************
功能: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]); 
     }		  
}
/****************************************************************
-----------------------------------------------------------------
			   END	OF	MAIN.C
-----------------------------------------------------------------
****************************************************************/

⌨️ 快捷键说明

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