51单片机LED数码管

article/2025/9/23 14:52:39

LED显示器分为共阴极(发光二极管所有的阴极连接在一起)和共阳极(所有的阳极都连接在一起)两种。
共阴高电平有效
共阳低电平有效
在这里插入图片描述
char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
共阴接法0~9
共阳取反就行

静态显示
在这里插入图片描述

#include <REGX52.H>
#include <intrins.h>
unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f}; // 1~9
void delay(unsigned int time)		//@11.0592MHz
{unsigned char i, j;while(time){_nop_();i = 2;j = 199;do{while (--j);} while (--i);time--;
}
}
void seg()
{int i = 0;for(i = 0;i<5;i++){P2=led[i];delay(500);}
}
void main()
{while(1){seg();}
}

led从0~9依次显示
在这里插入图片描述

动态显示:利用视觉暂留
在这里插入图片描述

#include <REGX52.H>
#include <intrins.h>
unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f}; // 1~9
unsigned char str[] = {0x76,0x79,0x38,0x38,0x3f};//hello
unsigned char bi[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //0~1
void delay(unsigned int time)		//@11.0592MHz
{unsigned char i, j;while(time){_nop_();i = 2;j = 199;do{while (--j);} while (--i);time--;
}
}void seg()
{int i = 0;for(i = 0;i<5;i++){P3=bi[i];P2=str[i];delay(5);}
}
void main()
{while(1){seg();}
}

在这里插入图片描述
Proteus里数码管用7seg搜
U2是一个38译码器,E1接高电平,E2,E3接低电平,译码器开始工作
这个led的12345678是片选,就是led中的8个数码管能不能用,接高电平就代表能用。A~G还有DP是位选。
看起来是一个HELLO的一起显示,实际上是单独分别显示的,只是因为太快了骗过了眼睛。所以delay的延时时间要比较短。

在这里插入图片描述

在这里插入图片描述
这是普中开发板的原理图。具体内容就是74HC138是一个38译码器.根据P24P23P22的顺序,如果这里输入000,那么Y0非被选中,LED1就是低电平,LED2~8是高电平。低电平驱动效率比较好,所以大多数都是低电平驱动。LED1对应第8个数码管。这里同样是分位选和片选,38译码器主要是选择第几个数码管亮,而数码管怎么亮取决于P00-P07.然后看数码管是共阴还是共阳接法。
共阴
char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
按abcdefg的顺序编码然后形成0~9

#include <REGX52.H>
unsigned int m[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9数码管void delay(unsigned int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<130;j++);}
}
void sed(unsigned char location,number){  //位置,数字switch(location){case 1:P2_4=1;P2_3=1;P2_2=1;break; //7 LED8 第一片case 2:P2_4=1;P2_3=1;P2_2=0;break; //6 LED7 2case 3:P2_4=1;P2_3=0;P2_2=1;break; //5      3case 4:P2_4=1;P2_3=0;P2_2=0;break; //4      4case 5:P2_4=0;P2_3=1;P2_2=1;break; //3      5case 6:P2_4=0;P2_3=1;P2_2=0;break; //2      6case 7:P2_4=0;P2_3=0;P2_2=1;break; //1      7case 8:P2_4=0;P2_3=0;P2_2=0;break; //0      8}P0=m[number];
}
void main()
{while(1){sed(1,2);//第一位显示2}
}

在这里插入图片描述
动态显示

#include <REGX52.H>
unsigned int m[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9数码管void delay(unsigned int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<130;j++);}
}
void sed(unsigned char location,number){  //位置,数字switch(location){case 1:P2_4=1;P2_3=1;P2_2=1;break; //7 LED8 第一片case 2:P2_4=1;P2_3=1;P2_2=0;break; //6 LED7 2case 3:P2_4=1;P2_3=0;P2_2=1;break; //5      3case 4:P2_4=1;P2_3=0;P2_2=0;break; //4      4case 5:P2_4=0;P2_3=1;P2_2=1;break; //3      5case 6:P2_4=0;P2_3=1;P2_2=0;break; //2      6case 7:P2_4=0;P2_3=0;P2_2=1;break; //1      7case 8:P2_4=0;P2_3=0;P2_2=0;break; //0      8}P0=m[number];
}
void main()
{while(1){sed(1,2);delay(4);sed(2,2);delay(4);sed(3,4);delay(4);sed(4,7);delay(4);
}}

