51电子表

news2025/4/18 21:15:52

设计要求:

基本任务:

用单片机和数码管设计可调式电子钟,采用24小时制计时方式,要求能够稳定准确计时,并能调整时间。发光二极管每秒亮灭一次。电子钟显示格式为:时、分、秒各两位,中间有分隔符,格式为xx-xx-xx,共8位。采用三个按键调整时间,具体任务如下:

  1. 发光二极管每秒钟亮灭一次(亮500ms,灭500ms)。
  2. 上电自动显示初始时间 12-00-00。
  3. 实现时钟走时和显示时、分、秒。
  4. 当第一次按下第一个按键时进入时间调节状态,实现对显示时间的分钟调节,按下第二个按键时实现分钟的加1调节,按下第三个按键时实现分钟的减1调节。
  5. 当第二次按下第一个按键时进入显示时间的小时调节状态,按下第二个按键时实现小时的加1调节,按下第三个按键时实现小时的减1调节。

当第三次按下第一个按键时数字时钟恢复正常时间显示。

内容及步骤:

一、电路原理图

二、源代码(包括注释)
#include<reg51.h>
#define uChar unsigned char
#define uInt unsigned int
uChar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //单个数码管字模
uChar b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};              //选通数码管位数
uChar second=00,minute=00,hour=12,count;                          //赋初始值
sbit one = P3^0;                                                  // 调节位
sbit two = P3^1;                                                  //加一位
sbit three = P3^2;                                                //减一位
sbit four= P3^3;                                                  //暂停位
sbit five= P1^0;                                                  //LED状态位
void Delay(unsigned int t)                            //时间延时函数
{
	int i,x;
	for(i=1;i<=x;x++);
while(t)
	{
		t--;
	}
}
void Dispaly1(uChar second,uChar minute,uChar hour)   //数码管显示函数
{
	P2=b[0];              //小时的显示
	P0=a[hour/10];        //小时的十位显示
	Delay(10);
	P2=b[1];
	P0=a[hour%10];        //小时的个位显示
	Delay(10);
	
	P2=b[2];              //--显示
	P0=0x40; 
	Delay(10);
	
	P2=b[3];              //分钟显示
	P0=a[minute/10];   
	Delay(10);
	
	P2=b[4];
	P0=a[minute%10]; 
	Delay(10);
	
	P2=b[5]; 
	P0=0x40; 
	Delay(10);
	
	P2=b[6];             //秒钟显示
	P0=a[second/10];    
	Delay(10);
	
	P2=b[7];; 
	P0=a[second%10]; 
	Delay(10);
}

void Keyscan1()      //调节函数
{
	static uChar i=0,j=0;   //定义初始值,以I,J分别实现暂停和调节功能 i是暂停位次数,j是调节标志位
	if(four==0)        //暂停键按下
		{
			while(!four);
			i++;
		}
		if(i%2==1)
			{
				TR0=0;     //关中断  停止计时
			}
			if(i%2==0)
				{
					TR0=1;  //开中断
				}
				if(one==0){     //当按下第一个键位
					while(!one);
					j++; 
				}
					if(j%3==1)    //j+1使进入到分钟的调节
						{
							if(two==0)
								{
									while(!two);
									minute++;
									if(minute==60)        //判断进位
										minute=0; 
								}
							if(three==0)
								{
									while(!three);
									
									if(minute==0)          //判断退位标志
										minute=60; 
                  minute--;
								}
						}
						if(j%3==2)  //进入到小时的调节
							{
								if(two==0)
									{ 
										while(!two);
										hour++;
										if(hour==24)
											hour=0; 
									}
								if(three==0)
									{ 
										while(!three);
										hour--;
										if(hour==0)
											hour=24; 
									}
							}
}

void main()   //主函数
{	void delay(int);
	int time = 50;
	TMOD=0x01; 	  //TO定时方式一
	TH0=(65536-10000)/256;  //高位值  定义10ms
	TL0=(65536-10000)%256;  //低位值
	EA=1;    //开总中断
	ET0=1;   //开TO中断
	TR0=1;   //启动TO
	while(1)
		{
			static uChar h=0;
			five=!five;
			delay(time);
			Dispaly1(second,minute,hour);  //函数初始化
			Keyscan1();    //函数初始化
		}
}

