一、原理介绍

关于数码管的控制电路,在《51单片机(八)》中有详细的介绍,硬件电路如下图所示。

在这个实验中,我们对数码管进行扫描。在进行实验时,需要将单片机的P00~P07引脚与J44相连。接口的对应关系是(P00—D0),……,(P07—D7)。将单片机的P10和P11引脚与J45相连,P10与J45上的DM对应,P11与WM对应。

二、实例介绍

这个实验的代码如下所示

#include<reg52.h> //包含头文件,一般情况不需要改动#define DATA P0 //定义数据端口 程序中遇到DATA 则用P0口 替换
sbit DM = P1^0;  //定义锁存使能端口 段锁存
sbit WM = P1^1;  //定义锁存使能端口 位锁存unsigned char BJTY_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0123456789
unsigned char BJTY_WeiMa[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char m=0;/********************************************************************/
/*                            延时函数                              */
/*               延时时间的计算对应单片机12MHz的晶振                */
/*            x为延时的ms数,例:x为10时,延时时间约为10ms          */
/********************************************************************/
void delay1ms(unsigned int x)
{unsigned int i,j;for(j=0;j<x;j++)for(i=0;i<123;i++);
}/********************************************************************/
/*                              主函数                              */
/********************************************************************/
void main(void)
{for(;;) {DATA=0;           //清空显示以防重影DM=1;          //段锁存DM=0;DATA=BJTY_WeiMa[m]; //取位码 WM=1;    //位锁存WM=0;DATA=BJTY_DuanMa[m]; //取段码DM=1;    //段锁存DM=0;   delay1ms(2);    //延时2msm++;if(m==8)    //检测8位扫描是否结束m=0;      //如扫描完成则从第一个开始再次扫描8位}
}

将程序烧写到单片机中运行,效果如下所示。

1、需要多位数码管显示不同数据时就需要用动态扫描。扫描的方式是,先点亮数码管的第一位,之后点亮第二位,并以此点亮其它位,点亮第八位之后,在转回来点亮第一位,如此反复点亮。动态扫描速度很快,由于人眼的视觉暂留,看到的效果是八位数码管都是同时点亮的。所谓“视觉暂留”是指人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。

由程序中可以看出,向数码管赋值一位数据后,延时2ms,

delay1ms(2);    //延时2ms

显示8位数据,总共耗时16ms,人眼的视觉暂留时间约为100ms,因此,虽然单一时刻只有一个数码管点亮,但是人看到的效果是8位数码管全部点亮,并且显示不同的数字。

2、if语句

在这个程序中使用了if语句。

if(m==8)    //检测8位扫描是否结束

m=0;      //如扫描完成则从第一个开始再次扫描8位

这个if语句的作用是判断m是否等于8,如果是则,点亮了第八位数码管,则令m=0,下一个周期点亮第一位数码管。

if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。

第一种形式为基本形式:

if(表达式)

语句

其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。

第二种形式为: if-else

if(表达式)

语句1;

else

语句2;

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。其过程可表示为下图。

第三种形式为if-else if-else形式

前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else if-else语句,其一般形式为:

if(表达式1)

语句1;

else if(表达式2)

语句2;

else if(表达式3)

语句3;

else if(表达式m-1)

语句m-1;

else

语句m;

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句m。然后继续执行后续程序。if-else if-else语句的执行过程如下图所示。

关于锁存器的操作代码,可以参考《51单片机(九)》中的讲解。

51单片机(十)—— 8位数码管-数码管扫描相关推荐

  1. 单片机动态从00到99C语言,用51单片机控制 2位数码管动态显示 00 ~ 99

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

  2. 单片机数码管从00到99C语言_用51单片机控制 2位数码管动态显示 00 ~ 99。

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

  3. 基于51单片机的8位数码管显示的可调时电子时钟

     基于51单片机的8位数码管显示的可调时电子时钟 本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60H ...

  4. 51单片机入门教程(3)——数码管显示

    51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...

  5. 如何使用keil进行编译并且用proteus进行51单片机仿真实现0~F的数码管字符显示

    文章目录 一.目的: 二.在keil中进行程序编译 三.在proteus上画出电路图 四.将keil中编译的hex文件在proteus电路图中进行仿真运行 一.目的: 使用keil进行编译并且用pro ...

  6. 【Proteus仿真】51单片机+74HC164驱动两个四位数码管

    [Proteus仿真]51单片机+74HC164驱动两个四位数码管 Proteus仿真 程序代码 #include <STC89C5xRC.H>sbit DAT=P1^1; sbit CL ...

  7. 51单片机实现三位十进制数加减乘除运算

    51单片机实现三位十进制数加减乘除运算 一.题目 51单片机IO接口作业 请将附件给出的Proteus图用51单片机完成一个计算器功能. 1.显示采用动态分时8位共阳数码管输出. 2.采用4*4矩阵键 ...

  8. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序

    51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15   来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...

  9. 基于51单片机实现4位数码管动态显示

    单片机入门学习记录(一) 硬件配置: 主控:STC89C52单片机 显示器件:四位一体数码管 操作器件:点动式独立按键SB1.SB2.SB3.SB4 *选配器件:蜂鸣器 功能要求: 1)开机自检:四位 ...

  10. 51单片机入门教程(3)——数码管显示学号

    目录 1.数码管简介 2.静态显示 3.动态显示 4.小结 相信经过了流水灯的实现,大家已经弄清楚了Keil和Proteus是如何联动使用的,并且对51单片机也有了一定的认识,在这一章里,我带大家利用 ...

最新文章

  1. 取消打开命令行进入默认anaconda的环境
  2. 理解T-SQL: 存储过程
  3. C# 模拟一个处理消息队列的线程类 Message Queue
  4. JAVA获取程序/jar包所在路径
  5. 超图Cesium二三维切换
  6. LINUX编译automake
  7. 基于Docker swarm 集群搭建SSR 学习
  8. 王一博、肖战、吴宣仪、杨紫,2019明星沸点榜,谁的颜值更高,Python告诉你
  9. 一条命令解决macmnsvc.exe占用8081端口的问题
  10. Flutter HotRealod详解
  11. AOJ-AHU-OJ-675 定位赛
  12. Pika 2.3.5 升级 3.0.16
  13. Intel(R) 6 Series/C200 Series Chipset Family USB Enhanced Host Controller - 1C26出现感叹号,USB无法使用
  14. norms matlab
  15. 虚幻引擎4艺术大师 - 中文版免费分享
  16. rviz点云渲染卡顿问题
  17. linux下输入ls显示时间格式,【Linux基础】linux下修改ls显示的时间格式
  18. 【vbs脚本】02.高级
  19. 群晖docker部署带web容器的端口配置
  20. iframe在html中怎么写,html中如何使用iframe标签链接网址呢?

热门文章

  1. 13款国内外知名PHP集成环境的优缺点分析,PHP集成环境推荐、PHP绿色集成环境推荐
  2. IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果...
  3. 如何生成随机验证码图片
  4. 金立android手机怎么截图,金立手机怎么截屏
  5. PDF如何添加下划线 捷速PDF编辑器一键搞定
  6. 干货资源共享之阿里云大学的学习路线和免费课程
  7. vscode中setting的设置
  8. 利用PDM实现机械制造业的信息集成
  9. chrome 插件开发中的热更新问题
  10. 物联网时代的智慧燃气解决方案