Proteus仿真-LCD1602液晶屏使用方法(驱动二)

一、硬件链接

 二、驱动代码

#define uchar unsigned char 
#define uint unsigned int 

#define data_1602 P0
uchar code table_num[]="0123456789abcdefg";

sbit rs=P2^7;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit rw=P2^6;	 //寄存器选择信号 H:数据寄存器  	L:指令寄存器
sbit e =P2^5;	 //片选信号   下降沿触发

/***********************延时函数************************/
void delay_uint(uint q)
{
	while(q--);
}

/***********************lcd1602写命令函数************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;
}

/***********************lcd1602写数据函数************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;	
}

/***********************lcd1602初始化设置************************/
void init_1602()	 //lcd1602初始化设置
{
	write_com(0x38);	//
	write_com(0x0c);
	write_com(0x06);
}

/***********************lcd1602上显示两位十进制数************************/
void write_sfm1(uchar hang,uchar add,uchar date)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	write_data(0x30+date % 10);	
}

/***********************lcd1602上显示两位十进制数************************/
void write_sfm2_ds1302(uchar hang,uchar add,uchar date)
{
	uchar shi,ge;
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	shi=date/16;
	ge=date%16;		  
//	write_data(0x30+shi);
//	write_data(0x30+ge);
	write_data(table_num[shi]);
	write_data(table_num[ge]);	
}

/***********************lcd1602上显示这字符函数************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
		while(1)														 
		{
			if(*p == '\0')  break;
			write_data(*p);
			p++;
		}	
}

/*****************控制光标函数********************/
void write_guanbiao(uchar hang,uchar add,uchar date)
{		
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	if(date == 1)
		write_com(0x0f);     //显示光标并且闪烁	
	else 
		write_com(0x0c);   //关闭光标
}	 

三、示例代码

示例程序是基于51单片机温度控制和液位监测程序。

若需要全部工程资料源文件可在评论区评论或者私信我。

/*****************主函数********************/
void main()
{	
	
	beep = 0;				    //开机蜂鸣器叫一声
	delay_1ms(200);
	P0 = P1 = P2 = P3 = 0xff;   //初始化IO口
	init_time0();		 //初始化定时器
 	init_1602();		 //lcd1602初始化
	init_1602_dis_csf(); //lcd1602初始化显示
	do
     {
	  temp=Temper();
     }
    while(temp==850);   	       //因为DS18B20上电之后会读出来850,但不是温度值,所以等待读出温度值   
 	delay_1ms(100);
	while(1)
	{
		key();			 //按键程序
 		if(key_can > 0)
		{
			beep = 0;
			delay_1ms(50);
			beep = 1;			
 			key_with();	
		}
		
		if(flag_200ms == 1)
		{	
			flag_200ms = 0;
			if(menu_1 == 0)
			{
				read_time();		  //读时间
				init_1602_ds1302();   //显示时钟
				vol_value=VOL_VAL*A_D()/256;               //获取模拟电压值
				percent = 100.0*vol_value/VOL_VAL;
				display_temp(55);

			}
		}
		delay_1ms(1);
	}
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值