void time0_int(void) interrupt 1   //中断函数 循环进位
{
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	count++;
	if(count==100)                // 一秒
		{
			count=0;
			second++;
			if(second==60)            //一分钟
				{
					second=0;
					minute++;
					if(minute==60)        //一小时
						{
							minute=0;
							hour++;
							if(hour==24)      //24小时
								{
									hour=0;
								}
						}
				}
		}
}

三、流程图

四、仿真运行结果及分析

初始值状态:

第一次按下K1并按下一次K2(分加)

第一次按下K1并按下两次K3(分减)

第二次按下K1并按下一次K2(时加)

第二次按下K1并按下两次K3(时减)

第三次按下K1(恢复正常计时)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9-函数的定义及用法

一.前言 C 语⾔强调模块化编程&#xff0c;这⾥所说的模块就是函数&#xff0c;即把每⼀个独⽴的功能均抽象为⼀个函数来实现。从⼀定意义上讲&#xff0c;C 语⾔就是由⼀系列函数串组成的。 我们之前把所有代码都写在 main 函数中&#xff0c;这样虽然程序的功能正常实现&…

用HTML和CSS绘制佩奇:我不是佩奇

在这篇博客中&#xff0c;我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力&#xff0c;仅用样式就能创造出复杂的图形&#xff0c;而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…

彩讯携Rich AICloud与一体机智算解决方案亮相中国移动云智算大会

2025年4月10日&#xff0c;2025中国移动云智算大会在苏州盛大开幕&#xff0c;本次大会以“由云向智 共绘算网新生态”为主题&#xff0c;与会嘉宾围绕算力展开重点探讨。 大会现场特设区域展出各参会单位的最新算力成果&#xff0c;作为中国移动重要合作伙伴&#xff0c;彩讯…

声学测温度原理解释

已知声速&#xff0c;就可以得到温度。 不同温度下的胜诉不同。 25度的声速大约346m/s 绝对温度-273度 不同温度下的声速。 FPGA 通过测距雷达测温度&#xff0c;固定测量距离&#xff0c;或者可以测出当前距离。已知距离&#xff0c;然后雷达发出声波到接收到回波的时间&a…

Cuto壁纸 2.6.9 | 解锁所有高清精选壁纸,无广告干扰

Cuto壁纸 App 提供丰富多样的壁纸选择&#xff0c;涵盖动物、风景、创意及游戏动漫等类型。支持分类查找与下载&#xff0c;用户可轻松将心仪壁纸设为手机背景&#xff0c;并享受软件内置的编辑功能调整尺寸。每天更新&#xff0c;确保用户总能找到新鲜、满意的壁纸。 大小&am…

C语言 AI 通义灵码 VSCode插件安装与功能详解

在 C 语言开发领域&#xff0c;一款高效的编码助手能够显著提升开发效率和代码质量。 通义灵码&#xff0c;作为阿里云技术团队打造的智能编码助手&#xff0c;凭借其强大的功能&#xff0c;正逐渐成为 C 语言开发者的新宠。 本文将深入探讨通义灵码在 C 语言开发中的应用&am…

二分查找5:852. 山脉数组的峰顶索引

链接&#xff1a;852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 事实证明&#xff0c;二分查找不局限于有序数组&#xff0c;非有序的数组也同样适用 二分查找主要思想在于二段性&#xff0c;即将数组分为两段。本体就可以将数组分为ar…

【模拟电路】稳压二极管/齐纳二极管

齐纳二极管也被称为稳压二极管,是一种特殊的二极管,其工作原理是利用PN结的反向击穿状态。在齐纳二极管中,当反向电压增加到一定程度,即达到齐纳二极管的击穿电压时,反向电流会急剧增加,但此时齐纳二极管的电压却基本保持不变。这种特性使得齐纳二极管可以作为稳压器或电…

项目周期过长,如何拆分里程碑

应对项目周期过长&#xff0c;合理拆分里程碑需要做到&#xff1a;明确项目整体目标与阶段目标、合理进行任务细分与分组、设定阶段性里程碑节点、实施有效的进度跟踪与反馈机制、灵活进行里程碑调整。其中&#xff0c;明确项目整体目标与阶段目标尤为关键。这能够帮助团队在长…

蓝桥杯刷题总结 + 应赛技巧

