基于51单片机的时钟设计

2023-11-12

今天小刚做了一个基于51单片机的时钟,本来想把数码管显示动态扫描放到定时器1的中断里到但是,一按按键,就卡住了,效果不是很理想。所以就放弃了这种方案。不过最后也实现了功能。
以下是程序代码
4个按键功能:
1.切换
2.时间+
3.时间-
4.清零
注意TMOD |=0x01的使用!
最后,大家一起加油吧!.jpg

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit du=P2^6;
sbit wei=P2^7;
sbit key_s2=P3^0;
sbit key_s3=P3^1;
sbit key_s4=P3^2;
sbit key_s5=P3^3;

uchar code duantabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管断显示
uchar code weitabel[]={0xfe,0xfd,0xfb,0xf7};  
static uchar m,i,miao,fen,fenge,fenshi,miaoge,miaoshi,timer,shi,shishi,shige,flag;
void delay(uint z)//延时1ms
{
	uchar x,y;
	for(x=z;x>0;x--)
	for(y=114;y>0;y--);
}
void display1()//数码管显示函数1,显示分钟和秒钟
{
	
	miaoge=miao%10;
	miaoshi=miao/10;
	fenge=fen%10;
	fenshi=fen/10;
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfe;
	wei=0;
	
	du=1;
	P0=duantabel[fenshi];
	du=0;
	delay(2);
	
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfd;
	wei=0;
	
	du=1;
	P0=duantabel[fenge];
	du=0;
	delay(2);
	
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfb;
	wei=0;
	
	du=1;
	P0=duantabel[miaoshi];
	du=0;
	delay(2);
		
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xf7;
	wei=0;
	
	du=1;
	P0=duantabel[miaoge];
	du=0;
	delay(2);
}

void display2()//数码管显示函数显示小时和分钟
{
	fenge=fen%10;
	fenshi=fen/10;
	shige=shi%10;
	shishi=shi/10;
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfe;
	wei=0;
	
	du=1;
	P0=duantabel[shishi];
	du=0;
	delay(2);
	
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfd;
	wei=0;
	
	du=1;
	P0=duantabel[shige];
	du=0;
	delay(2);
	
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xfb;
	wei=0;
	
	du=1;
	P0=duantabel[fenshi];
	du=0;
	delay(2);
		
	P0=0Xff;//清除段码,防止之前段码影响
	wei=1;
	P0=0xf7;
	wei=0;
	
	du=1;
	P0=duantabel[fenge];
	du=0;
	delay(2);
}

void timer0Init()//定时器定时
{
	TR0=1;
	TMOD |= 0X01;
	TH0=0X2c;//定时器赋初值50ms
	TL0=0X15;
}

//void timer1Init()//开定时器中断1
//{
//	TMOD |= 0x10;  //定时器16为计数工作模式
//	TH1 =0xFC;
//	TL1 =0xFF; //5ms
//	EA = 1;	//开总中断
//	ET1 = 1; //开定时器1中断
//	TR1 = 1;//启动定时器1
//}
void main()
{
	timer0Init();
//	timer1Init();
	while(1)
	{
		if(TF0==1)
		{
			TF0=0;
			TH0=0X2c;//定时器赋初值50ms
			TL0=0X15;
			m++;
		}
		if(m>15)
		{
			m=0;
			miao++;
		}
		if(miao>=60)
		{
			miao=0;
			fen++;
		}
		if(fen>=60)
		{
			fen=0;
			shi++;
		}
		if(shi>=24)
		{
			miao=0;
			fen=0;
			shi=0;
		}
			if(flag%2==0)
		{
			display1();
		}
		else
		{
			display2();
		}	
		if(key_s2==0)//先检测,消抖,检测,执行,松手检测
		{
			delay(20);//按键消抖
					if(key_s2==0)
					{
						flag++;
						while(!key_s2);//松手检测
					}
		}
		if(key_s3==0)//先检测,消抖,检测,执行,松手检测
		{
			delay(20);//按键消抖
					if(key_s3==0)
					{
						miao++;
						while(!key_s3);//松手检测
					}
		}
		if(key_s4==0)//先检测,消抖,检测,执行,松手检测
		{
			delay(20);//按键消抖
					if(key_s4==0)
					{
						miao=miao-1;
						while(!key_s4);//松手检测
					}
		}
		if(key_s5==0)//先检测,消抖,检测,执行,松手检测
		{
			delay(20);//按键消抖
					if(key_s5==0)
					{
						miao=0;
						fen=0;
						shi=0;
						while(!key_s5);//松手检测
					}
		}
	}
}
//void timer1() interrupt 3
//{
//	TH1 =0xFC;
//	TL1 =0x17; //5ms  模式1非自动重装需要手动重装
//	
//	if(flag%2==0)
//		{
//			display1();
//		}
//		else
//		{
//			display2();
//		}	
//}		

在这里插入图片描述

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

基于51单片机的时钟设计 的相关文章

