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

📄 1602.c

📁 1602驱动 可以使1602进行字符或者字符串的显示
💻 C
字号:
#include <reg52.h>
#define	Uchar unsigned char
#define Uint  unsigned int
char xdata Lcd1602CmdPort     _at_ 0xf9fc;
char xdata Lcd1602WdataPort   _at_ 0xf9fd; 
char xdata Lcd1602StatusPort  _at_ 0xf9fe;                                        
#define Busy	0x80// 忙判别位
//-------------------------------------函数原型声明------------------------------------------------------------------
extern void Delay1000Ms(void);
extern void Delay400Ms(void);
extern void Delay5Ms(void);
extern void LcdWriteData( char dataW );		                          //LCD写数据 
extern void LcdWriteCommand( Uchar CMD,Uchar AttribC );				   //LCD写命令
extern void LcdReset( void );   
extern void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
extern void PutStr(Uchar x,Uchar y, Uchar code *ptr); 
extern void InitInt(void);
void cls(void);
Uint y=0;//测试用

//--------------------------------------局部变量声明--------------------------------------------------------
static  unsigned char ucLcdPosX;                                     //当前显示指针
static  unsigned char ucLcdPosY;                                     //
//---------------------------------------常量数组声明-----------------------------------------------------
code char ccHitePressed[]="Wait";
code char ccHite2[]="Happy Every Day";
//-------------------------------------------------------------------------------------------------
void main(void)
{  
      LcdReset();				      // ....初始化
		while(1)
   {
	DispOneChar(6,0,(0x30+y));//这样显示变量
    PutStr(0,0,ccHitePressed);	     
	PutStr(0,1,ccHite2);
y++;
Delay1000Ms();
if (y==0x53)y=0;
		{
		}
    }
}
//  主程序结束
/*=======================================================
 显示预先存好的字符串4行
=======================================================*/
void PutStr(Uchar x,Uchar y, Uchar code *ptr) 
{
    Uchar i,l=0;
	while (ptr[l] >31){l++;};     //如果数组中的数为字符,计算字符的个数
	for (i=0;i<l;i++) 
	   {
	    	DispOneChar(x,y,ptr[i]);

			x++;
	    	if ( x == 16 )
	    	{    x = 0; y=y+1;
	        }
            if ( y == 2 )
	    	{    y=0;
	        }
	   }
}
/*=======================================================
 显示光标定位4行
=======================================================*/

void LocateXY( char posx,char posy) {

Uchar temp;

	temp = posx & 0xf;
	posy &= 0x03;
   switch ( posy)
   {
    case 0:;
	break;
    case 1:temp |= 0x40;
	break;
    default:;
   }
    temp |= 0x80;
	LcdWriteCommand(temp,0);
}
/*=======================================================
 按指定位置显示数出一个字符
=======================================================*/
void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {

	LocateXY( x, y );				// 定位显示地址
	LcdWriteData( Wdata );			// 写字符
}

/*=======================================================
 初始化程序, 必须按照产品资料介绍的初始化过程进行
=======================================================*/
void LcdReset( void ) {

   	LcdWriteCommand( 0x38, 0);			// 显示模式设置(不检测忙信号)
		Delay5Ms();
	LcdWriteCommand( 0x38, 0);			// 共三次
		Delay5Ms();
	LcdWriteCommand( 0x38, 0);
		Delay5Ms();

	LcdWriteCommand( 0x38, 1);			// 显示模式设置(以后均检测忙信号 参数--"1")
    LcdWriteCommand( 0x08, 1);			// 显示关闭
   	LcdWriteCommand( 0x01, 1);			// 显示清屏
	LcdWriteCommand( 0x06, 1);			// 显示光标移动设置
	LcdWriteCommand( 0x0c, 1);			// 显示开及光标设置
}

/*=======================================================
 写控制字符子程序: E=1 RS=0 RW=0
=======================================================*/
void LcdWriteCommand( Uchar CMD,Uchar AttribC ) 
{
    if (AttribC) 
	{
		P0=0xff;
		while( Lcd1602StatusPort & Busy );		// 检测忙信号?
	}
	Lcd1602CmdPort = CMD;
}
	
/*=======================================================
 当前位置写字符子程序: E =1 RS=1 RW=0
=======================================================*/
void LcdWriteData( char dataW ) 
{
    while( Lcd1602StatusPort & Busy );					// 检测忙信号

	Lcd1602WdataPort = dataW;
}

// 短延时
void Delay5Ms(void)
{
	Uint i = 5552;
	while(i--);
}

//长延时
void Delay400Ms(void)
{
	Uchar i = 5;
	Uint j;
	while(i--)
	{
	
        j=1817;   //100Ms
		while(j--);
	};
}
//-------------------------------------------------------------------------------------------------------------
//更长延时
void Delay1000Ms(void)
{
	Uchar i = 5;
	Uint j;
	while(i--)
	{
	    j=18172; 
       
		while(j--);
	};
}

 

⌨️ 快捷键说明

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