当各位小伙伴们看到这篇文章的时候想必蓝桥杯也快开赛了&#xff0c;那么本篇文章博主就来总结一下一些蓝桥杯的应赛技巧&#xff0c;那么依旧先来走个流程 那么接下来我们分成几个板块进行总结 首先是一些基本语法 编程语言的基本语法 首先是数组&#xff0c;在存数据的时候…

希哈表的学习

#include <stdio.h> #include <stdlib.h> #include "uthash.h"typedef struct {int id; // 学号&#xff0c;作为keychar name[20]; // 姓名&#xff0c;作为valueUT_hash_handle hh; // 必须有这个字段 } Student;Student* studen…

Qt之OpenGL使用Qt封装好的着色器和编译器

代码 #include "sunopengl.h"sunOpengl::sunOpengl(QWidget *parent) {}unsigned int VBO,VAO; float vertices[]{0.5f,0.5f,0.0f,0.5f,-0.5f,0.0f,-0.5f,-0.5f,0.0f,-0.5f,0.5f,0.0f };unsigned int indices[]{0,1,3,1,2,3, }; unsigned int EBO; sunOpengl::~sunO…

零基础开始学习鸿蒙开发-智能家居APP离线版介绍

目录 1.我的小屋 2.查找设备 3.个人主页 前言 好久不发博文了&#xff0c;最近都忙于面试&#xff0c;忙于找工作&#xff0c;这段时间终于找到工作了。我对鸿蒙开发的激情依然没有减退&#xff0c;前几天做了一个鸿蒙的APP&#xff0c;现在给大家分享一下&#xff01; 具体…

不再卡顿!如何根据使用需求挑选合适的电脑内存?

电脑运行内存多大合适&#xff1f;在选购或升级电脑时&#xff0c;除了关注处理器的速度、硬盘的容量之外&#xff0c;内存&#xff08;RAM&#xff09;的大小也是决定电脑性能的一个重要因素。但究竟电脑运行内存多大才合适呢&#xff1f;这篇文章将帮助你理解不同使用场景下适…

华为云 云化数据中心 CloudDC | 架构分析与应用场景

云化数据中心 CloudDC 云化数据中心 (CloudDC)是一种满足传统DC客户云化转型诉求的产品&#xff0c;支持将客户持有服务器设备部署至华为云机房&#xff0c;通过外溢华为云的基础设施管理、云化网络、裸机纳管、确定性运维等能力&#xff0c;帮助客户DC快速云化转型。 云化数据…

【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模

变压器模型理论分析 对于任意的无源电路或者等效电路&#xff0c;当画完原理图后&#xff0c;能否认为已经知道其中的两个节点&#xff1f;vin和vout之间的明确解析解 是否存在一个通用的算法&#xff0c;将这里的所有元素都变成了符号&#xff0c;使得这个算法本身就是一个函…

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

&#xfeff;今天和大家分享一款在 G 站获得了 26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes 的中文版如何在 Linux 环境使用 docker 本地部署&#xff0c;并结合 cpolar 内网穿透工具配置公网地址&#xff0c;轻松实现远程在线协作的详细教程。 Trilium Notes 是…

C++基础精讲-01

1C概述 1.1初识C 发展历程&#xff1a; C 由本贾尼・斯特劳斯特卢普在 20 世纪 70 年代开发&#xff0c;它在 C 语言的基础上增加了面向对象编程的特性&#xff0c;最初被称为 “C with Classes”&#xff0c;后来逐渐发展成为独立的 C 语言。 语言特点 &#xff08;1&#x…

为什么Java不支持多继承?如何实现多继承?

一、前言 Java不支持多继承&#xff08;一个类继承多个父类&#xff09;主要出于文中设计考虑&#xff1b;核心目的是简化语言复杂性并避免潜在的歧义性问题。 二、直接原因&#xff1a;菱形继承/钻石继承问题&#xff08;Diamond Problem&#xff09; 假设存在如下继承关系&…

[特殊字符] Spring Boot 日志系统入门博客大纲(适合初学者)

一、前言 &#x1f4cc; 为什么日志在项目中如此重要&#xff1f; 在开发和维护一个后端系统时&#xff0c;日志就像程序运行时的“黑匣子”&#xff0c;帮我们记录系统的各种行为和异常。一份良好的日志&#xff0c;不仅能帮助我们快速定位问题&#xff0c;还能在以下场景中…