简单的C51单片机项目之LCD1602时钟

这篇具有很好参考价值的文章主要介绍了简单的C51单片机项目之LCD1602时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,实验现象

实验项目现象如下:

简单的C51单片机项目之LCD1602时钟

简单的C51单片机项目之LCD1602时钟 

 文章来源地址https://www.toymoban.com/news/detail-505508.html

这个项目需要用到51单片机板上的功能如下:

1.独立按键

2.LCD1602

3.定时器中断

功能介绍

1.独立按键实现三个功能,选择键,增大键,减小键。

2.lcd1602显示时间

3.定时器中断确定时间

代码如下:

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;

sbit K1 = P3^1; //功能键
sbit K2 = P3^0;	//增大
sbit K3 = P3^2;	//减小
//lcd管脚定义
sbit RS = P2^6;
sbit EN = P2^7;
sbit RW=P2^5;

#define LCD1602_DATAPORT P0	

u16 sum,KEY,i;
int hour,minute,second;

u8 code xin[]="2022-07-24";
u8 code xg[]="Clock";

//延迟函数
void delay_ms(u16 ms)
{
    u16 i,j;
	for(i=ms;i>0;i--)
	    for(j=110;j>0;j--);
}
void delay_10us(u16 i)
{
    while(i--);
}

//液晶显示器1602A

//写命令
void write_com(u8 com)
{
    EN = 0;
	RS = 0;
	RW=0;
	LCD1602_DATAPORT = com;
	delay_ms(1);
	EN = 1;
	delay_ms(1);
	EN = 0;
}
//写数据
void write_dat(u8 dat)
{
    EN = 0;
	RS = 1;
	RW=0;
	LCD1602_DATAPORT = dat;
	delay_ms(1);
	EN = 1;
	delay_ms(1);
	EN = 0;
}
//写时分秒函数
void write_sfm(u8 add,u8 dat)
{
    u8 a,b;
	a=dat/10;
	b=dat%10;

	write_com(0x80+0x40+add);
	write_dat(0x30+a);
	write_dat(0x30+b);
}
//初始化
void init(void)
{
    sum=0;
	KEY=0;
    hour=0;
	minute=0;
	second=0;
	//对lcd1602初始化
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);

    //颜文字
	write_com(0x80+1);
	write_dat(0x6f);
	write_com(0x80+2);
	write_dat(0x5f);
	write_com(0x80+3);
	write_dat(0x6f);
	//日期
	write_com(0x80+5);
	for(i=0;i<10;i++)
	{
	     write_dat(xin[i]);
	}
	//冒号
	write_com(0x80+0x40+2);
	write_dat(':');
	write_com(0x80+0x40+5);
	write_dat(':');
    //英文字母
	write_com(0x80+0x40+9);
	for(i=0;i<5;i++)
	{
			write_dat(xg[i]);
	}
    //对定时器0初始化
	TMOD |= 0xF0;		//设置定时器模式
	TL0 = 0x00;		//设置定时初始值
	TH0 = 0x4C;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA = 1;
	ET0 = 1;
}
//定义按键
void keycon()
{
   if(K1==0)
   {
       delay_ms(10);
	   if(K1==0)
	   {
		    KEY++;
			while(!K1);
			//等待释放按键
			if(KEY==1)
			{
				TR0 = 0;
				write_com(0x80+0x40+6);//移动到秒
				write_com(0x0f);
			}
			if(KEY==2)
			{
				write_com(0x80+0x40+3);//移动到分
				write_com(0x0f);
			}
			if(KEY==3)
			{
				write_com(0x80+0x40);//移动到小时
				write_com(0x0f);
			}
			if(KEY==4)
			{			
				KEY = 0;
				write_com(0x0c);
				TR0 = 1;
			}
	   }
   }
   if(KEY!=0)
   {
        if(K2==0)
		{
		     delay_ms(10);
			 if(K2==0)
			 {
			      while(!K2);
				  if(KEY==1)
				  {
				      second++;
					  if(second==60)
					       second=0;
					  write_sfm(6,second);
					  write_com(0x80+0x40+6);					  
				  }
				  if(KEY==2)
				  {
				      minute++;
					  if(minute==60)					  
					       minute=0;
					  write_sfm(3,minute);
					  write_com(0x80+0x40+3);					  
				  }
				  if(KEY==3)
				  {
				      hour++;
					  if(hour==24)
					       hour=0;
					  write_sfm(0,hour);
				      write_com(0x80+0x40);					  
				  }
			 }
		}
		if(K3==0)
		{
		     delay_ms(10);
		     if(K3==0)
			 {
			     while(!K3);
				 if(KEY==1)
				  {
				      second--;
					  if(second==-1)
					       second=59;
					  write_sfm(6,second);
				      write_com(0x80+0x40+6);					  
				  }
				  if(KEY==2)
				  {
				      minute--;
					  if(minute==-1)
			               minute=59;
					  write_sfm(3,minute);
				      write_com(0x80+0x40+3);					  
				  }
				  if(KEY==3)
				  {
				      hour--;
					  if(hour==-1)					  
					       hour=23;
				      write_sfm(0,hour);
					  write_com(0x80+0x40);					  
				  }
			 }
		}
   }
}
void main()
{
     init();
	 while(1)
	 {
		 keycon();

	 }

}
void init0() interrupt 1
{
	TL0 = 0x00;		//设置定时初始值
	TH0 = 0x4C;		//设置定时初始值
	sum++;
	if(sum==20)
	{
	    second++;
		sum=0;
		if(second==60)
		{
		     minute++;
			 second=0;
			 if(minute==60)
			 {
			      hour++;
				  minute=0;
				  if(hour==24)
				  {
				       hour=0;
				  }
				  write_sfm(0,hour);
			 }
			 write_sfm(3,minute);
		}
		write_sfm(6,second); 
	}
}

 

 

