51单片机——简易时钟

2023-05-16

代码

#include"reg51.h"
#define lcd P0
typedef unsigned int u16;
typedef unsigned char u8;
sbit lcd_EN=P2^7;             //1602使能端
sbit lcd_RS=P2^6;             //1602数据指令端
sbit lcd_wr=P2^5;			  //读写端
sbit key1=P3^1;               
sbit key2=P3^0;
u8 date[]="  2020-03-08";
u8 time[]="   23:59:53 ";
u16 num;
u8 flag=0;
u8 sign=0;
u8 count=0;
u8 ge;
u8 shi;
u8 hour=0;
u8 fen=0;
u8 miao=0;
u16 temp=0;

void delay(u16 x)           //延时函数
{
	u16 j;
	while(x--)
		for(j=115;j>0;j--);
}

void tim0_init()            //定时器初始化函数
{
	EA=1;                   //中断总允许位
	ET0=1;                  //定时器中断允许位
	TMOD=0X01;              //定时器T0  方式1
	TH0=(65535-50000)/256;  
	TL0=(65535-50000)%256;
	TR0=1;                  //开启定时
}

void lcd_write_com(u8 com)  //lcd 指令函数
{
	lcd_RS=0;               //指令端
	lcd=com;            
	delay(4);
	lcd_EN=1;               //高脉冲
	delay(4);
	lcd_EN=0;
}

void lcd_write_date(u8 date)  //数据函数
{
	lcd_RS=1;               //数据端
	lcd=date;
	delay(4);
	lcd_EN=1;               //高脉冲
	delay(4);
	lcd_EN=0;
}

void lcd_init()             //lcd初始化函数
{
	lcd_wr=0;
	lcd_EN=0;
	lcd_write_com(0x38);    //开启显示
	lcd_write_com(0x01);    //清屏
	lcd_write_com(0x0c);    //不显示光标
	lcd_write_com(0x06); 	//移动
	
	lcd_write_com(0x80);
	for(num=0;num<12;num++)
	{
		lcd_write_date(date[num]);
		delay(4);
	}
	lcd_write_com(0x80+0x40);
	for(num=0;num<12;num++)
	{
		lcd_write_date(time[num]);
		delay(4);
	}
}

void sfm()           
{
	 if(sign==1)
	 {
		flag=1;
		sign=0;
		 miao++;
		 if(miao>=60)
		 {
			miao-=60;
			fen++;
			if(fen>=60)
			{
				hour++;
				fen-=60;
				if(hour>=24)
					hour-=24;
			}
		 }
	 }
}

void key_scan()
{
	if(key1==0)
	{
		delay(3);
		if(key1==0)
		{
			temp++;
			while(!key1);
			TR0=0;
			if(temp==1)
			{
				lcd_write_com(0x0f);
				lcd_write_com(0x80+0x40+10);				
			}
			if(temp==2)
				lcd_write_com(0x80+0x40+7);
				lcd_write_com(0x0f);
			if(temp==3)
				lcd_write_com(0x80+0x40+4);
				lcd_write_com(0x0f);
			if(temp==4)
			{
				temp=0;
				lcd_write_com(0x0c);
				TR0=1;
			}
		}
	}
}

void time_display(hour,fen,miao)
{
	if(flag==1)
	{
		ge=hour%10;
		shi=hour/10;
		lcd_write_com(0x80+0x40+4);
		lcd_write_date(0x30+ge);
		lcd_write_com(0x80+0x40+3);
		lcd_write_date(0x30+shi);

		ge=fen%10;
		shi=fen/10;
		lcd_write_com(0x80+0x40+7);
		lcd_write_date(0x30+ge);
		lcd_write_com(0x80+0x40+6);
		lcd_write_date(0x30+shi);

		ge=miao%10;
		shi=miao/10;
		lcd_write_com(0x80+0x40+10);
		lcd_write_date(0x30+ge);
		lcd_write_com(0x80+0x40+9);
		lcd_write_date(0x30+shi);
		flag=0;
		switch(temp)
		{
			case(1):lcd_write_com(0x80+0x40+10);break;
			case(2):lcd_write_com(0x80+0x40+7);break;
			case(3):lcd_write_com(0x80+0x40+4);break;
			case(0):lcd_write_com(0x0c);break;
		}
	}
}
	
