51单片机STC89C52RC——3.1 数码管静态展示

news2024/11/16 19:33:37

目的

让数码管在指定位置显示指定数字

一,STC单片机模块

二,数码管 

2.1 数码管位置

2.2 生活中用到的数目管

红绿灯

LED数码管在生活中随处可见,洗衣机、电饭煲、热水器、微波炉、冰箱、这些最基本的家用电器上基本都用到了这种7段LED数码管(为LED灯的个数)。

2.3 数码管的分类


按显示段数分:分为七段、八段、九段、十四段和十六段


七段:七段数码管由7个LED构成

八段:八段数码管比七段多了一个小数点

九段:九段数码管由9个LED构成

十四段:十四段数码管由14个LED构成
十六段:十六段数码管由16个LED构成

按显示位数分:分为1位、2位、3位及多位数码管(大于1位),

我们的板子上是8段4位。

 2.4 数码管电路图

单个数码管的电路图设计如下


内部接线图如下两种

第一种:共阴极(8个LED的负极接一起)

第二种:共阳极(8个LED的正极接一起)

可以看到,这个‘8’有A、B、C、D、E、F、G和DP8个LED构成。我们在程序上只需要将对应位置的LED点亮就可以了。ABCDEFG‘DP’8个位置刚好对应上一个byte的8个Bit位。要注意这里是与byte的低位对齐。

比如:

数字‘0’就是A、B、C、D、E、F位置的LED亮起。0011 1111 ,十六进制0x3F;

数字‘1’就是B、C 两个位置LED亮起。二进制0000 0110 ,十六进制0x06;

数字‘2’就是A、B、G、E、D位置的LED亮起、

……

以此类推,我们可以用HEX罗列出数码管能展示的所有可供我们认识的字符,要显示对应的字符,则P0值如下表

数码管显示点亮位置的LED十六进制
(P0值)
二进制
DPGFEDCBA
0ABCDEF0x3F00111111
1BC0x0600000110
2ABGED0x5B01011011
3ABCDG0x4F01001111
4FGBC0x6601100110
5AFGCD0x6D01101101
6AFEDCG0x7D01111101
7ABC0x0700000111
8ABCDEFG0x7F01111111
9GFABCD0x6F01101111
AABCEFG0x7701110111
CAFED0x3900111001
EAFEDG0x7901111001
FAFEG0x7101110001
HBCEFG0x7601110110
JBCDE0x1E00011110
LFED0x3800111000
pABGFE0x7301110011
qABGFC0x6701100111
UBCDEF0x3E00111110
.'DP'0x8010000000
bFEGDC0x7C01111100
dBCDEG0x5E01011110
uCDE0x1C00011100

这里我们在程序中用两个数组表示;

/*数码管可显示值*/
unsigned int ShuMaGuan_EnableDisplayValue[]={0,1,2,3,4,5,6,7,8,9,
	'A','C','E','F','H','J','L','P','q','U','.','b','d','u'};
/*数码管显示值对应的HEX*/
unsigned int ShuMaGuan_EnableDisplayHEX[]={
	0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x39,0x79,0x71,0x76,0x1E,0x38,0x73,0x67,0x3E,0x80,0x7C,0x5E,0x1C};
/**
 * 函    数:获取可显值对应的HEX
 * 参    数:数码管显示的值
 * 返 回 值:数码管显示时对应的HEX
 */
unsigned int ShuMaGuan_GetEnableDisplayValueOfHEX(unsigned int Value)
{
	unsigned int index=0;
	for(index=0;index<24;index++)//遍历显示值的数组
	{
		if(ShuMaGuan_EnableDisplayValue[index]==Value)//找到对应值的索引
		{
			break;
		}
	}
	return ShuMaGuan_EnableDisplayHEX[index];
}
/**
 * 函    数:设置数码管要显示的值
 * 参    数:显示值
 * 返 回 值:无
 */
void ShuMaGuan_SetDisplayValue(unsigned int Value)
{
	/*将要显示的值 复制给P0*/
	P0=ShuMaGuan_GetEnableDisplayValueOfHEX(Value);
}


