51单片机数码管的显示

  • 一、八段数码管基础部分
    • 1.八段数码管的共阴极和共阳极
    • 2.八段数码管的位码和段码
  • 二、八段数码管动态显示
    • 1.八个八段数码管动态扫描0到7流水显示
    • 2.八个八段数码管动态扫描0到7常亮显示
  • 三、八段数码管静态显示
    • 1.一个数码管的静态显示0到9

一、八段数码管基础部分

1.八段数码管的共阴极和共阳极

一个八段数码管由八段二极管组成即a,b,c,d,e,f,g,dop(点),共八段。其中数码管分两种,共阴极和共阳极(共阳极:数码管的阳极全部接在一起,低电平点亮它,如果是共阳极,低电平点亮它。)

2.八段数码管的位码和段码

一般四位数码管,有四个引脚控制选取哪一位数码管(位选),还有8位段选是公用的,就是当位选为第一位时,段选码只对第一位点亮那些段有关,同理选中第二个位时,段码只对第二位有效,依此类推。。。 一般硬件结构确定后,就会出现段码位码的说法。比如说四个位选引脚分别连接单片机p2.2 2.3 2.4 (这三个口分别是74HC138译码器端口),发光管是共阴 那么第一位的位码是xxxx1110;第二位是xxxx1101;第三位是xxxx1011;第四位是xxxx0111;这样我在显示时,如果显示第一位数据,则往p2口送xxxx1110,再送第一位的段码。

二、八段数码管动态显示

所谓静态显示,就是每一个数码管的段码都要独占具有锁存功能的输出口,CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符,直到下一次送出另一个字码之前,显示的内容一直不会消失。动态显示有显示稳定、亮度大、节约CPU时间等优点,但占有I/O口较多,硬件成本高。

1.八个八段数码管动态扫描0到7流水显示

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA=P2^2; //74HC138译码器端口
sbit LSB=P2^3;
sbit LSC=P2^4;//共阳数码管编码表
uchar code table1[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阴数码管编码表
uchar code table2[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//延时
void DelayMS(uint x)
{uchar t;while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{uchar i;while(1){for(i=0;i<8;i++){       P0=0xff;LSA=0;LSB=0;LSC=0;P0=table2[0];DelayMS(100);LSA=1;LSB=0;LSC=0;P0=table2[1];DelayMS(100);LSA=0;LSB=1;LSC=0;P0=table2[2];DelayMS(100);LSA=1;LSB=1;LSC=0;P0=table2[3];DelayMS(100);LSA=0;LSB=0;LSC=1;P0=table2[4];DelayMS(100);LSA=1;LSB=0;LSC=1;P0=table2[5];DelayMS(100);LSA=0;LSB=1;LSC=1;P0=table2[6];DelayMS(100);LSA=1;LSB=1;LSC=1;P0=table2[7];DelayMS(100);}}
}

2.八个八段数码管动态扫描0到7常亮显示

#include<reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit LSA=P2^2; //74HC138译码器端口
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar out[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint num)
{while(num--);
}void display()
{uint i;for(i=0;i<8;i++){switch(i)     //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位  }P0=out[i];//发送段码delay(100); //间隔一段时间扫描    P0=0x00;//消隐}
}void main()
{   while(1){   display();      }
}

三、八段数码管静态显示

动态显示就是把所有显示器的8个段码中的A-dp的各个相同段连接在一起,接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。即让各位数码管按照一定顺序轮流显示,只要扫描频率足够高,由于人眼的“视觉暂留”现象,就能连续稳定地显示。动态显示能显著降低显示部分成本,大大减少显示接口的连线结构。

1.一个数码管的静态显示0到9

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int//共阳数码管编码表
uchar code table1[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阴数码管编码表
uchar code table2[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//延时
void DelayMS(uint x)
{uchar t;while(x--) for(t=0;t<120;t++);
}//主程序
void main()
{uchar i=0;P0=0x3f;for(; i < 10; ++i){P0 = table2[i];if(i == 9)i = 0;DelayMS(300);}while(1);
}

新手上路,还有很多不懂、错误,还请大家指出,如果有用一键三连支持下吧,后续持续更新。

让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)相关推荐

  1. 51单片机控制数码管显示

    前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...

  2. 51单片机之数码管静态显示

    在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示,  我们就拿带小数 ...

  3. 51单片机八位数码管1到F动态滚动显示仿真及程序

    51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...

  4. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  5. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

  6. 51单片机学习 数码管 倒计时

    51单片机学习 数码管 倒计时 简介 1.硬件部分 普中单片机 开发板 (138译码器控制)数码管 2.软件部分 keil软件 硬件部分 138译码器 简介 74LS138 为3 线-8线译码器,共有 ...

  7. 单片机学习笔记————51单片机实现数码管中的倒计时程序

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  8. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  9. 51单片机:数码管动态显示

    要求 51单片机,用三个7段共阴极数码管动态显示0~99,每隔0.5s刷新一次数字.用keil与Proteus联合仿真. 硬件设计 以AT89C51单片机为核心,包括74HC573锁存器,三个7段共阴 ...

最新文章

  1. java方块排序_[代码全屏查看]-NxN方块排序,可自动运行
  2. python3读取excel数据-Python3读取和写入excel表格数据的示例代码
  3. double,float,BigDecimal类型数值的操作
  4. CAS+SSO原理浅谈
  5. double to string 损失精度的问题
  6. 快速开发框架V0.001(免费、100%开源)
  7. 斗地主系列之牌型大小比较
  8. 数据分析学习笔记 2/28
  9. RT-Preempt笔记
  10. jQuery+js+css实现键盘按键呼吸灯效果
  11. 计算机基本操作评课记录,《Word的基本操作》评课稿--李存业
  12. VSCode 代码块/全文 折叠/展开 快捷键
  13. 不需要充电底座的无线充电器,30㎝内随意充
  14. 深度解析什么是色散补偿器?它有什么作用?
  15. shell脚本以服务形式被调用失败,返回127
  16. 2022年考研数据结构_8 排序
  17. c mysql 返回字符串长度_objective-c中字符串长度计算
  18. 在甲方做安全的第五个月
  19. 程序员经常看的开源月刊《HelloGitHub》第 58 期
  20. OneNET物联网平台01 创建MQTTS产品和设备

热门文章

  1. Apache 不记录指定文件类型的日志——LAMP环境搭建
  2. Windows 2008 实战之KMS实施(Revision 2)
  3. MATLAB实现LDA(线性判别分析),以两个类别数目为例
  4. mysql实现自增函数
  5. ResourceBundle 读取properties文件中文乱码
  6. Google分析language垃圾信息
  7. 【BZOJ-3123】森林 主席树 + 启发式合并
  8. Linux lsof命令使用小结
  9. recv和send函数
  10. Android 学习心得(2)——Android内置数据库SQLite