蓝桥杯单片机备战(四)共阳数码管的静态显示

article/2025/8/21 16:17:04

1.共阳数码管原理实现

这是共阳数码管,所谓共阳的意思就是共阳极,每一个LED共用一个阳极,当控制LED的阴极为低电平时被点亮,如下图:

这里com1到com8为共阳口,例:

当com1设置为高电平时(黄色),第一个位置的8个led被激活,此时操作这八个灯的亮灭就能显示一个字符。


(6条消息) 共阳和共阴数码管详细段码(带图)_OMGMac的博客-CSDN博客_共阴极数码管段码

此博客归纳了一些断码(显示不同字符时8个LED灯的亮灭)


(6条消息) 共阳和共阴数码管详细段码(带图)_OMGMac的博客-CSDN博客_共阴极数码管段码

此博客归纳了一些断码


下面是共阳数码管接口的位置:

根据前面的学习,我们知道要首先给M74HC573M1R上电,具体方式请看笔记1、2、3。


2.代码实现

这里我们用到一个unsigned char code类型

这个类型是单片机变成里面独有的,code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,对应的还有data是存入RAM的意思。 程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理。

这么做是为了节约片上的RAM,一般低端的单片机,片上的data空间只有几十个字节,所以只能存在程序空间中。 因为定义的数据是常量,放在DATA或XDATA区中浪费了. 放在RAM区也需要在ROM里占用同样的大小,否则上电时,RAM里指定数据从何而来?反之,放在ROM的数据,只占ROM容量,如果不需要修改,当然放ROM了。故被定位在CODE(就是程序存储器)区内。

