51单片机入门教程(3)——数码管显示
51单片机入门教程(3)——数码管显示
- 一、LED数码管简介
- 二、数码管静态显示
- 三、数码管动态显示
特别鸣谢:HFUTer-朱聪强
一、LED数码管简介
LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成的器件。常见的LED数码管为“8”字型的,共计8段。每一段对应一个发光二极管。
数码管有共阳极和共阴极两种
- 共阴极: 数码管的发光二极管的阴极连在一起,通常公共阴极接地。当阳极为高电平时,发光二极管点亮。
- 共阳极: 数码管的发光二极管的阳极连在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
二、数码管静态显示
数码管静态显示就是无论多少位LED数码管,同时处于显示状态。
为了使数码管显示不同的符号或数字,只需要把某些段发光二极管点亮就可以了。
假设在共阴极的数码管上显示字符'0'
,需要将a、b、c、d、e、f置为高电平,即数码管八位输入为0011 1111
,对应的16进制数为0X3F。所以我们只需要在程序中将0X3F赋值给对应的端口,如下:
//假设数码管与P0端口相连接
P0 = 0X3F;//显示字符‘0’
按照上述方法,显示各种字符的8段LED数码管的段码如下:
搭建仿真电路如下
例程如下:
/******************************************************************************
* 名称:单只数码管循环显示0~9
* 说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字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=0x00;for(; i < 10; ++i){P0 = table2[i];if(i == 9)i = 0;DelayMS(300);}while(1);
}
三、数码管动态显示
如果有两位的数码管,每个数码管要显示不同的字符,那么电路该怎么搭建呢?
像这样???
可以是可以,但是占用了太多端口,如果要同时显示4位、8位数码管,单片机的端口显然就不够用了。
因此,对于多位数码管,经常使用动态扫描的方法来显示:
无论在任何时刻只有一个LED数码管处于显示状态,利用人的视觉暂留效应,依次显示每个不同的数码管。某一时刻,只有一位LED数码管被选通显示,其余位则是熄灭的,人眼看到的是若干位稳定的同时显示的字符。
搭建仿真电路如图:
例程如下:
/******************************************************************************
* 名称:8只数码管动态显示多个不同字符
* 说明:数码管动态扫描显示0~7。
******************************************************************************/
#include<reg51.h>
#include<intrins.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,wei=0x80;while(1){for(i=0;i<8;i++){ P0=0xff;P0=table1[i]; //发送段码wei=_crol_(wei,1);P2=wei; //发送位码DelayMS(2);}}
}
编译、烧录,实验效果如图:
51单片机入门教程(3)——数码管显示相关推荐
- 51单片机入门之五:数码管显示(动态),单片机驱动数码
本文旨在介绍单片机入门的基础知识,为初接触或即将接触单片的新手提供一个入门指导.本文章会陆续推出,隔几天一个章节.所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原 ...
- 51单片机入门教程(6)——外部中断
51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...
- 51单片机入门教程(5)——定时器中断
51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...
- 51单片机学习笔记-2数码管显示
2 数码管显示 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...
- 51单片机入门教程学习笔记
基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...
- 51单片机入门教程(1)——点亮一个LED灯
51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...
- 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真
基于51单片机的74HC164驱动数码管显示程序与仿真 基于51单片机的74HC164驱动一位数码管显示程序与仿真 #include #include #define uchar unsigned c ...
- 51单片机AD转换pcf8591+数码管显示+Proteus仿真二
51单片机AD转换pcf8591+数码管显示+Proteus仿真二
- 基于51单片机的8位数码管显示的可调时电子时钟
基于51单片机的8位数码管显示的可调时电子时钟 本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60H ...
最新文章
- 2018年12月14日 函数 总结
- mllib调参 spark_从Spark MLlib到美图机器学习框架实践
- 117. Populating Next Right Pointers in Each Node II
- python学习之正则表达式练习:编写一个计算器
- php7 有参数类型,PHP7中的可空返回类型
- PHP特级课视频教程_第二十七集 Coreseek安装与测试_李强强
- 演变模型_开放组织的演变
- LIRe 源代码分析 1:整体结构
- 最全最新cpu显卡天梯图_电脑显卡天梯图2019排行榜——2019显卡CPU天梯图排行榜...
- 生信技能树linux虚拟机,【生信技能树】Linux练习
- java 文档注释生成_Java的文档注释之生成帮助文档的实例
- 合同扫描管理大师——为合同管理而生
- 小程序发送短信验证码完整工具
- 用Python执行Django数据迁移时报!(1091错误及解决方法)
- android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...
- QDir的mkpath和mkdir的区别
- html页面布局A4模板,A4页面就像html中的布局
- 2022第二届网刃杯网络安全大赛-ICS
- 芜湖小学生计算机水平等级测试竞赛,[转载]2012年芜湖市小学计算机水平等级测评试卷(logo语言版)...
- matlab吸波材料源程序,针状四氧化三铁包覆铁镍合金/石墨片吸波材料制备方法与流程...