到了这里,关于简单的C51单片机项目之LCD1602时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机LCD1602调试工具

    参考视频:江协科技51单片机 LCD1602头文件代码 LCD1602 C语言文件 LCD1602主函数文件

    2024年01月24日
    浏览(38)
  • 51单片机矩阵键盘——LCD1602显示

    本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86404949 使用矩阵键盘随意按下按键,LCD1602第二行前两位就会显示对应按键按下的数字。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用

    2023年04月09日
    浏览(30)
  • MCU-51:单片机LCD1602详解

    LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:16×2个字符,每个字符为5*7点阵 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应

    2023年04月09日
    浏览(73)
  • 51单片机(五)LCD1602调试工具

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月27日
    浏览(47)
  • 51单片机 | LCD1602 液晶显示实验

      在前面章节,我们已经学习过几种显示装置,例如静态数码管、动态数码管、 8*8LED 点阵、串口通信。使用它们可以直观显示一些字符数据,但是它们也有各种局限性,比如显示字符数据太少,硬件设计复杂、代码编写难度大等。这一章就来介绍一种非常简单且常用的显

    2023年04月11日
    浏览(44)
  • 51单片机外设系列:LCD1602 的详细编程

    前言,LCD1602是一个比较常用的单片机显示外设,下面我们从它的显示原理,来分析用51单片机编程的思路。另外结尾还提供了完成的程序代码参考。 一、LCD1602的外观、结构和基本参数 引脚功能解析: 第1引脚:GND为电源地脚。 第2引脚:VCC接5V电源正极。 第3引脚:VL为液晶显

    2024年02月05日
    浏览(32)
  • 51单片机LCD1602液晶屏显示方法

    以显示hello,world!    2022.10.17  为例。 首先把LCD1602的模块化程序添加到项目目录中,模块化方法在51单片机之程序模块化_学习笔记吧的博客-CSDN博客这里可以学习。 实验程序: LCD1602.c文件代码: LCD1602.h文件代码: 把这两个代码,分别添加到LCD1602.c 和 LCD1602.h 文件,然后添加

    2023年04月08日
    浏览(35)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(34)
  • 51单片机电子秤(HX711模块 + LCD1602)

    (简单易懂) 1.---------------序 2.HX711测重模块 3.LCD1602显示模块 4.电子秤整体实现原理 5.模块升级去皮与还原 6.源代码 零.先来一个效果展示 这里可以看到3个20g砝码加上去显示60g的重量 5个20g砝码加上去显示100g的重量,精度是比较准的 一.首先考虑如何把这样一个项目设计出来

    2023年04月08日
    浏览(32)
  • 基于51单片机驱动MPU6050模块(LCD1602显示)

    @TOC MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用IIC接口连接一个第三方的数字传感器。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包