【51单片机使用LED1602显示日期时间】

项目分析

《电子数字钟》这篇是定时器,所以首先就有了定时器的应用(除完整代码外,其余代码都是拼接在一起的,单独使用要注意

代码列示

main.c文件。定时器的使用,main.c文件所包含的,以及LCD显示的方法,可以自己定义显示的内容

#include "regx52.h"
#include "LCD1602.h"
#include "stdio.h"


int hour = 12 ; 
int minute = 12;
int second = 50;




void main()
{

	TMOD = 0x01; //设置定时T0的工作方式为1
  TH0 = 0xB7; //给高8位赋值
  TL0 = 0xFF; //给低8位赋值
  ET0 = 1; //使能定时器T0中断
  EA = 1; //开启总中断
  TR0 = 1;
	
	
	lcd1602_init();
	while (1)
		
	{
		char buf[9] = {0};
		lcd1602_show_string(1,0,"  2023-11-23");  
		
		sprintf(buf,"%02d:%02d:%02d",hour,minute,second);
		
		
	  lcd1602_show_string(1,1,buf);
	}
}

void time0() interrupt 1 //定时器0中断函数
{
static unsigned int i; //定义静态变量,用来统计中断次数,中断50次就是1s
//每次中断后,要重新赋初值
  TH0 = 0xB7; //给高8位赋值
  TL0 = 0xFF; //给低8位赋值
  i++;
  if(i == 50) //中断50次
  {
	i = 0; //清空中断次数
  second++; //当前秒数加1
  if(second == 60)
 {
  second = 0;
  minute++;
  }
 if(minute == 60)
  {
 minute =0;
 hour++;
 }
 if(hour == 24)
{
  hour =0;
 }
  }
   }

LCD1602.C文件。这段代码是一组用于控制 16x2 字符 LCD 模块的函数,使用 8051 微控制器。下面是每个函数的简要解释:

lcd1602_write_cmd(unsigned char cmd): 该函数用于向 LCD 模块发送命令。它会适当设置控制线(RS、RW 和 EN),然后将命令写入 LCD1602_DATAPORT。该函数通常用于初始化 LCD 模块并配置其设置。

lcd1602_write_data(unsigned char dat): 该函数用于向 LCD 模块写入数据(字符或自定义符号)。类似于 lcd1602_write_cmd,它设置控制线,将数据写入 LCD1602_DATAPORT,然后切换 EN 线以将数据发送到 LCD。

lcd1602_init(): 该函数通过发送一系列命令来初始化 LCD 模块,以配置其显示设置。它将数据长度设置为 8 位,配置显示为 2 行 5x7 点阵字符,打开显示但不显示光标或闪烁,并设置输入模式以在写入数据后自动增加光标位置。

lcd1602_show_string(unsigned char x, unsigned char y, unsigned char *str): 该函数用于在 LCD 模块上显示一串字符。它接受字符串的位置 (x, y) 和字符串本身作为参数。根据位置计算出 LCD 光标的适当地址,然后使用 lcd1602_write_data 将字符串的每个字符写入 LCD。

#include "LCD1602.h"
#include "regx52.h"
#include "delay.h"

void lcd1602_write_cmd(unsigned char cmd)
{
 
 LCD1602_RS = 0;
 LCD1602_RW = 0;
 LCD1602_EN = 0;
	
	LCD1602_DATAPORT = cmd;
	
	LCD1602_EN = 1;
	Delay1_ms(1);
	LCD1602_EN = 0;
	Delay1_ms(1);
	
	
}

void lcd1602_write_data(unsigned char dat)
{
  LCD1602_RS = 1;
	LCD1602_RW = 0;
	LCD1602_EN = 0;
	
	LCD1602_DATAPORT = dat;
	
	LCD1602_EN = 1;
	Delay1_ms(1);
	LCD1602_EN = 0;
	Delay1_ms(1);
	
}

void lcd1602_init()
{
  lcd1602_write_cmd (0x38);//数据长度为8、2行显示、5x7点阵
	//显示功能打开、无光标、光标不闪烁
  lcd1602_write_cmd (0x0c);
	//写入新数据后光标右移、文字保持不动
	lcd1602_write_cmd (0x06);
	
	lcd1602_write_cmd (0x01);
}


void lcd1602_show_string(unsigned char x,unsigned char y,unsigned char *str)
{
	if (y == 0)
  lcd1602_write_cmd(0x80 + 0x00 + x);
  if (y == 1)
	lcd1602_write_cmd(0x80 + 0x40 + x);
	
	while (*str != '\0')
	{
		lcd1602_write_data(*str);
	  str++;
		
	}
	
}

LCD1602.h文件 这个文件可以简化运用此模块,从而达到显示功能

#ifndef __LCD1602_H
#define __LCD1602_H

#include "regx52.h"


sbit LCD1602_RS =P2^6;
sbit LCD1602_RW =P2^5;
sbit LCD1602_EN =P2^7;

#define LCD1602_DATAPORT  P0



void lcd1602_init();
void lcd1602_show_string(unsigned char x,unsigned char y,unsigned char *str)	;

#endif

延时delay函数 可以将时间流速控制较为精准

#include "delay.h"
#include "intrins.h" 

//延时函数
void Delay1_ms(unsigned int a)		//@11.0592MHz
{
	unsigned char i, j;
	for(a;a>0;a--)
	{
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

延时函数可以使时间精准一些,减少误差
延时函数.h文件

#ifndef _DELAY_H
#define _DELAY_H


void Delay1_ms(unsigned int a);




#endif

成果图如下

在这里插入图片描述 代码解释

使用了定时器的功能使我们这个代码有可以显示时间流转的功能
使用LCD灯模块来显示时间,日期等功能
延时模块进行延时,从而控制时间的流转速度

总结

我们用了定时器,LCD1602显示此功能,完成后可进行简单的时间,日期显示的功能。可以学习到定时器的使用以及LCD1602的使用,对使用这个内容进行一个加固,同时也可以进行一些修改使这个函数可以变成大伙想要的内容数据。
希望对大家有帮助。

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现基于单片机的lcd1602显示日期时间,需要以下步骤: 1. 确定单片机型号和开发环境,例如使用STC89C52单片机和Keil C51开发环境。 2. 连接LCD1602模块和单片机,包括数据线、控制线和电源线。 3. 编写程序,包括初始化LCD1602模块、设置显示位置、获取当前时间等功能。 4. 将程序下载到单片机中,并连接电源启动。 5. 在LCD1602模块上显示日期时间。 具体实现过程可以参考相关的单片机教程和LCD1602模块使用手册。 ### 回答2: 基于单片机的lcd1602显示日期时间,是一个嵌入式系统的应用,它将电子技术与计算机科学相结合,采用现代化的数字化技术对时间日期进行计算和管理,实现了以数字化方式显示时间日期的功能。 首先,我们需要选择合适的单片机芯片来实现日期时间显示,例如常用的51系列单片机、STM32系列单片机等。通过连接电路将单片机和液晶显示器1602连接起来,就可以开始程序的编写。 具体的程序编写也十分简单,首先进行I/O口的初始化,设置相应的引脚为输入输,然后通过定时中断或者闹钟中断实现时间的更新。在程序中也需要对时间日期进行显示处理,将时间日期转化为二进制码,进而实现对液晶显示屏的驱动。 对于这种应用,我们需要借助一些辅助组件、引脚和外部元件,比如晶振、电阻、电容、键盘等来辅助实现相应功能,并且需要注意电源的稳定性,保证系统能够稳定运行。 总之,基于单片机的lcd1602显示日期时间集成了电子、计算机、通讯、控制等技术,是当今工程应用领域中的一个重要应用,也是电子产品开发工程师必备的开发技能。 ### 回答3: 随着科技的不断发展,单片机及其应用越来越广泛,并成为嵌入式系统设计的主要部分。单片机在各种电子设备中都有广泛的运用,例如电子时钟,数码相机,温度计,计算器等等。其中,基于单片机的LCD1602显示日期时间也是常见的应用之一。 首先,在设计之前,需要明确LCD1602的基本原理和使用方法,包括显示屏的引脚定义、数据和命令的传输方式、屏幕的清除、光标的控制、字符的显示等。在此基础上,我们可以开始代码的编写。 一个简单的显示日期时间的程序流程是:读取系统时间并将其转化为可读的格式,将转化后的时间字符串写入LCD1602屏幕指定位置。在具体的操作中,需要使用程序控制LCD1602屏幕和单片机之间的通信,确定LCD1602屏幕的地址和字节,读取系统时间并将其转化为字符,并将字符写入到LCD1602指定地址处。 在编写代码的时候,需要注意以下几点: 1. LCD1602 和单片机之间的通信协议要清楚明了。 2. 要正确设置程序所需的输入输,例如:时钟源、串行端口等。 3. 采用简洁、高效的代码逻辑,将流程拆分成几个步骤,便于后续修改和维护。 4. 调试时先验证 LCD1602 是否能正常显示,再进一步调试程序。 综上所述,基于单片机的LCD1602显示日期时间,需要明确LCD1602的基本原理和使用方法,在代码编写过程中注意需要设置输入输和编写简练的代码,同时进行屏幕验证和程序调试。只有在这些方面都具备足够的理解和技能,才能够实现基于单片机的LCD1602显示日期时间

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值