#include <reg52.h>  //头文件unsigned char code SMG_duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f}; // 数码管的断码表void Delay(unsigned long int t) //延时函数
{while(t--);
}void HC138Init(unsigned char n)
{switch(n){case 4:P2 = (P2 & 0x1f) | 0x80;//让Y4输出低电平,此时Y4C为高电平break;case 5:P2 = (P2 & 0x1f) | 0xa0;//让Y5输出低电平,此时Y5C为高电平break;case 6:P2 = (P2 & 0x1f) | 0xc0;//让Y6输出低电平,此时Y6C为高电平break;case 7:P2 = (P2 & 0x1f) | 0xe0;//让Y7输出低电平,此时Y7C为高电平             break;                           }
}void showSMG(unsigned char position,unsigned char number)  //字符显示函数
{HC138Init(6); // 选通Y6Cswitch(position){case 1://第1个位置P0 = 0x01;break;case 2://第2个位置P0 = 0x02;break;case 3://第3个位置P0 = 0x04;break;case 4://第4个位置P0 = 0x08;break;case 5://第5个位置P0 = 0x10;break;case 6://第6个位置P0 = 0x20;break;case 7://第7个位置P0 = 0x40;break;case 8://第8个位置P0 = 0x80;break;}HC138Init(7); // 选通Y7Cif(number == '0')  //下面是显示各个字符P0 = SMG_duanma[0];else if(number == '1')P0 = SMG_duanma[1];else if(number == '2')P0 = SMG_duanma[2];else if(number == '3')P0 = SMG_duanma[3];else if(number == '4')P0 = SMG_duanma[4];else if(number == '5')P0 = SMG_duanma[5];else if(number == '6')P0 = SMG_duanma[6];else if(number == '7')P0 = SMG_duanma[7];else if(number == '8')P0 = SMG_duanma[8];else if(number == '9')P0 = SMG_duanma[9];else if(number == 'a')P0 = SMG_duanma[10];else if(number == 'b')P0 = SMG_duanma[11];else if(number == 'c')P0 = SMG_duanma[12];else if(number == 'd')P0 = SMG_duanma[13];else if(number == 'e')P0 = SMG_duanma[14];else if(number == 'f')P0 = SMG_duanma[15];else if(number == '-')P0 = SMG_duanma[16];else if(number == '.')P0 = SMG_duanma[17];}void main()
{//实现每一个位置从'0'显示到'.'while(1){int m;for(m = 1;m<=8;m++){showSMG(m,'0');Delay(60000);showSMG(m,'1');Delay(60000);showSMG(m,'2');Delay(60000);showSMG(m,'3');Delay(60000);showSMG(m,'4');Delay(60000);showSMG(m,'5');Delay(60000);showSMG(m,'6');Delay(60000);showSMG(m,'7');Delay(60000);showSMG(m,'8');Delay(60000);showSMG(m,'9');Delay(60000);showSMG(m,'a');Delay(60000);showSMG(m,'b');Delay(60000);showSMG(m,'c');Delay(60000);showSMG(m,'d');Delay(60000);showSMG(m,'e');Delay(60000);showSMG(m,'f');Delay(60000);showSMG(m,'-');Delay(60000);showSMG(m,'.');Delay(60000);}}
}


http://chatgpt.dhexx.cn/article/Gr1EfjRa.shtml

相关文章

共阳极数码管显示

1.目的&#xff1a;8个数码管从0到9现实8次&#xff08;M38译码器输出端&#xff09; 2.考点&#xff1a; &#xff08;1&#xff09;数码管段码与数值之间的关系&#xff0c;com口与显示码的关系。 &#xff08;2&#xff09;段码端与接口&#xff1a; 段码端与锁存器&…

共阴数码管与共阳数码管工作原理有什么不同

数码管简介 数码管是一种半导体发光器件&#xff0c;其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管&#xff0c;八段数码管比七段数码管多一个发光二极管单元&#xff0c;也就是多一个小数点&#xff08;DP&#xff09;这个小数点可以更精确的表示数码管…

共阳数码管和共阴数码管用法区别

共阳数码管和共阴数码管用法区别 学习单片机将近一年半了,今天突然发现,我学习东西只是单纯的去记忆知识,并不涉及什么推理,基本上也没有什么思考.学得不真,学得也不深.长此以往,自己的思维将会变得越来越呆滞……. 总结能梳理自己的思绪,所以从今天起开始写博客来记录自己的…

共阴数码管段码-共阳数码管段码

单片机系统中常用的显示器有&#xff1a;发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构&#xff1a;段显示&#xff08;7段、米字型等&#xff09;和点阵显示&#xff08;58、88点阵等&#…

共阴极和共阳数码管详解

文章图片来源于互联网 共阴极&#xff1a;公共端为阴极&#xff0c;加阳极数码管点亮。即当真值为1时&#xff0c;数码管点亮&#xff1b;真值为0时&#xff0c;数码管不亮。共阳极&#xff1a;公共端为阳极&#xff0c;加阴极数码管点亮。即当真值为0时&#xff0c;数码管点亮…

共阳和共阴数码管详细段码(带图)

今天带大家了解数码管的详细段码&#xff0c;数码管主要分共阳数码管和共阴数码管。区别在于其公共端是接电源还是接地。这里我们讲解共阴(共阳)数码管的0-F不带小数点段码和0-F带小数点段码。 共阴数码管 1.共阴不带小数点0-F段码为&#xff1a;{0x3f,0x06,0x5b,0x4f,0x66,0…

共阳(共阴)LED数码管编码交互演示

LED数码管原理 LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是各段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是各段的显示字码共用一个电源的正极,是低电平点亮。只要控制其中各段LED的亮灭即可显示相应的数字、字母或符号。 共阴和共阳…

共阴和共阳数码管编码表详解

1、共阳数码管是数码管中所有的正极连接在一起&#xff0c;这个端口被称之为位选端口&#xff1b; 其余的数码管引脚 a-h 都为段选端口 。 2、共阳极数码管的编码&#xff08;CA&#xff09;&#xff1a; char code table[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x…

【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

一、要求 在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 二、数码管 1.七段数码管 七段数码管&#xff0c;其实内部由8个发光二极管构成&#xff0c;其中七个为长条形状&…

[蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示

一、理论部分 共阳数码管引脚可以分为两个部分&#xff0c;一是段码&#xff0c;一个是位码。段码指的是一个数码管的7个段加dp小数点&#xff0c;一共8个&#xff0c;通过P0控制其亮灭使得数码管显示出不同效果。譬如亮afedcg表示的是6形状。位码指的多个数码管显示的时候&…

共阴/共阳数码管 ----- 学习笔记

一、数码管的动态显示原理 动态显示的特点是将所有数码管的段选线并联在一起&#xff0c;由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示&#xff0c;所谓动态扫描显示即轮流向各位数码管送出字形码和相应的选位&#xff0c;利用发光管的余晖和人眼视觉暂留作用…

LED 数码管共阴共阳的区别+静态/动态显示

51单片机——数码管动态显示 1、共阴共阳定义 LED 共阴极指的是LED共同的接点是GND&#xff08;接地&#xff09;&#xff0c;而共阳极指的是LED共同的接点是电源。LED亮灯的条件是两端有电势差。 最后一段h/dp小数点在高位&#xff0c;第一段a在低位 hgfedcbaxxxxxxxx 1.共…

python单例模式selenium driver实现单例

一、使用装饰器实现单例 def Singleton(cls):_instance {}def _singleton(*args, **kargs):if cls not in _instance:_instance[cls] cls(*args, **kargs)return _instance[cls]return _singletonSingleton class A(object):a 1def __init__(self, x0):self.x xa1 A(2) a2…

python单例模式有什么用_python单例模式是什么

在python中&#xff0c;单例模式是一种常用的软件设计模式&#xff0c;该模式的主要目的是确保某一个类在内存中只能有一个实例对象&#xff1b;通过单例模式的方法创建的类在当前进程中只有一个实例对象。单例模式分为&#xff1a;1、懒汉式&#xff0c;类一加载就创建对象&am…

Python设计模式-单例模式

设计思想 通过上面的介绍&#xff0c;我们可以知道单例模式最重要的就是要保证一个类只有一个实例并且这个类易于被访问&#xff0c;那么要怎么做才能保证一个类具有一个实例呢&#xff1f;一个全局变量使得一个对象可以被访问&#xff0c;但是这样做却不能防止你实例化多个对…

redis常用命令

redis常用命令 服务端客户端 服务端 1.使用help查看帮助文档 redis-server --help2.启动redis服务 sudo service redis start3.停止redis服务 sudo service redis stop4.重启redis服务 sudo service redis restart如果上面命令不行&#xff0c;用下面的命令&#xff1a; …

运维维护服务器redis常用命令

查看服务器是否有redis ps -ef | grep redis知道有redis存在了&#xff0c;查看下redis状态 systemctl status redis知道redis状态是运行态和只能本机访问后&#xff0c;想查看redis配置文件位置 cat /etc/systemd/system/redis.service知道redis配置在哪里&#xff0c;修改…

redis启动,停止,重启

1、查看redis是否在运行&#xff1a; ps aux | grep redis 2、启动redis&#xff1a; /etc/init.d/redis start 3、关闭redis&#xff1a;redis-cli shutdown 4、当设置密码后&#xff0c; 上面的关闭命令无效&#xff1a;带密码输入&#xff1a;redis-cli -a [password] 回…

centos中常用与redis相关的命令

该篇指令只针对完全不懂Linux&#xff0c;但是却不得不配置redis的同学&#xff08;没错就是我&#xff09; 安装过程就不阐述了&#xff0c;默认都安好了嗷。 启动redis 首先进入到redis安装位置的bin目录下&#xff0c;路径因人而异&#xff0c;这里用本人的路径作为示例 …

Linux重启 Redis自动启动

今天又要维护新的服务器了&#xff0c;翻了一下网上Redis自动启动&#xff0c;结果配置一大堆&#xff0c;其实很多没什么用&#xff0c;也不好理解&#xff0c;所以干脆把我自己的记录给写这里给大家参考。 第一步&#xff1a;创建Redis启动服务 在系统开机启动项目录 /lib/…