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

目的

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

一,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.tpcf.cn/news/855843.html

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

相关文章

广告权重及出价解析

由于算法一直在不断改变&#xff0c;所以公式只能作为参考&#xff0c;不过核心是不变的。一、广告权重及出价解析 链接质量分CTR分值**CR分值&#xff08;点击率*转化率&#xff09;广告质量分广告出价*链接质量分我们的出价下一名产品的广告质量评分/我们的链接质量分0.01 …

Spring Bean详解

Spring Bean作用域 默认情况下&#xff0c;所有的 Spring Bean 都是单例的&#xff0c;也就是说在整个 Spring 应用中&#xff0c; Bean 的实例只有一个 如果我们需要创建多个实例的对象&#xff0c;那么应该将 Bean 的 scope 属性定义为 prototype&#xff0c;如果 Spring 需…

嵌入式linux系统中SPI子系统验证03

今天主要给大家分享一下&#xff0c;如何使用SPI总线进行验证的方法。 第一&#xff1a;SPI验证流程 1. echo 1 > /dev / spidev3.0 2&#xff0e;逻辑分析仪抓波形 3.十六进指转化为十进制 4.ASCII字符代码表匹配 第二&#xff1a;SPI验证结果 第三&#xff1a;设备…

搜维尔科技:通过 scalefit 的人体工程学分析或您自己的基于 Movella 动作捕捉的工业运动员测量系统来识别隐藏的健康风险

通过 scalefit的人体工程学分析或您自己的基于 Movella 动作捕捉的工业运动员测量系统来识别隐藏的健康风险 搜维尔科技&#xff1a;通过scalefit的人体工程学分析或您自己的基于Movella动作捕捉的工业运动员测量系统

“论数据访问层设计技术及其应用”写作框架,系统架构设计师

论文真题 在信息系统的开发与建设中&#xff0c;分层设计是一种常见的架构设计方法&#xff0c;区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性&#xff0c;使设计结构清晰&#xff0c;便于提高复用能力和产品维护能力。一种常见的层次划分模…

eclipse如何导入springboot项目

打开eclipse 找到你的springboot项目 点击finish即可 test02就已经导入进去了 配置一下maven 在将那个springboot项目刷新一下即可 运行成功

得物面试:什么是零复制?说说 零复制 底层原理?(吊打面试官)

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的零复制的问题&#xff1a; 说一说Rocketmq、是如何实现每秒上百万数据的超…

【C++11】详谈隐式类型转换

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 C11中 隐式类型转换 的相关内容。 如果看到最后您觉得这篇文章写得…

用户组的概念(linux篇)

当我们创建一个用户的时候&#xff0c;会创建一个和它同名的分组 1.groups&#xff1a;查看当前用户所在的分组&#xff08;或者groups <用户名>&#xff09; [rootlocalhost ~]# useradd Tom -m -s /bin/bash [rootlocalhost ~]# cd /home/ [rootlocalhost home]# ls h…

实现跑马灯

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 跑马灯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Color[] colors { Color.Red, Color.Green, Color.Yellow };T…

JAVA每日作业day6.19

ok了家人们今天继续学习面向对象&#xff0c;话不多说看看今天学了什么 一.面向对象-封装 1&#xff0c;private private:私有的 权限修饰符 是一个成员修饰符&#xff0c;修饰成员变量 被private修饰的成员变量和成员方法只能在本类中使用 对外访问使用是 set XXX 和 get X…

IO流2.

字符流-->字符流的底层其实就是字节流 public class Stream {public static void main(String[] args) throws IOException {//1.创建对象并关联本地文件FileReader frnew FileReader("abc\\a.txt");//2.读取资源read()int ch;while((chfr.read())!-1){System.out…

pytorch库 02 Anaconda、Jupyter常用命令及操作

文章目录 一、Anaconda Prompt1、conda常用命令2、pip常用命令 二、Jupyter1、Jupyter常用命令及基本操作2、Jupyter代码补全插件安装 一、Anaconda Prompt 1、conda常用命令 下列命令可以在Anaconda Prompt中输入。 清屏&#xff1a; cls 查看帮助&#xff1a; conda -h 查…

海南聚广众达电子商务咨询有限公司抖音电商新引擎

在数字化浪潮席卷而来的今天&#xff0c;抖音电商作为新兴的商业模式&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;引领着电子商务行业的革新与发展。海南聚广众达电子商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领军企业&#xff0c;凭借其专业的团队、丰…

字符串常用的方法

1. charAt(index) 返回字符串中指定位置的字符。 const str "Hello, World!"; console.log(str.charAt(0)); // 输出 "H" 2. concat(str1, str2, ...) 将一个或多个字符串与原字符串连接合并&#xff0c;形成一个新的字符串。 const str "Hell…

【IPython的使用技巧】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

异步方式遍历IndexedDB

IndexedDB 提供了一个客户端存储大量结构化数据的能力&#xff0c;使得 Web 应用程序即使在网络不可用的情况下也能访问数据&#xff0c;这对于构建离线优先或者对网络依赖较小的应用至关重要。 IndexedDB提供了指针对象 IDBCursor&#xff0c;监听onsuccess事件以遍历数据。 …

u-modal自带的取消和确认按钮都在上面

添加&#xff1a;:show-cancel-button"true" <u-modal:show"showbut":show-cancel-button"true"title"提示":content"content"confirm"confirm"cancel"onModalCancel"confirmText"确认"c…

GRIT论文阅读笔记

一篇试图统一生成任务和编码任务的工作&#xff0c;就是把只能完成生成任务的GPT改成既能生成又能encode。思路其实很简单&#xff0c;就是在输入的时候添加instruction tokens来指引模型做representation还是generation&#xff0c;然后各自算损失。representation任务用的是d…

Certificate数字证书的有效性验证

1.证书相关概念 在讲证书有效性验证的逻辑之前&#xff0c;先了解几个概念。 证书颁发机构&#xff1a;一般为运营数字证书的机构&#xff0c;该机构负责证书的签发、吊销等生命周期管理。证书链&#xff1a;证书颁发机构一般会由多个组成&#xff0c;为树状层级&#xff0c;第…