void time_init()
{
	if(key2==0)
	{
		delay(4);
		if(key2==0)
		{
			while(!key2);
			if(temp==1)
			{
				miao++;
				if(miao==60)
				{
					miao=0;
					fen++;
					if(fen==60)
					{
					fen=0;
					hour++;
					}
				}
			}
			if(temp==2)
			{
				fen++;
				if(fen==60)
				{
					fen=0;
					hour++;
					if(hour>=24)
					hour-=24;
				}
			}
			if(temp==3)
			{
				hour++;
				if(hour>=24)
					hour-=24;
			}
			flag=1;
		}
	}

}

void main()
{
	lcd_init();
	tim0_init(); 
	while(1)
	{
		sfm();
		time_display(hour,fen,miao);
		time_init();
		key_scan();
	}
}

void tim() interrupt 1
{
	count++;
	if(count==18)
	{
		sign=1;
		count=0;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机——简易时钟 的相关文章

  • 1、ESP8266入门(AT模式)——调试连接,使用USB-TTL

    1 ESP8266总括 1 1 资料官方下载 乐鑫 xff1a https www espressif com zh hans products hardware esp8266ex overview 安信可 xff1a https www
  • ubuntu返回上一级目录

    返回主目录 cd 返回上一级目录 xff1a cd 43 空格 43
  • week15课上实验csp

    问题A Q 老师的记录册 问题描述 Q 老师有 N 个学生 xff0c 每个学生都有各自独立的编号 xff0c 且编号范围在 1 N 之间 这一天 xff0c 所有学生都在不同的时间进入教室 Q 老师记录了当编号为 i 的学生进入教室时 x
  • VMware虚拟机的OPenwrt旁路由部署记录

    前言 虚拟机网络适配器的模式问题 xff1a 之前建立ubuntu虚拟机时 xff0c 网络模式一般没有改动 xff0c 使用的是NAT模式 xff0c 没出现过问题 这次要让虚拟机作为软路由时 xff0c 一开始也没注意网络模式配置 xf
  • C语言入门系列 -C 语言基础以及基本数据类型

    C语言入门系列 基础以及基本数据类型 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型 数组 第七节 C 语言
  • 如何解决kali连接网络的问题

    cmd gt services msc 首先 看VMware是不是已经启动如下服务 再者 我们将虚拟机设置被NAT模式 这些都处理完毕后 进入kali 对网络进行配置 命令行设置 终端输入命令vi etc network interface
  • 并查集

    一 什么是并查集 概念 xff1a 并查集由一个整型数组pre 和两个函数find join 构成 数组pre 记录了每个点的前导点是什么 xff0c 函数find x 用于查找 xff0c 函数join x y 用于合并 作用 xff1a
  • xilinx ZCU104安装tensorflow

    xilinx ZCU104安装tensorflow ZCU104芯片是Cortex A53 xff0c 该芯片是ARMv8架构 xff0c 目前满足该平台的tensorflow版本较少 xff0c 我当时在github上找了好长一段时间才找
  • vitis HLS : ERROR: ‘2208201530‘ is an invalid argument. Please specify an integer value.导出IP核失败

    版本 xff1a vitis HLS 2021 2 报错方式 xff1a ERROR 2208201530 is an invalid argument Please specify an integer value while execu
  • 从vivado移植到Xilinx SDK

    Xilinx版本 xff1a 2021 2 PC系统 xff1a Windows10 1 首先准备好一个已完成的工程 xff0c 打开vivado 2 打开该工程 xff0c 导出硬件 xff1a export hardware xff0c
  • vivado 导入IP核并生成bit流文件

    Xilinx版本 xff1a 2021 2 PC系统 xff1a Windows10 前置要求 xff1a 你需要有一个IP核 xff0c 或者自己用vitis HLS生成IP核 1 首先解压IP核 xff1a 然后打开你的vivado软件
  • 3、ESP8266入门(AT模式)——手机与ESP8266通信(AP模式)

    实现手机与ESP8266最简单通信 关于指令参考安信可官方指令 https wiki ai thinker com esp8266 docs at 在AT指令处下载即可 xff0c 还有一个是使用实例 xff0c 也可以具体看看 实验是以这
  • pytorch中的dim=0,=1,=2,在高纬度上的一些个人理解

    编译工具 xff1a Pycharm 张量工具 xff1a pytorch 目前大部分博主对dim的讲解大多停留在低维 xff0c 在这里我说一下高维的情况 xff0c 先看图 xff1a 在上图中 xff0c 我们用pytorch中声明了
  • Makefile 学习笔记

    Makefile 学习笔记 1 hello world b a 64 echo span class token string 34 hello b 34 span a 64 echo span class token string 34
  • Linux Git 学习笔记

    1 版本的创建 xff1a span class token function git span init span class token comment 初始化 span span class token function git sp
  • GDB学习记录

    1 基本用法 在gcc g 43 43 参数里加上 g xff0c 生成的文件会包含调试程序 xff0c 不加该参数则不包含调试程序 xff0c 不利于gdb调试 基本命令 xff1a list或者l xff1a 显示调试对象的代码文本内容
  • 【Python】输入3个数,输出它们的乘积。

    问题描述 xff1a 输入3个数 xff0c 输出它们的乘积 效果 输入第一个数 xff1a 5 输入第二个数 xff1a 5 输入第三个数 xff1a 8 200 进程已结束 xff0c 退出代码 0 代码 xff1a x 61 int
  • For frame [laser]: Fixed Frame [map] does not exist此类问题解决

    又是一个容易被新手忽略的小问题 当我们使用rviz时 xff0c 比如运行雷达后没有点云数据 xff0c 即使我们能看到发布了 scan话题 像这样 xff0c 就是没点云图 xff0c 看一下laserscan提示的错误 xff1a Fo
  • VMware虚拟机如何为GPU直通启用

    查阅了很多资料是 目前的我的电脑显卡不支持 xff0c 基本上N卡的好多常用卡都不支持 具体可以查看以下内容 https www dell com support article zh hk sln288103 E5 A6 82 E4 BD
  • pycharm修改远程服务器文件后,上传报错无法传输文件 ‘D:\xxx‘: could not write to xxxx

    原因是文件权限问题 A用户在服务器创建文件 xff0c 然后让B用户进入改文件操作代码 xff0c 这个时候会遇到权限问题 解决办法 xff1a cd 到需要修改权限的目录下 运行 sudo chmod 777 hhs R xff08 hh

随机推荐

  • 故障案例:连接服务器失败/服务器无法上网

    今日内容 安装过程补充 安装界面其他内容 磁盘分区 xshell优化 远程连接排错流程 远程连接常见故障原因 Linux基本规则 Linux常见命令 和 快捷键 运维新手学习什么内容面试 招聘者 CEO 怎么判断这个人是否有能力 0 态度
  • cmd中conda无法使用

    运行后会弹出一个conda exe窗口但是马上就会关闭 但是在命令行依旧没有任何反应 去查看了一下path中的环境变量也都存在 进入Anaconda Prompt中输入conda也是这样 有没有大佬知道为什么啊
  • 阿里云生活物联网平台搭建

    总括 xff1a 本项目主要实现上位机可以实时显示单片机 xff08 下位机 xff09 采集的数据 xff0c 同时上位机也可以发送指令控制单片机 在项目中需要用到上位机 xff0c 目前采用 阿里云生活物联网平台 提供的手机APP xf
  • python作业

    这里写自定义目录标题 python简单程序1 九九乘法表2 求1 2 43 3 4 43 5 99的所有数的和3 输入一行字符 xff0c 分别统计出其中英文字母 空格 数字和其它字符的个数4 python求阶乘之和 xff0c 1 xff
  • linux突然所有命令未找到,显示bash: xxxxx: command not found...

    出现这个问题是因为系统的环境变量没有正确配置造成的 xff0c 造成这个原因有很多 xff0c 解决的方式有两种 一 xff1a 直接在linux命令行界面输入如下 xff0c 然后回车 xff08 导入环境变量 xff0c 以及shell
  • HTML5——如何在网页中加入图片和超链接。

    声明 xff1a 此页内容极度简单 xff0c 觉得low的话我可以不看 寻找图片 xff0c 把图片的位置记好 xff0c 并且重命名 xff0c 方便寻找 写出基本框架 xff0c 引用 lt img gt 标签 找出你需要跳转的网页
  • MacOS VsCode C++连接mysql

    使用Cmake 1 CmakeLists txt配置 cmake minimum required VERSION 3 18 project MYSQL include directories 34 usr local mysql 8 0
  • Linux系统MySQL8版本修改密码的方法

    MySQL8和MySQL5修改密码的sql差别很大 xff0c 用了MySQL5的修改方法还可能掉坑里面 xff0c 本文介绍8版本的修改方法 1 登录MySQL mysql uroot p密码 2 切换到user数据库 use mysql
  • 用warp给minio测压

    拉取Docker镜像 看到拉取的warp镜像已经跑起来了 这里的docker run minio warp v0 4 5 h 就是查看 help文档 xff0c 上面那条语句原型是docker run minio warp v0 4 5 w
  • SpringBoot中的service报空指针异常

    SpringBoot中的service报空指针异常 异常排查 xff1a 1 检查Service是否加了 64 Service注解 2 Controller中的属性service是否加了 64 Autowired注解 3 检查所写的对外接口
  • 本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题)

    最近做一个课程项目 xff0c 在本地开发完后部署到服务器上 xff0c 一切都比较顺利 但是在登录用户的时候却一直显示验证码错误 xff01 xff01 xff01 排错过程 1 代码检查2 参数检查3 外层检查4 直接访问5 通过Ngi
  • 如何在Golang中使用MongoDB的事务

    如何在Golang中使用MongoDB的事务 一 Mongo中的事务1 Mongo新特性2 基于会话的事务3 事务相关命令 二 搭建Mongo副本集1 安装MongoDB2 环境变量配置3 创建副本集目录3 1 创建主节点相关目录3 2 创
  • Golang中AK/SK认证的实现

    Golang实现AK SK认证 一 AK SK概述1 什么是AKSK2 AK SK认证过程 二 AK SK认证例子1 设计ak sk的请求参数2 数据库中保存sk3 客户端生成签名4 服务端校验签名 一 AK SK概述 1 什么是AKSK
  • BC20 AT指令测试

    1 准备工作 1 1 单片机型号 1 2 软件准备 下载链接 xff1a https pan baidu com s 1uLPwV2OuvxP6X6eq Eplow 提取码 xff1a rc77 1 3 程序下载 在网盘资料中下载名为dem
  • 模拟Docker为容器建立bridge网络

    模拟Docker为容器建立bridge网络 1 安装docker2 创建Nginx容器3 手动为容器设置网络4 验证网络 在阅读本文之前 xff0c 请先了解一下linux的namespace机制 1 安装docker Centos下安装
  • Golang服务端对接Google Play结算系统订阅

    Google订阅 公司产品需要需对Google订阅 xff0c 查了很多资料和相关文档 xff0c 最终总结出以下内容 如果本文中存在任何不准确的地方 xff0c 请不吝指出 xff0c 我会尽快改正 Google相关文档 xff1a 销售
  • (八) OAuth 2.0 认证成功,认证失败,退出成功

    认证成功 监听AuthenticationSuccessEvent xff0c 注意在刷新令牌 xff0c 校验令牌 xff0c 登录密码校验成功都会发布这个事件 xff0c 所以我们需要在监听器里面做一些排查判断 successHandl
  • 单片机组合实验二——定时器,数码管显示

    题目 xff1a 两个数码管 xff0c K1 K2两个按键 xff0c 完成K1启动计数 xff0c K2暂停计数 xff0c 每一秒钟数码管增加1 xff0c 60秒钟后 xff0c 蜂鸣器响一声 xff0c 数码管回归0 xff0c
  • 串口控制蜂鸣器

    题目 xff1a 通过串口助手发送1 xff0c 蜂鸣器以400ms频率发声 xff1b 发送2 xff0c 以200ms频率发声 xff1b 发送3 xff0c 以100ms频率发声 xff1b 发送4 xff0c 蜂鸣器不发声 span
  • 51单片机——简易时钟

    代码 span class token macro property span class token directive keyword include span span class token string 34 reg51 h 34