【单片机竞赛:共阳数码管静态控制】

2023-05-16

51单片机(国信天长单片机实训平台)基于keli的常用程序之 共阳数码管一般静态控制程序设计

文章目录

  • 51单片机(国信天长单片机实训平台)基于keli的常用程序之 共阳数码管一般静态控制程序设计
  • 前言
  • 一、国信长天单片机竞赛实训平台的电路图与分析
    • 1.观察电路图
    • 2.关于数码管段码与显示的关系
  • 二、编写程序步骤
    • 1.主程序
    • 2.数码管代数编码
    • 3.编写延时函数Delay
    • 4.编写关闭外设函数
    • 5.编写138选择函数
    • 6.编写数码管控制函数
    • 7.整合所有函数
  • 总结

前言

实验目的:8个数码管分别单独依次显示0 ~ 9,所有数码管依次显示0 ~ F和- . 。

一、国信长天单片机竞赛实训平台的电路图与分析

国信长天单片机竞赛实训平台电路图
在这里插入图片描述

在这里插入图片描述

1.观察电路图

通过观察电路图,我们可以发现,数码管由a1~ dp1(h1)和com1~ com8控制,其中com1~ com4,com5 ~ com8分别控制两个四位数码管,a1~ dp1(h1)由个573移位寄存器连接电阻控制,com1~ com8由573寄存器控制,负责控制灯亮的位置,而寄存器分别由138的Y7与Y6控制。

2.关于数码管段码与显示的关系

在这里插入图片描述

16进制代码显示的数字hgfedcba
0xc0011000000
0xf9111111001
0xa4210100100
0xb0310110000
0x99410011001
0x92510010010
0x82610000010
0xf8711111000
0x80810000000
0x90910010000
0x88A10001000
0x80B10000000
0xc6C11000110
x0c0D11000000
0x86E10001100
0x8eF10001110
0xbf10111111
0x7f.01111111

如图所示,abcdefgh分别控制八个亮的部位,共阳级的意思是后端接阳极(1),接阴极(0)即可触发,则可以得到16进制的16个代数的二进制编码,a为低位,h为高位,改编成16进制编码,及为数码管段码。表格中列取的不代表是全部的,我们可以通过需要亮哪些,给它编码即可。

二、编写程序步骤

1.主程序

一般硬性格式的程序,因为一般都是这个框架,先让整体框架在你脑袋里形成,再一步一步完善。
主程序:

#include "reg52.h"
 void main()
 {
	 while(1)
	 { 
	 }

}

2.数码管代数编码

将段码编写进入数组,调用时方便

unsigned char code smg_daishu[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
 0x88,0x80,0xc6,0xc0,0x86,0x8e,
 0xbf,0x7f};//0123456789 abcdef - .

3.编写延时函数Delay

计算机执行程序的速度非常快,如果不主动添加延时函数让程序被动等待,则肉眼观察不到数码管的变化:

  void delay(unsigned int t)
 {
    while(t--);
	while(t--);
}

4.编写关闭外设函数

一般比赛需要关闭外设,同时防止给电时蜂鸣器乱叫:

 void stop()
 {
  P2=(P2&0x1f)|0x80;//关闭led 110
  P0=0xff;
  P2&=0x1f;
  P2=(P2&0x1f)|0xa0;//关闭继电器蜂鸣器 101
  P0=0;
  P2&=0x1f;
 }

关于底下这一行:

P2=(P2&0x1f)|0xa0;

上一篇文章有详细讲解,读者可以去自行阅读。这里是链接【单片机竞赛:LED灯的一般控制】。

