项目8—八位数码管动态显示(包含程序化简)

2023-11-11

利用74HC573芯片

74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。

仿真图如下:

利用网络标号连接各个器件。

#include<reg51.h>
unsigned char seven_seg[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char sec = 30,min = 20,hour = 12;
unsigned char cp,cp1,cp2,flash;
sbit LE = P1^0;
void timer0_isr(void) interrupt 1
{
	TH0 = (65536 - 2000) /256;
	TL0 = (65536 - 2000) %256;
	P0 = 0xff;
	P0 = 0x01;LE = 0;LE = 1;LE = 0;P0 = seg[0];
    P0 = 0x02;LE = 0;LE = 1;LE = 0;P0 = seg[1];
    P0 = 0x04;LE = 0;LE = 1;LE = 0;P0 = seg[2];
    P0 = 0x08;LE = 0;LE = 1;LE = 0;P0 = seg[3];
    P0 = 0x10;LE = 0;LE = 1;LE = 0;P0 = seg[4];
    P0 = 0x20;LE = 0;LE = 1;LE = 0;P0 = seg[5];
    P0 = 0x40;LE = 0;LE = 1;LE = 0;P0 = seg[6];
    P0 = 0x80;LE = 0;LE = 1;LE = 0;P0 = seg[7];
	cp++;
	if(cp >= 8)cp = 0;
	cp1++;
	if(cp1 >= 250){cp1 = 0;cp2++;flash = ~flash;}
	if(cp2 >= 2){cp2 = 0;sec++;}
	if(sec >= 60){sec = 0;min++;}
	if(min >= 60){min = 0;hour++;}
	if(hour >= 24)hour = 0;		
}
void timer0_init(void)
{
	TMOD = 0x01;
	TH0 = (65536 - 2000) /256;
	TL0 = (65536 - 2000) %256;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
}
void main(void)
{
	timer0_init();
	while(1)
	{seg[0] = seven_seg[sec % 10];
	seg[1] = seven_seg[sec / 10];
	seg[2] = 0xbf | flash;
	seg[3] = seven_seg[min % 10];
	seg[4] = seven_seg[min / 10];
	seg[5] = 0xbf | flash;
	seg[6] = seven_seg[hour % 10];
	seg[7] = seven_seg[hour / 10];}
}

 由于程序重复,可以简化为数组。

以上程序可以化简

#include<reg51.h>
unsigned char seven_seg[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char bit_scan[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char seg[8],sec = 30,min = 20,hour = 12;
unsigned char cp,cp1,cp2,flash;
sbit LE = P1^0;
void timer0_isr(void) interrupt 1
{
	TH0 = (65536 - 2000) /256;
	TL0 = (65536 - 2000) %256;
	P0 = 0xff;
	P0 = bit_scan[cp];LE = 0;LE = 1;LE = 0;P0 = seg[cp];
	cp++;
	if(cp >= 8)cp = 0;
	cp1++;
	if(cp1 >= 250){cp1 = 0;cp2++;flash = ~flash;}
	if(cp2 >= 2){cp2 = 0;sec++;}
	if(sec >= 60){sec = 0;min++;}
	if(min >= 60){min = 0;hour++;}
	if(hour >= 24)hour = 0;		
}
void timer0_init(void)
{
	TMOD = 0x01;
	TH0 = (65536 - 2000) /256;
	TL0 = (65536 - 2000) %256;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
}
void main(void)
{
	timer0_init();
	while(1)
	{seg[0] = seven_seg[sec % 10];
	seg[1] = seven_seg[sec / 10];
	seg[2] = 0xbf | flash;
	seg[3] = seven_seg[min % 10];
	seg[4] = seven_seg[min / 10];
	seg[5] = 0xbf | flash;
	seg[6] = seven_seg[hour % 10];
	seg[7] = seven_seg[hour / 10];}
}

运行程序:

 

 

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

项目8—八位数码管动态显示(包含程序化简) 的相关文章

  • 积分规划:构建全面会员积分管理系统

    在当今竞争激烈的市场环境中 企业要想保持用户的忠诚度和活跃度 建立一个全面的会员积分管理系统是至关重要的 积分制度不仅可以激励用户参与 还可以增加用户的消费频次和购买金额 本文将深入探讨如何构建全面的会员积分管理系统 以实现更好的私域营销效

随机推荐

  • 消息队列(MQ)

    一 为什么要用消息队列 消息队列的应用场景 应用解耦 异步任务 流量削峰 问题背景 学生向老师请教问题 如果学生A正在向老师请教问题 那么后面的学生依次排队等候 直到轮到自己请教问题 这样的模式会使整个系统的效率较低 学生排队等待时间太久
  • pygame学习笔记

    pygame学习笔记 1 基础知识 参考 1 基础知识 1 设置死循环 持续显示窗口 import pygame import sys pygame init 初始化pygame size 320 240 设置窗口大小 w h screen
  • 数字逻辑触发器(一)

    触发器 一 定义 是一种具有记忆功能的逻辑部件 具有两个稳定的输出状态 用这两个稳定的状态来表示二值信号的0和1 在外界输入信号的激励下 触发器的输出状态会发生改变 二 触发器的种类举例 基本RS触发器 主从触发器 维持阻塞触发器 D触发器
  • 【appium报错】Original error:Could not proxy command to remote server. Original error:socket hang up

    博客链接1 系统自带的应用kill掉appium相关的进程 博客链接2 卸载并重装appium相关安装包 如果上面的方法仍不能解决问题 暴力解决 卸载设备上的appium setting 等appium安装的app 卸载自动化启动的app
  • UncaughtExceptionHandler 获取线程运行时异常

    我们知道线程执行体的方法接口定义为 public void run 因此线程在执行单元中是不允许抛出checked异常的 且线程之间是相对独立的 他们运行在自己的上下文当中 派生它的线程无法直接感知到它在运行时出现的异常信息 为了解决这个问
  • P2084 进制转换

    题目背景 无 题目描述 今天小明学会了进制转换 比如 10101 2 那么它的十进制表示的式子就是 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 那么请你编程实现 将一个M进制的数N转换成十进制表示的式子 注意 当系数为0时
  • vector 删除元素的几种方法

    vector 删除元素的几种方法 1 利用成员函数pop back 可以删除最后一个元素 2 利用成员函数erase 可以删除由一个iterator指出的元素 3 通过STL中的算法库函数remove 删除指定的元素 与list容器自带的成
  • 鱼眼相机标定

    分享一个最近在复习的一个鱼眼相机标定 这个大佬的链接 因为课题相关 先视觉2D检测再通过标定形成视锥然后再点云目标检测 所以先埋一个坑 刚好2D检测这块做的差不多 不过是Python版本哈 后续肯定要用C 先上一个大佬的鱼眼内参去畸变的链接
  • MavenFor this reason, future Maven versions might no longer support building such malformed projects

    使用IDEA MAVEN clean时提示如下错误 Maven For this reason future Maven versions might no longer support building such malformed pr
  • 查字典(c++)

    思路 判断insert和find insert放入string set find就用count 过程 1 判断insert和find 2 放入set中 3 判断结果 代码 include
  • 清除浮动之双伪元素清除浮动

  • 结构体指针

    结构体指针 当一个指针变量用来指向一个结构体变量时 1 结构体指针变量的值是所指向的结构体变量的起始地址 2 通过结构体指针可以访问结构体变量 定义形式 结构体名 结构体指针变量 也可在定义结构体时 同时定义这个结构体变量 注 1 结构体指
  • 实现从一个类中的实体对象获取所有属性值注入到另一个不同类的实体对象的对应属性中

    背景 由于dao层的可视化对象 bean 跟service层以及controller层的bean对象是分开的 也就是同一业务流水线中 在controller层是跟界面或者接口的交互bean 而到了操作数据库层则用的匹配数据库表的实体bean
  • python wechatsougou_使用Python的requests库模拟登陆微信搜狗,爬取100X10篇微信文章并保存到MySQL...

    自学的python和爬虫技术 使用到Redis MySQL数据库 request请求模块 re Xpath解析模块 dumps loads序列化和反序列化 还可以配合代理池使用 爬取的是https weixin sogou com 网站只能
  • RPM打包原理、示例、详解

    RPM Redhat Package Manager 是用于Redhat CentOS Fedora等Linux 分发版 distribution 的常见的软件包管理器 因为它允许分发已编译的软件 所以用户只用一个命令就可以安装软件 看到这
  • BI数据系统的设计流程

    BI大数据产品 数据管理平台可以通过报表或者BI模块来搭建 在专栏 帆软数据应用研究院 里有关于企业数据管理和BI报表平台建设的案例 站在项目实施的角度 可以从技术和业务两个层面来考虑 前期进行需求调研 罗列了一张建设思路图 技术上需要考虑
  • 量化投资学习-30:股性与人性,从傅里叶变换谈谈股市大V的操作风格的观察

    1 名家的操作风格的差异 2 方波的傅里叶变换 徐小明 1次基频率 冯矿伟 3次谐波 东风红 5 7次谐波
  • 把多层次的 XML 文档解析为 TreeView 显示

    XML 文档是一个有多层树形节点的文档 因为节点数不确定 所以要跟踪每个节点 需要用到递归 肉眼阅读 XML 比较累 需要去对付一堆的尖括号 用 Delphi 程序把它显示为一个 TreeView 的树结构 比较容易用眼睛去看 以下是我的代
  • 对比学习MocoV1

    对比学习 希望模型能分辨哪些图片类似 哪些图片不类似 即类似的图片特征空间拉近 不类似的拉远 可以设计不同的代理任务提供监督信号 代理任务例子 个体判别 Xi经过两种Ti变成两张不一样的照片 为正样本 其他都是负样本 损失 NCE loss
  • 项目8—八位数码管动态显示(包含程序化简)

    利用74HC573芯片 74HC573的八个锁存器都是透明的D型锁存器 当使能 G 为高时 Q输出将随数据 D 输入而变 当使能为低时 输出将锁存在已建立的数据电平上 输出控制不影响锁存器的内部工作 即老数据可以保持 甚至当输出被关闭时 新