数码管中的8个LED的一端已经通过上面P0设置成功,另一端我们也要设置接通LED才会连接到电路中导通。所以我们还需要了解74HC138译码器。

2.5 74HC138 译码器        

译码器的作用:简单理解就是尽量让程序设置少的针脚通断去控制逻辑电路通断和数据传输

假如在这里不用译码器,我们全部用单一导线和开关将LED的两端与电源正负极接通。那么线路就比较多,引脚也较多,我们程序中要控制的就增加。

在74HC138译码器上,有三个引脚P22、P23、P24,每个引脚都可以有通断(0、1)那么我们用三位的二进制就可以满足8个位置上通断。

CBA
P24P23P22
LED1111
LED2110
LED3101
LED4100
LED5011
LED6010
LED7001
LED8000

我们程序想让那个位置上的LED亮起,就设置对应值就导通了!


/**
 * 函    数:设置要显示的数码管 位置
 * 参    数:位置(左起1-8)
 * 返 回 值:无
 */
void ShuMaGuan_SetDisplayLocation(unsigned int Location)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
}

有了上面两步,我们在主函数就只需要设置在数码管的哪个位置显示什么值就好。


/**
 * 函    数:数码管展示
 * 参    数:Location 显示的位置,Value 显示的值
 * 返 回 值:无
 */
void ShuMaGuan_Display(unsigned int Location,unsigned int Value)
{
	/*显示位置*/
	ShuMaGuan_SetDisplayLocation(Location);
	/*显示值*/
	ShuMaGuan_SetDisplayValue(Value);
}

三,创建Keil项目

详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客

四,代码 

main.c 如下 

#include <REGX52.H>
#include "ShuMaGuan.h"
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{
	/*在数码管的第一个位置显示2*/
	ShuMaGuan_Display(1,2);
	while(1)
	{
	
	}
}

ShuMaGuan.h如下

#ifndef __SHUMAGUAN_H_
#defind __SHUMAGUAN_H_
void ShuMaGuan_Display(unsigned int Location,unsigned int Value);
#endif

ShuMaGuan.c如下

#include <REGX52.H>
/*数码管可显示值*/
unsigned int ShuMaGuan_EnableDisplayValue[]={0,1,2,3,4,5,6,7,8,9,
	'A','C','E','F','H','J','L','P','q','U','.','b','d','u'};
/*数码管显示值对应的HEX*/
unsigned int ShuMaGuan_EnableDisplayHEX[]={
	0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x39,0x79,0x71,0x76,0x1E,0x38,0x73,0x67,0x3E,0x80,0x7C,0x5E,0x1C};
/**
 * 函    数:获取可显值对应的HEX
 * 参    数:数码管显示的值
 * 返 回 值:数码管显示时对应的HEX
 */
unsigned int ShuMaGuan_GetEnableDisplayValueOfHEX(unsigned int Value)
{
	unsigned int index=0;
	for(index=0;index<24;index++)//遍历显示值的数组
	{
		if(ShuMaGuan_EnableDisplayValue[index]==Value)//找到对应值的索引
		{
			break;
		}
	}
	return ShuMaGuan_EnableDisplayHEX[index];
}
/**
 * 函    数:设置数码管要显示的值
 * 参    数:显示值
 * 返 回 值:无
 */
void ShuMaGuan_SetDisplayValue(unsigned int Value)
{
	/*将要显示的值 复制给P0*/
	P0=ShuMaGuan_GetEnableDisplayValueOfHEX(Value);
}
/**
 * 函    数:设置要显示的数码管 位置
 * 参    数:位置(左起1-8)
 * 返 回 值:无
 */
void ShuMaGuan_SetDisplayLocation(unsigned int Location)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
}
/**
 * 函    数:数码管展示
 * 参    数:Location 显示的位置,Value 显示的值
 * 返 回 值:无
 */