在这里插入图片描述

延时不能太慢,那样就变成挨个闪烁了
也不能不用延时,会有重影出错


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

相关文章

单片机 0xff是什么意思

0x是16进制的前缀。单片机中对寄存器或IO口操作都是用十六位进制表示&#xff0c;比如oxaa&#xff0c;代表二进制的1010&#xff08;a&#xff09; 1010&#xff08;a&#xff09;。在书写时0x代表十六位进制。 16进制就是逢16进1&#xff0c;但我们只有0~9这十个数字&#x…

python中0x3f_类似于0x3F是什么意思?怎么转换?

展开全部 单片机中0x3f代表16进制数3F&#xff0c;即00111111B或63D(B代表二进制&#xff0c;D代表十进制)&#xff0c;在单片机中常用于配置62616964757a686964616fe78988e69d8331333436316265IO口的输入输出或寄存器的相关配置&#xff0c;实际意义指二进制对应位为高电平。 …

c++ 0x3f 0x3f3f 0x3f3f3f 0x3f3f3f3f的具体值

RT&#xff0c;做题的时候因为没有把最大值设置好&#xff0c;导致有一个点没有过去。现在记录一下0x3f之类的数值&#xff0c;以方便日后的使用 0x3f&#xff1a;代表的数值63 0x3f3f&#xff1a;代表的数值16191 10的四次方多 0x3f3f3f&#xff1a;代表的数值4144959 10的六…

0x3f3f3f3f是什么意思

经常会看到大佬的定义中出现有一些这样的东西&#xff0c;经过多方印证查阅可以找到介绍讲解 0x3f3f3f3f的十进制是1061109567&#xff0c;是10^9级别的&#xff0c;而一般场合下的数据都是小于10^9的&#xff0c;所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。 …

图论中的0x3f和memset使用注意事项(较详细)

图论中的memset和0x3f 写此博客的背景 相信有很多同学在看别人图论专题的题解、板子的时候经常看到下面两句&#xff1a; const int INF 0x3f3f3f3f; memset(d, INF, sizeof(d));或者下面这样&#xff1a; memset(d, 0x3f, sizeof(d));很多同学都不明所以&#xff0c;只知…

双三次插值算法

配合阅读&#xff1a;https://blog.csdn.net/nandina179/article/details/85330552 今天学习了第三种图像缩放的方法&#xff0c;双三次插值法。由于理解能力比较差&#xff0c;看了好久的公式&#xff0c;还是云里雾里&#xff0c;但是为了督促自己学习&#xff0c;还是把已知…

图像的放大:双三次插值算法(C++实现)

双线性插值算法的不足就是细节处理的不好&#xff0c;换句话说&#xff0c;就是曲线拟合得不够光滑&#xff0c;所以又有了双三次插值算法。双三次插值算法是基于周围的16个像素点&#xff0c;通过计算16个像素点的权重&#xff0c;累积得到增加点的像素值的。 简单点理解&…

图像插值理论研究——双三次插值(双立方插值)

双三次插值&#xff0c;英文是Bicubic interpolation。双三次插值是一种更加复杂的插值方式&#xff0c;它能创造出比双线性插值更平滑的图像边缘。双三次插值方法通常运用在一部分图像处理软件、打印机驱动程序和数码相机中&#xff0c;对原图像或原图像的某些区域进行放大。A…

FPGA图像处理HLS实现三种图像缩放算法,线性插值、双线性插值、双三次插值,提供HLS工程和vivado工程源码

目录 一、三种图像缩放算法介绍线性插值双线性插值双三次插值 二、HLS实现线性插值图像缩放三、HLS实现双线性插值图像缩放四、HLS实现双三次插值图像缩放五、HLS在线仿真并导出IP六、其他FPGA型号HLS在线仿真并导出IP七、zynq7100开发板vivado工程八、上板调试验证九、福利&am…

数字图像处理100问—27 双三次插值( Bicubic Interpolation )

