让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)
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单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)相关推荐
- 51单片机控制数码管显示
前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...
- 51单片机之数码管静态显示
在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示, 我们就拿带小数 ...
- 51单片机八位数码管1到F动态滚动显示仿真及程序
51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...
- 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...
- 51单片机实现数码管显示小数
51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...
- 51单片机学习 数码管 倒计时
51单片机学习 数码管 倒计时 简介 1.硬件部分 普中单片机 开发板 (138译码器控制)数码管 2.软件部分 keil软件 硬件部分 138译码器 简介 74LS138 为3 线-8线译码器,共有 ...
- 单片机学习笔记————51单片机实现数码管中的倒计时程序
一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...
- 51单片机七段数码管显示时钟无按键控制—①—74HC595版
参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...
- 51单片机:数码管动态显示
要求 51单片机,用三个7段共阴极数码管动态显示0~99,每隔0.5s刷新一次数字.用keil与Proteus联合仿真. 硬件设计 以AT89C51单片机为核心,包括74HC573锁存器,三个7段共阴 ...
最新文章
- java方块排序_[代码全屏查看]-NxN方块排序,可自动运行
- python3读取excel数据-Python3读取和写入excel表格数据的示例代码
- double,float,BigDecimal类型数值的操作
- CAS+SSO原理浅谈
- double to string 损失精度的问题
- 快速开发框架V0.001(免费、100%开源)
- 斗地主系列之牌型大小比较
- 数据分析学习笔记 2/28
- RT-Preempt笔记
- jQuery+js+css实现键盘按键呼吸灯效果
- 计算机基本操作评课记录,《Word的基本操作》评课稿--李存业
- VSCode 代码块/全文 折叠/展开 快捷键
- 不需要充电底座的无线充电器,30㎝内随意充
- 深度解析什么是色散补偿器?它有什么作用?
- shell脚本以服务形式被调用失败,返回127
- 2022年考研数据结构_8 排序
- c mysql 返回字符串长度_objective-c中字符串长度计算
- 在甲方做安全的第五个月
- 程序员经常看的开源月刊《HelloGitHub》第 58 期
- OneNET物联网平台01 创建MQTTS产品和设备