5.编写138选择函数

  void HC138(unsigned char n)
 {
  switch(n)
	{
		case 6:
			P2=(P2 & 0x1f) | 0xc0;
		break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;
		break;
 }

因为需要用到Y6与Y7两个端口,所以通过switch选择使用哪种。

6.编写数码管控制函数

	void showsmgb(unsigned char dat,unsigned pos)
	{
	HC138(6);
	P0=0x01 << pos;
    HC138(7);
    P0=dat;
	}
	void shousmga()
	{
		unsigned char i,j;
		for(i=0;i<8;i++)
		{
		   for(j=0;j<10;j++)
		   {
				 showsmgb(smg_daishu[j],i);
				 delay(60000);
		   }
		}
		for(j=0;j<16;j++)
		{
	       HC138(6);
	       P0=0xff;
           HC138(7);
           P0=smg_daishu[j];
	       delay(60000);
	    }
	}

1.Y6控制位置,Y7控制输入,shousmgb为通过选择HC138的端口,来输出所以需要的输出的东西
2.showsmga第一个for循环嵌套一个for循环,懂得c语言基础的读者很容易了解到,为了从首到尾依次亮,i为位置,j为数据。如有需要了解参寻五毛变向的博客。
3.第二个for循环为全亮,将smg_daishu[j];中的所有数据依次显示。

P0=0x01 << pos;

关于上面一行,这里为什么是左移运算符,因为数码管从左到右亮,其实为从数据的低位到高位,但是计算机中二进制低位在右,所以是左移运算符。

7.整合所有函数

#include "reg52.h"
 void delay(unsigned int t)
 {
    while(t--);
	while(t--);
 }
unsigned char code smg_daishu[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
 0x88,0x80,0xc6,0xc0,0x86,0x8e,
 0xbf,0x7f};//0123456789 abcdef - .
 void HC138(unsigned char n)
 {
  switch(n)
	{
		case 6:
			P2=(P2 & 0x1f) | 0xc0;
		break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;
		break;
   }
 }
	void showsmgb(unsigned char dat,unsigned pos)
	{
	HC138(6);
	P0=0x01 << pos;
    HC138(7);
    P0=dat;
	}
	void shousmga()
		{unsigned char i,j;
		for(i=0;i<8;i++)
		{
		   for(j=0;j<10;j++)
		   {
				 showsmgb(smg_daishu[j],i);delay(60000);
		   }
		}
		 for(j=0;j<16;j++)
		   {
				 HC138(6);
	             P0=0xff;
                 HC138(7);
                 P0=smg_daishu[j];
				 delay(60000);
	     }
		 }
		void stop()
		{
		 P2=(P2&0x1f)|0x80;
         P0=0xff;
         P2&=0x1f;
	     P2=(P2&0x1f)|0xa0;
         P0=0;
         P2&=0x1f;
		 }
			
	main()
	{ stop();
   while(1)
	 {
		 shousmga();
		 delay(60000);
	 }
		 
 }

将所需要循环的放入主函数的for循环中,将关闭外设代码放入主函数中,大功告成。

总结

将数码管所需显示的数据放入数组中存取,是一个良好的编程手法,如需显示其他的也可以这样使用,搞清楚com端与所显示的区别,关于数码管静态编程的部分你就掌握的差不多啦。

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

【单片机竞赛:共阳数码管静态控制】 的相关文章

  • you-get 下载bilibili视频

    bilibili查看视频清晰度 you get i url https www bilibili com video BV17z411i7er p 61 1 debug 下载视频 you get format 61 flv1080 http
  • 解决“AttributeError: ‘str‘ object has no attribute ‘decode‘”问题

    问题描述 在跑代码的时候出现报错提示 Traceback most recent call last File 34 multi detect Nerual py 34 line 4 in lt module gt import BiLST
  • NGINX 进程通信机制

    本文地址 xff1a http blog csdn net spch2008 article details 38945033 nginx的进程通信分为三种类别 xff1a linux 系统与nginx 通信 xff0c master 进程
  • Could not find main class com/intellij/idea/Main

    Could not find main class com intellij idea Main 下载完Pycharm xff0c 打开时显示Could not find main class com intellij idea Main
  • 记事本里打“联通”为什么会变成乱码?

    记事本的编码问题 xff0c 当文档中所有字符都在 C0 AA DF 80 BB BF 这个范围的时候 xff0c notepad都无法确认文档的格式 xff0c 没有自动按照UTF 8格式来 34 Display 34 34 联通 34
  • 思博伦Spirent Testcenter交换机性能测试主要技术指标_丢帧率/吞吐量/转发速率之间的关系_双极未来

    转发速率 丢帧率和吞吐量是描述交换机转发性能的主要技术指标 xff0c 这些指标的测试结果可以客观地反映出被测交换机的性能 正确理解它们之间的联系与区别对于设计吞吐量 丢帧率和转发速率的测试方法非常重要 如下图所示 xff0c X轴表示 x
  • OpenStack-Ceilometer项目功能与架构介绍

    1 OpenStack Ceilometer项目简介 OpenStack通过Telemetry项目提供计量与监控服务 xff0c 该项目旨在针对组成已部署云的物理和虚拟资源 xff0c 可靠地收集并保存各类使用数据 xff0c 以便对这些数
  • redhat 查询端口占用

    linux redhat 端口和服务的查看与终止 redhat 查询端口占用情况和杀死占用的服务 netstat anp grep lt 端口号或者程序名称 gt 查8080端口占用情况 netstat anp grep 8080 查jav
  • mapl

    business card case executive veto power anime stream radio johann strauss black layout pink star job interview question
  • Knowledge Tracing: A Survey阅读笔记

    xff08 注 xff1a 为了方便后续阅读KT论文 xff0c 文中一些名词使用英文 文中保留的序号与原论文参考文献一致 行文会在后续反刍过程中改进 xff09 原文链接 xff1a https arxiv org abs 2201 06
  • iOS_NSAttributedString 的21种属性详细介绍(图文混排)

    说明 NSAttributedString 可以非常方便的实现文字排版和图文混排功能 共有21中效果 API 本文将较详细的介绍21种的属性的使用 注 本博客由 64 凡俊编写 64 Scott 64 春雨 审核 若转载此文章 请注明出处和
  • ++和--的用法

    单独使用时 xff0c 43 43 或者 无论是放在变量的前面还是后面 xff0c 结果是一样的 参与操作时 如果 43 43 或者 在变量的后面 xff0c 先拿变量参与操作 xff0c 后变量做 43 43 或者 例如 int a 61
  • geoserver集群

    软件准备 geoservertomcat 插件 下载地址 xff1a https build geoserver org geoserver activeMQ broker plugin zipjms cluster plugin zip
  • 为moment.js正名

    说来也奇怪 xff0c 总有人在耳边说moment js对国际化日期支持不好 xff0c 坚决不要使用 xff0c 会带来很多问题之类的话 但就我个人经验来看 xff0c 还从未见到过任何一个反例 xff0c 恰好我又是个不信邪的人 xff
  • sqlite3 的二进制数据插入与获取

    sqlite3 存储和查找二进制数据对象 使用c语言接口 思路 xff1a 通过让代码执行执行sql语句进行查找 xff0c 但二进制的显示方法无法确定所以 xff0c 二进制数据对象查询语句略有不同 注意 xff1a sqlite3的数据
  • MySQL修改数据表中的字段名

    MySQL修改数据表中的字段名 在一张数据表中只能设置一个唯一名称的字段名 在同一张数据表中 xff0c 不能出现两个名称完全相同的字段名 因此 xff0c 数据库系统可以通过字段名来区分数据表中的不同字段 在MySQL中 xff0c AL
  • 证明:当gcd(a, b) = 1,则gcd(a + b, a) = 1

    假设 xff1a gcd a b 61 1 证明 xff1a gcd a 43 b b 61 1 反证法 xff1a 假设gcd a 43 b b 61 k 61 1 则 xff1a b 61 k r1 a 43 b 61 a 43 k r
  • 实战microPython(二)时钟和日历的使用

    实战microPython 2 时钟和日历的使用 David Zou 创客DIY乐园 对于一名创客 xff0c 自制一个个性化的时钟或闹钟啥的 xff0c 应该是比较常见的入门级任务了 通常我们制作时钟或闹钟的时候 xff0c 都需要借助专
  • 实战microPython(10)-蓝牙模块的使用

    实战microPython 10 蓝牙模块的使用 David Zou 2018 12 27 本文讲解蓝牙模块的使用 xff0c 以及通过uPyBoard来操作蓝牙模块并实现手机和uPyboard互动 正在学习和使用uPyBoard开发的小伙
  • nohup: failed to run command ‘java’: No such file or directory解决方案

    场景 xff1a Jekins实现自动化部署 问题描述 Jekins打包后端项目后发送Jar到对应的应用服务器 xff0c 通过应用服务器Shell脚本启动服务报错 nohup span class token operator span

随机推荐

  • System.DllNotFoundException: 无法加载DLL

    问题描述 使用VS2005在Windows Server 2003上编译C 43 43 代码 输出dll文件 把该dll放到运行机器 与编译机器的系统完全一致 上 供C 代码 web前台 调用 提示无法加载dll 分析 1 路径完全没有问题
  • Flutter学习(一)

    开始学习 为什么使用 Fultter xff1f 为什么使用 Fultter xff1f 言归正传 xff0c 亘古不变环境搭建 xff1a Android Studio 下载 xff0c 我的是这个版本 xff0c emmmm 首先安装g
  • 树莓派 ubuntu18.04 mate更换为国内镜像源

    文章目录 前言正文参考 前言 我使用树莓派3B 43 xff0c 烧写的操作系统为ubuntu mate18 04 网上的相关教程很多 xff0c 但说的很详细的不多 xff0c 本文算是做一个简单的整理 树莓派采用的是arm架构 xff0
  • Spring常见面试题总结(超详细回答)

    1 Spring是什么 Spring是一个轻量级的IoC和AOP容器框架 是为Java应用程序提供基础性服务的一套框架 xff0c 目的是用于简化企业应用程序的开发 xff0c 它使得开发者只需要关心业务需求 主要包括以下七个模块 xff1
  • 在android studio中使用kotlin

    一 安装kotlin插件 二 导入Kotlin的核心库及其扩展库Anko库 1 在项目根目录下的build gradle文件中指定kotlin插件的版本及路径 buildscript ext kotlin version 61 span c
  • sublime Text SFTP LICENSE 注册码

    34 email 34 34 xiaosong 64 xiaosong me 34 34 product key 34 34 d419f6 de89e9 0aae59 2acea1 07f92a 34 这个就是SFTP注册码 将上面的代码复
  • Aliddns插件使用:小白超详细图文教程

    Aliddns插件使用 xff1a 小白超详细图文教程 Aliddns插件 xff0c 用阿里的云解析速度是快 xff0c 天下武功为快不破 作为一个小白的我 xff0c 看这篇帖子也是一脸懵逼 xff0c http koolshare c
  • 在PyQt5中使用多进程(multiprocessing)

    multiprocessing对象要放在 main 所在的启动文件使用槽连接multiprocessing对象 import sys from multiprocessing import Pool from PyQt5 QtWidgets
  • go使用exec执行命令

    golang exec 命令执行
  • 【汇编】AT89C52点亮一盏LED灯(汇编语言)

    学习利用汇编语言写单片机程序的第一步是要学习汇编语言的相关理论知识 xff0c 那么实践操作的第一步肯定是从点灯开始啦 xff01 编译环境 xff1a keil4 编译语言 xff1a 汇编语言 内容 xff1a 一 keil4建立AT8
  • wsl-常见问题

    基于wsl2的docker如何迁移镜像文件 默认基于wsl2的docker desktop的镜像是有wsl2管理的 xff0c 而wsl2一般在c盘 当下载的镜像多了之后 xff0c 就会把C盘爆满 wsl shutdown wsl exp
  • 求0-7所组成的奇数个数

    include lt stdio h gt include lt stdlib h gt main long sum 61 4 long s 61 4 int j for j 61 2 j lt 61 8 j 43 43 printf 34
  • UITabBarController详解

    一 UITabBarController简介 一 继承关系 UITabBarController和UINavigationController类似 xff0c 也继承于UIViewController xff0c 也可以轻松地管理多个控制器
  • 关于多卡Android设备获取手机号的研究

    首先我们都知道如何获取Android手机的Sim手机号 fun getNativePhoneNumber context Context String val tm 61 context getSystemService Context T
  • 【入门学习三】基于 FPGA 使用 Verilog 实现按键状态机代码及原理讲解

    目录 一 状态机二 模块设计三 代码实现四 管脚配置及结果展示 上一篇博文 xff1a 入门学习二 基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解 概述 xff1a 前面的两篇文章 xff0c 其中按键模块采用的是延时
  • 【二分】洛谷_3902 递增

    题意 给出n个数 xff0c 求出修改最少的数字 xff0c 使得数列严格单调递增 思路 我们用一个数组s来记录当前存到的数字 xff0c 每次放进一个数字 xff0c 我们就判断它是不是比之前的数小 xff0c 否则我们就二分找到一个最好
  • 使用mysql语句进行分组查询

    使用mysql语句进行分组查询 1 作用 对整个数据表的某几个字段进行分组 然后通过分组函数得到我们想要的结果 2 如何用 2 1 只分一个组 2 1 1 本质 就是根据分组字段把整个表的数据分为几组 然后分别对每组里面的数据进行汇总查询或
  • 删除流氓软件 Alibaba PC Safe Service

    好久没用笔记本了 xff0c 之前被人再用 xff0c 今天偶尔想用下 xff0c 开机遇到两件恶心到家的事情 xff0c 第一件 xff0c 360弹窗 xff0c 不停的显示 xff0c 感觉特别烦就卸载了360所有的东西 xff1b
  • 枚举类型字符化输出的方法

    方法一 xff1a 用函数 xff08 简单的应用场景下 xff09 方法二 xff1a 用字符串转换 创建枚举类型 enum athleteName WANG ZHOU SU CHO KIM LI MIRE BOUTIN 创建结构体 st
  • 【单片机竞赛:共阳数码管静态控制】

    51单片机 xff08 国信天长单片机实训平台 xff09 基于keli的常用程序之 共阳数码管一般静态控制程序设计 文章目录 51单片机 xff08 国信天长单片机实训平台 xff09 基于keli的常用程序之 共阳数码管一般静态控制程序