void ShuMaGuan_Display(unsigned int Location,unsigned int Value)
{
	/*显示位置*/
	ShuMaGuan_SetDisplayLocation(Location);
	/*显示值*/
	ShuMaGuan_SetDisplayValue(Value);
}

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC——代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》

六,效果

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

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

相关文章

windows cmd bat 批处理脚本找到监听端口并并杀掉进程 nestat -ano

echo off rem 终止正在监听在端口8888上的进程 rem tokens5 表示第五个token for /f tokens5 %%p in (netstat -ano ^| findstr 8888) do ( set pid%%p ) echo xxxx %pid% rem xxxx TCP [::]:8888 [::]:0 LISTENING 2720 taskkill /pid %pid% /f if %errorlevel% equ 0 ( echo …

从零开始认识思科,并学会认识思科1.认识思科

hello大家好&#xff0c;我是风屿&#xff0c;今天我将从零开始带领大家认识思科设备中的各种技术以及配置&#xff0c;方便以后配置思科的设备&#xff0c;以及考取相应的证书。 在当今的数字化时代&#xff0c;网络扮演着至关重要的角色。而在网络技术领域&#xff0c;思科无…

java语言his系统医保接口 云HIS系统首页功能实现springboot框架+Saas模式 his系统项目源码

java语言his系统医保接口 云HIS系统首页功能实现springboot框架Saas模式 his系统项目源码 HIS系统的实施旨在整个医院建设企业级的计算机网络系统&#xff0c;并在其基础上构建企业级的应用系统&#xff0c;实现整个医院的人、财、物等各种信息的顺畅流通和高度共享&#xff0c…

英伟达市值飙升,超越苹果微软并超过英国股市总市值

原标题&#xff1a;英伟达超越苹果微软市值&#xff0c;成为全球市值最高的企业 易采游戏网6月19日消息&#xff1a;近日&#xff0c;美国科技巨头英伟达市值的迅速增长引起了市场广泛关注。据最新数据显示&#xff0c;截至本周二收盘&#xff0c;英伟达的市场资本化已达到3.34…

数据结构之探索“队列”的奥秘

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 队列有关概念 队列的使用 队列模拟实现 循环队列的模拟实现 622. 设计循环队列 双端队…

【C++初阶路】--- 类和对象(中)

目录 一、this指针1.1 this指针的引出1.2 this指针的特性1.3. C语言和C实现Stack的对比 二、类的6个默认成员函数三、构造函数3.1 概念3.2 特性 一、this指针 1.1 this指针的引出 如下定义一个日期类Date class Date { public://void InitDate(Date* const this, int year …

[Vulnhub] BrainPan BOF缓冲区溢出+Man权限提升

信息收集 Server IP AddressPorts Open192.168.8.105TCP: $ nmap -p- 192.168.8.105 -sC -sV -Pn --min-rate 1000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-10 04:20 EDT Nmap scan report for 192.168.8.105 (192.168.8.105) Host is up (0.0045s latency). N…

gtk+2.0设置按钮背景图片

效果 在gtk+2.0中,可以通过gtk_widget_get_style获取按钮的样式,并设置bg_pixmap背景图片的方法。 其中bg_pixmap数组有下面的枚举类型,代表不同情况下的图片类型。这意味着你可以在按钮正常,鼠标覆盖和鼠标按下的时候分别设置不同的图片。 enum GtkStateType typedef e…

【植物大战僵尸杂交版】致敬传奇游戏玩家——一个普通人的六年坚持

目录 缘起 波澜 凌云 缘起 曾​​​​​​佳伟是《植物大战僵尸》的忠实粉丝&#xff0c;这款游戏给了他很多乐趣&#xff0c;也成为了他度过困难时期的精神支柱。他决定制作杂交版&#xff0c;部分原因是出于对原版游戏的热爱和致敬。 六年前&#xff0c;出于对一些pvz续作…

立讯精密:“果链一哥”怎么摆脱依赖症

AI手机创新赋能&#xff0c;隔岸苹果股价走出历史新高&#xff0c;消费电子有望迎来复苏&#xff1f; 这里我们聊聊苹果产业链代工龙头——立讯精密 作为早早入场的代工企业&#xff0c;立讯精密曾经吃足“果链”红利&#xff0c;如今摆在它面前的是增长、毛利、安全等难题。 …

Springboot 整合 Flowable(二):使用 Flowable BPMN visualizer 绘制流程图

&#x1f4c1; Springboot 整合 Flowable&#xff08;一&#xff09;&#xff1a;使用 flowable-UI 绘制流程图-CSDN博客 一、安装 IDEA 插件&#xff1a;Flowable BPMN visualizer 二、绘制流程图 1、创建流程文件 2、选中文件后&#xff0c;右键打开流程图设计界面 以一个简…

使用fetch加载阿里云的在线json 出现403错误

在做地图项目的时候&#xff0c;引用了阿里云的在线JSON地图数据。 问题描述&#xff1a; 但是本地开发使用fetch请求json地址的时候接口却出现了403错误&#xff0c;把地址直接复制到浏览器上却能正常打开。 https://geo.datav.aliyun.com/areas_v3/bound/330000_full.json …

300元拥有一个100%属于自己的博客网站

这里写目录标题 为什么要建个人博客香港独立云主机购买价格研究独立主机购买 1panel安装图床搭建halo博客网站一键安装优先安装mysql数据库安装halo uuwaf南墙防火墙一键安装和配置安装uuwaf创建站点上传SSL证书 halo登录和配置halo开启MFA两步验证主题插件 完结 为什么要建个人…

怎么投资中证全指证券公司指数?

中证全指证券公司指数的代码是399975&#xff0c;有50只成分股&#xff0c;几乎包含了市场上所有主要的证券公司&#xff0c;算是指数基金中投资证券行业的不二选择。 根据天天基金的数据显示&#xff0c;市面上有31只跟踪该指数的基金&#xff0c;规模最大的是南方中证全指证…

【阿里前端面试题】虚拟列表滚动组件开发的原因,以及关键技术点实现

大家好&#xff0c;我是“寻找DX3906”。每天进步一点。日积月累&#xff0c;有朝一日定会厚积薄发&#xff01; 前言&#xff1a; 前面已经和大家分享阿里的了6篇前端面试题&#xff1a; 《【阿里前端面试题】浏览器的加载渲染过程》 《【阿里前端面试题】客户端和服务器交互…

考研数学强化,880+660正确打开方式

1800题基础做完了&#xff1f;做的怎么样&#xff01; 之所以问你做的怎么样&#xff0c;是因为1800题做的好坏&#xff0c;直接决定了你要不要开始做880题和660题。 有的同学1800题做的很好&#xff0c;做完1800题之后开始做880660没毛病 但是有的同学就是纯纯的为了做题而…

Python 基础:文件

目录 一、从文件中读取数据1.1 读取整个文件1.2 逐行读取 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&#xff1a;从入…

MySQL版本发布模型

MySQL 8.0 之后使用了新的版本控制和发布模型&#xff0c;分为两个主线&#xff1a;长期支持版&#xff08;LTS&#xff09;以及创新版。这两种版本都包含了缺陷修复和安全修复&#xff0c;都可以用于生产环境。 下图是 MySQL 的版本发布计划&#xff1a; 长期支持版 MySQL…

深度学习项目十六:根据训练好的权重文件推理图片--YOLO系列

文章目录 根据训练好的权重文件推理图片--YOLO系列一、自己构建YOLOv5推理代码1.1 对数据集进行模型训练1.2 对数据集进行模型推理检测1.3 自己编写推理函数1.3.1 针对单张进行推理1.3.2 针对文件夹下的图片进行推理二、自己构建YOLOv8推理代码2.1 对数据集进行模型训练2.2 对数…

HTML星空特效

目录 写在前面 完整代码 代码分析 运行效果 系列文章 写在后面 写在前面 100行代码实现HTML星空特效。 完整代码 全部代码如下。 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&g…