51单片机用lcd1602显示两行字符串

本人打算写一个完整的万年历:这是开始的第一步

完整电路图:

完整代码: 

#include <reg51.h>
#include <intrins.h>			//包含_nop_( )空函数指令的头文件

#define uchar unsigned char
#define uint unsigned int
#define out P2
sbit RS=P3^0; 					
sbit RW=P3^1;				
sbit E=P3^2; 					

void lcd1602_initial(void);			//lcd1602初始化函数
void lcd1602_write_command(uchar com); 	//lcd1602写命令函数
void lcd1602_write_data(uchar dat);		//lcd1602写数据函数
void lcd1602_string(uchar ad ,uchar *s);//lcd1602写字符串
void delay(uint);						//延时函数


uchar code table1[]={"2021-01-24"};
uchar code table2[]={"23:59:50"};

	 
/**************************************************************
*函数名		:delay
*函数功能	:延时函数
*函数参数	:需要延时的毫秒数:uint j
*函数返回值	:无
****************************************************************/
void delay(uint j){	 //1ms延时子程序
	uchar i=250;
	for(;j>0;j--){
		while(--i);
		i=249;
		while(--i);
		i=250;
	}
}

/**************************************************************
*函数名		:lcd1602_write_command
*函数功能	:lcd1602的写命令函数
*函数参数	:所要设置的命令:uchar command
*函数返回值	:无
****************************************************************/
void lcd1602_write_command(uchar command) 	{
	E=0;
	RS=0;
	RW=0;
	out=command;
	E=1;
	_nop_( );
	E=0;
	delay(1);
}
/**************************************************************
*函数名		:lcd1602_write_data
*函数功能	:lcd1602的写数据函数
*函数参数	:要写入的数据:uchar dat
*函数返回值	:无
****************************************************************/
void lcd1602_write_data(uchar dat){   
	E=0;
	RS=1;
	RW=0;
	out=dat;
	E=1;
	_nop_();
	E=0;
	delay(1);	
}

/**************************************************************
*函数名		: lcd1602_initial
*函数功能	: lcd1602的初始化
*函数参数	: 无
*函数返回值	: 无
****************************************************************/
void lcd1602_initial(void){
    lcd1602_write_command(0x38);	       //写入命令0x38:8位两行显示,5×7点阵字符
    lcd1602_write_command(0x0C);	       //写入命令0x0C:开整体显示,光标关,无黑块
    lcd1602_write_command(0x06);	       //写入命令0x06:光标右移
    lcd1602_write_command(0x01); 	       //写入命令0x01:清屏
    delay(1);
}

/**************************************************************
*函数名		:lcd1602_string
*函数功能	:将字符串写入对应的地址上
*函数参数	:地址:uchar ad 字符串:uchar *s
*函数返回值	:无
****************************************************************/
void lcd1602_string(uchar ad,uchar *s){
    lcd1602_write_command(ad);
    while(*s>0) {
       lcd1602_write_data(*s++);		//输出字符串,且指针增1
       delay(100);
   }
}

/**************************************************************
*函数名    : 主函数
*函数功能  : 驱动程序
*函数参数  : 无
*函数返回值: 无
****************************************************************/
void main(void){
   lcd1602_initial( );			//调用对LCD初始化函数  
   while(1){
	  lcd1602_string(0x80,table1);		//显示的第1行数据
	  lcd1602_string(0x80+0x40,table2);	//显示第2行数据			
	  delay(300); 			//延时	
	}
}

展示效果:

猜你喜欢

转载自blog.csdn.net/fw1035/article/details/113255966