提示&#xff1a;内容整理自&#xff1a;https://github.com/gzr2017/ImageProcessing100Wen CV小白从0开始学数字图像处理 27 双三次插值&#xff08; Bicubic Interpolation &#xff09; 使用双三次插值将图像放大1.5倍 双三次插值是双线性插值的扩展&#xff0c;使用邻域…

用于数字成像的双三次插值技术​

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 双三次插值是使用三次或其他多项式技术的2D系统&#xff0c;通常用于锐化和放大数字图像。在图像放大、重新采样时&#xff0c;或是在软件中润饰和编辑图像时也会使到用…

插值算法(最邻近差值、双线性插值、双三次插值)

一、最邻近差值&#xff08;nearest&#xff09; 含义&#xff1a; 选取离目标点最近的点的值作为新的插入点的值。 两幅图坐标值变换关系&#xff1a; &#xff08;代码未验证&#xff09; for i1:size(dist,1)x round(i* (size(src,1)/size(dist,1))); %dst横坐标变换到s…

matlab双线性插值双三次插值对CUFED5进行处理

本文是摘抄与总结&#xff0c;仅供自己学习和日后查阅使用。 可以自己写一个双线性插值函数&#xff0c; ------------------------------------------------------------------- function outputimg my_imresize(A,n) % A 是图像矩阵,n是放缩的倍数 % 返回值outputimg是一…

双三次插值算法的C++实现与SSE指令优化

在上篇文章中&#xff0c;我们讲解了常见的最邻近插值算法、双线性插值算法和双三次插值算法的原理与实现&#xff0c;三种插值算法中双三次插值算法的插值效果最好&#xff0c;但其也是三种算法中计算复杂度最高、耗时最长的算法。本文在给出双三次插值C代码的基础上&#xff…

双三次插值 - 插值图像任意位置亚像素C++

双三次插值 - 插值图像任意位置亚像素C 一、概念 双三次插值又称立方卷积插值。三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16个点的灰度值作三次插值&#xff0c;不仅考虑到4 个直接相邻点的灰度影响&#xff0c;而且考虑到各邻点间灰度值变化率的影响。…

matlab 给图像双三次,图像灰度的双三次插值的MATLAB实现

相比C/C实现&#xff0c;图像灰度的双三次插值的MATLAB实现要方便的多&#xff0c;下面是MATLAB语言实现 clc,clear; ffimread(C:\Program Files\MATLAB\R2013a\bin\work\lena.bmp); [mm,nn]size(ff);%将图像隔行隔列抽取元素&#xff0c;得到缩小的图像f mmm/2;nnn/2; fzeros(…

java 双三次线性插值_三种常见的图像处理双三次插值算法

三种常见的图像处理双三次插值算法 双立方插值计算涉及16像素,间(i’, j’)像中的包括 小数部分的像素坐标。dx表示X方向的小数坐标。dy表示Y方向的小数坐标。 详细 能够看下图: 依据上述图示与双立方插值的数学表达式能够看出。双立方插值本质上图像16个像素点 权重卷积之和…

双三次插值 python实现_Python:用GPU实现双三次插值

它不是GPU(而是尝试利用线程和CPU的向量单元)&#xff0c;但是pyvips比scipy快很多&#xff0c;您可以测试一下。在 我做了个基准&#xff1a;import sys import time import scipy.ndimage import pyvips scale 10 n_loops 10 start time.time() test_image scipy.ndimage…

双三次插值及Matlab实现

双三次插值及Matlab实现 一、简单实例 采用简单实例进行对双三次插值的介绍&#xff0c;由于双三次插值对于目标图像的某一像素进行估计时&#xff0c;所采用的像素信息为其周围16个像素点信息&#xff0c;因此不同于最近邻插值和双线性插值&#xff0c;此时假设有 5 5 5\tim…

【opencv】最近邻插值、双线性插值、双三次插值(三次样条插值)

目录 1. 最近邻插值2. 双线性插值1&#xff09;简单理解2&#xff09;一般性 3. 双三次插值&#xff08;三次样条插值&#xff09;总结 b站 视频讲解 &#xff1a; https://www.bilibili.com/video/BV1wh411E7j9/ 1. 最近邻插值 举个简单例子&#xff1a;一个 3 3 3 \times 3…