随机推荐

  • ZYNQ7000系列 DDR读取正确性

    摘要 使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器 对功能进行硬件加速 加速器和ARM之间的交互信息一般包含自定义加速指令传递 待计算数据以及计算结果 这三种交互信息 使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设
  • java 档案整理 生成归档章 透明背景图片

    import javax imageio ImageIO import java awt import java awt image BufferedImage import java io File import java io IOEx
  • unity3d鼠标点击,获取世界坐标

    unity中有关于鼠标位置的函数 Input mousePosition 但不得不说 这个函数不到位 可以用一个print函数输出一下这个坐标会发现 只有X Y值在改变 Z值没有发生变化 并且在屏幕的左下角固定为 0 0 0 查看文档后发现
  • 类加载器是否为空

    package com bzu csh 项目名称 Test1 类名称 Test2 类描述 创建人 admin 创建时间 2017年1月7日 下午9 41 36 修改人 admin 修改时间 2017年1月7日 下午9 41 36 修改备注
  • 数据可视化之折线图绘制

    使用python中的matplotlib绘制折线图 环境需求 python 或者anaconda pycharm 和第三方库matplotlib 首次先绘制简单的折线图 其他的参数可以在使用熟练后一点一点的加入 import matplot
  • 计算机网络课程笔记

    学习MOOC华南理工计算机网络课程笔记 第1章 概述 1 1 为什么要学习计算机网络 1 2 互联网发展史 1 3 常用的基本概念 1 4 参考模型 1 5 参考模型相关概念 1 6 本课程的组织 第2章 物理层 2 1 物理层概述 2 2
  • JNI编程—JNI基础

    什么是JNI 怎么使用 JNI Java Native Interface 它是Java平台的一个特性 并不是Android系统特有的 其实主要是定义了一些JNI函数 让开发者可以通过调用这些函数实现Java代码调用C C 的代码 C C
  • python 如何编写一个自己的包

    python 如何编写一个自己的包 先写function 内容 package wadepypk ls init py f1 py f2 py f1 py def show print in pkg f show f2 py def sho
  • unix bsd linux gun   粗略解释

    最早的unix是开放的 很多组织对unix都有修改 期中比较有名的就是伯克利大学的修改版本 叫做bsd 是unix的分支 由于bsd的协议允许你直接使用 修改他的代码 并且可以作为商业用途 所以很多公司的unix都是从bsd衍生过来的 比如
  • mongodb学习笔记一:mongodb安装与介绍

    一 前言 最近开始学习非关系型数据库MongoDB 却在博客园上找不到比较系统的教程 很多资料都要去查阅英文网站 效率比较低下 本人不才 借着自学的机会把心得体会都记录下来 方便感兴趣的童鞋分享讨论 部分资源出自其他博客 旨将零散知识点集中
  • C/C++函数模板template

    1 说明 当函数处理功能相似 函数名相同 但是参数个数或者类型有区别 我们知道实现的方式是依靠函数重载 overload 但是如果仅函数参数或返回数的类型不同 我们想到靠函数模板解决这个问题 不仅节省内存 而且不用复杂声明多个函数 函数模板
  • 为线程池中的每个线程设置UncaughtExceptionHandler

    参考了 java并发编程实战 P134内容 每当线程池需要创建一个线程时 都是通过调用线程工厂方法来完成的 默认的线程工厂方法将创建一个新的 非守护的线程 并且不包好特殊的配置信息 如果你希望在线程运行之前 之后 或者运行中如果发生异常等情
  • Linux 系统 lscpu 命令详解

    文章目录 前言 lscpu 命令详解 命令 1 查看物理 CPU 个数 2 查看每个物理 CPU 核数 3 查看总线程数 4 查看内存信息 5 查看 linux 系统版本 前言 Linux 系统查看系统相关信息方法很多 以下详细介绍 lsc
  • 一颗二叉树代码(图解)

    什么是二叉树 树结构是一种非线性存储结构 存储的是具有一对多关系的数据的集合 而树形结构的一种抽象出来的数据结构往往是二叉树的形式 满足以下两个条件的树就是二叉树 本身是有序树 树中包含的各个节点的度不能超过 2即只能是 0或者1 或者 2
  • 项目时间管理-架构真题(二十四)

    1 霍尔提出了系统方法的三维结构体系 通常称为霍尔三维结构 这就是系统工程方法论的基础 霍尔三维结构以时间堆 堆 知识堆组成的立体结构概括性表示出系统工程在各阶段 各步骤以及所涉及的知识范围 其中时间维是系统的工作进程 对于一个具体的工程项
  • 计算机网络面试八股文攻略(二)—— TCP 与 UDP

    一 基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP 传输控制协议 Transmission Control Protocol 提供面向连接的 可靠的数据传输服务 具体来说就是一种要建立双端连接才能发送数据 能确保传输
  • react拖拽排序、js列表拖拽

    列表拖动排序的解决方案有多种 个人感觉最简单的就是zent 提供的 Sortable 组件了 一 zent Sortable 拖拽排序 推荐 简单明了 zent 官网 https zent contrib gitee io zent zh
  • 1139: 输出最短字符串java

    import java util Scanner public class Main public static void main String args Scanner input new Scanner System in int n
  • Qt第六章 多窗口编程

    一 QMessageBox 消息对话框 掌握 QMessageBox继承自QDialog 是一个Qt内置的用来展示信息或询问用户一个问题的模态对话框 预设了四种类型 像那些已经写好的窗口 这些现成的东西都会有一些特性 就是他们的对象都不需要
  • 基于51单片机的时钟设计

    今天小刚做了一个基于51单片机的时钟 本来想把数码管显示动态扫描放到定时器1的中断里到但是 一按按键 就卡住了 效果不是很理想 所以就放弃了这种方案 不过最后也实现了功能 以下是程序代码 4个按键功能 1 切换 2 时间 3 时间 4 清零