描述

数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调、热水器和冰箱等)得到了极为广泛的应用。在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容。鉴于此,本文为大家带来三个数码管动态扫描显示01234567程序介绍。

数码管动态扫描显示01234567程序一

原理图

8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。

程序流程图

汇编语言参考程序

ORG 0000H

AJMP MAIN

ORG 0080H

MAIN:

CLR P2.0 选中第一个数码管

MOV P0,#28H 显示0

LCALL DELAY 调用延时ORG

MOV P0,#0FFH 关显示

SETB P2.0

CLR P2.1 选中第二个数码管

MOV P0,#7EH 显示1

LCALL DELAY

MOV P0,#0FFH

SETB P2.1

CLR P2.2 选中第三个数码管

MOV P0,#0A2H 显示2

LCALL DELAY

MOV P0,#0FFH

SETB P2.2

CLR P2.3 选中第四个数码管

MOV P0,#62H 显示3

LCALL DELAY

MOV P0,#0FFH

SETB P2.3

CLR P2.4 选中第五个数码管

MOV P0,#74H 显示4

LCALL DELAY

MOV P0,#0FFH

SETB P2.4

CLR P2.5 选中第六个数码管

MOV P0,#61H 显示5

LCALL DELAY

MOV P0,#0FFH

SETB P2.5

CLR P2.6 选中第七个数码管

MOV P0,#21H 显示6

LCALL DELAY

MOV P0,#0FFH

SETB P2.6

CLR P2.7 选中第八个数码管

MOV P0,#7AH 显示7

LCALL DELAY

SETB P2.7

MOV P0,#0FFH

AJMP MAIN 重新开始

DELAY: 延时子程序

MOV R7,#2

D1: MOV R6,#25

D2: DJNZ R6,D2

DJNZ R7,D1

RET

END

c语言参考程序

#includep="">>

#define uchar unsigned char //宏定义,为方便编程

#define uint unsigned int

#define DIGI P0 //宏定义,将P1口定义为数码管

#define SELECT P2 //宏定义,将P2定义为数码管选择口

uchar digivalue[]={0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};

//显示的数字数组,依次为0,1,。。,9

uchar select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选择数码管数组,依次选择1,2,。。,8

void delay() //延迟函数,决定数码管跳变的间隔时间

{

uchar ii=200; //若发现数码管闪烁,调节这里即可

while(ii--);

}

char code SST516[3] _at_ 0x003b; //仿真器插入代码

main() //主函数

{

uchar i=0;

while(1)

{

for(i=0;i<8;i++) //8个数码管轮流显示

{

SELECT=select[i]; //选择第i个数码管

IGI=digivalue[i]; //显示i

delay();

}

}

数码管动态扫描显示01234567程序二——51单片机动态显示共阳数码管01234567

原理图

c语言程序

程序如下:

#include< p=""><>

#define uint unsigned int

#define uchar unsigned char

//共阳数码管段码表0-F

uchar code smg_dw[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

//数码管段位码表0-F

//uchar code smg_wm[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //显示01234567

uchar code smg_wm[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//显示76543210

void delay_ms(uint); //延时子函数声明

void main()

{

uchar i;

while(1)

{

for(i=0;i<8;i++)

{

P2=smg_wm[i];//选位码

P0=smg_dw[i];//选段码

delay_ms(5);//延时5ms

}

}

}

void delay_ms(uint z) //带参数延时子函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

数码管动态扫描显示01234567程序三——CD4094数码管动态显示

动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。

DG3000 动态显示头文件display_s.h

//----------------------------------------------------------

//程序作用:显示头文件display_s.h

//----------------------------------------------------------

#ifndef _display_

#define _display_

#include < p=""><>

sbit SDA=P2^6; //定义显示管脚

sbit CLK=P2^7;

unsigned char data display_bit;

unsigned char code

led[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};

//定义段码

//延时程序

void delay(unsigned int k)

{ unsigned int i,j;

for(i=0;i

for(j=0;j<100;j++);

}

//数据传输

void send(unsigned char a)

{

unsigned char i;

for(i=0;i<8;i++)

{

if(_crol_(a,i)&0x80)

SDA=1;

else

SDA=0;

CLK=0;

CLK=1;

}

}

//显示程序 8位LED数码管扫描

void display(unsigned char display_buffer[8])

{

unsigned char i,k;

display_bit=0xfe;

for(i=0;i<8;i++)

{

k=led[display_buffer[i];

send(k);

P0=display_bit;

delay(0x01);

P0=0xff;

display_bit=_crol_(display_bit,1);

}

display_bit=0xfe;

8位数码管动态显示01234567(C51程序)

//----------------------------------------------------------

//程序作用:动态扫描显示01234567

//----------------------------------------------------------

#include< p=""><>

#includep="">>

main()

{

unsigned char

a[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};//显示01234567

while(1)

{

display(a); //显示数据

}

}

8.5 8位数码管动态显示01234567(汇编)

;----------------------------------------------------------

;程序作用:8位数码管动态显示01234567(汇编)

;----------------------------------------------------------

;定义变量

DBUF DATA 40H ;显示缓冲区首址

SP_BT DATA 60H ;堆栈指针初值

; LED 位选

LED_CS1 BIT P0.0

LED_CS2 BIT P0.1

LED_CS3 BIT P0.2

LED_CS4 BIT P0.3

LED_CS5 BIT P0.4

LED_CS6 BIT P0.5

LED_CS7 BIT P0.6

LED_CS8 BIT P0.7

;4094接口

SDA_4094 BIT P2^6

CLK_4094 BIT P2^7

ORG 0000H

AJMP MAIN

;-------------------------------

ORG 0030H

MAIN: MOV SP,#60H

MOV R0,#0FFH;单元清零

RES1: MOV @R0,#0

DJNZ R0,RES1

MOV DBUF,#00H;显示数据

MOV DBUF+1,#01H

MOV DBUF+2,#02H

MOV DBUF+3,#03H

MOV DBUF+4,#04H

MOV DBUF+5,#05H

MOV DBUF+6,#06H

MOV DBUF+7,#07H

SAMP1:

LCALL DIR ;调用显示

SJMP SAMP1

;------------------------------------------------------

;显示数据

;-------------------------------------------------------

DIR:

;显示程序

MOV DPTR,#TABLE

MOV A,DBUF

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS1 ;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS1 ;关闭显示

MOV A,DBUF+1

MOVC A,@A+DPTR

//ANL A,#7FH;加小数点

ACALL DISP_da ;送段码输出

CLR LED_CS2;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS2;关闭显示

MOV A,DBUF+2

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS3 ;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS3 ;关闭显示

MOV A,DBUF+3

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS4;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS4;关闭显示

MOV A,DBUF+4

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS5 ;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS5 ;关闭显示

MOV A,DBUF+5

MOVC A,@A+DPTR

// ANL A,#7FH;加小数点

ACALL DISP_da ;送段码输出

CLR LED_CS6;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS6;关闭显示

MOV A,DBUF+6

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS7 ;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS7 ;关闭显示

MOV A,DBUF+7

MOVC A,@A+DPTR

ACALL DISP_da ;送段码输出

CLR LED_CS8;选通第1位数码管

LCALL DELAY_4094

SETB LED_CS8;关闭显示

;-------------------------------------

RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9

DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F

;-------------------------延时子程序---------------------------------

DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒

D_4094:MOV R5,#248

DJNZ R5,$

DJNZ R4,D_4094

RET

DISP_DA:

MOV R3,#08H

DUP: RLC A

MOV SDA_4094,C

CLR CLK_4094

SETB CLK_4094

DJNZ R3,DUP

RET

END

打开APP精彩内容

点击阅读全文

linux 动态扫描 数码管,数码管动态扫描显示01234567程序(三种方案)相关推荐

  1. linux 动态扫描 数码管,数码管动态扫描显示01234567程序(三种方案) - 全文

    数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调.热水器和冰箱等)得到了极为广泛的应用.在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容.鉴于此 ...

  2. c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...

    数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...

  3. html把一张图片动态的代码,原神:4张动态图演示168皮肤琴的实机效果,三种玩家可入手...

    原神这款游戏凭借着"细腻的角色设计""有趣的剧情路线"迅速走火,但是玩久了的老玩家很容易发现这款游戏的弊端,真的是太缺核心玩法了.本来原神的核心玩法应该是探索新 ...

  4. 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式

    centos 软件安装的三种方式 Linux下面安装软件的常见方法: 一.yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决 1.方便 简单 2.没有办法深入修改 yum ...

  5. linux装win之后C盘爆满,win7c盘突然爆满的三种解决办法

    win7c盘突然爆满怎么办?前段时间有用户和我们反馈,自己电脑原来都是好好的,突然有一天变得非常卡顿,打开计算机一看C盘处于爆满的红色状态,明明之前还有很多空间,这是什么原因呢?小编今天就来告诉大家w ...

  6. Nginx 动态负载 upstream 三种方案

    基于Nginx dyups模块的动态上下线 基于以上这些情况, 我计划实现一个工具,这个工具首先解决站点上下线和动态扩容问题,也就是说在不需要重启nginx的情况下,并且在保证请求不丢失的情况下来更新 ...

  7. 动态表单的数据库结构设计的三种方案

    1.一个表单对应数据库的一张或多张物理表(主从表),这种设计在很多业务的情况下,其数据库的物理表会不断膨胀,同时,当修改表单时,其对应的物理表结构也需要修改,当物理表有很多数据时,改变物理表schem ...

  8. Linux drm显示系统的两种方案

    找了几篇和drm不错的文章分享给大家,Linux是一个模块化非常明显的系统,每个子系统又会有属于自己的一些特性,学习的时候,最好也是分类学习比较好. 这篇文章主要是回答一位同学的提问,当然也是做一次总 ...

  9. 为Linux系统增加中文字体支持:解决显示问题的三种方法

    Linux 增加中文字体支持 在使用 Linux 操作系统的过程中,用户经常会遇到中文字体显示问题,导致一些界面上的文字不能正确显示.为了解决这个问题,我们可以通过以下方法来增加中文字体支持. 一.安 ...

  10. Linux系统下xxx.deb、xxx.rpm、xxx.tar.gz三种软件包的区别及安装方法

    一. rpm(Redhat Linux Packet Manager)包-在红帽LINUX.SUSE.Fedora可以直接进行安装,但在Ubuntu中却无法识别: deb包-debian发行版的软件包 ...

最新文章

  1. 洛谷P3388 【模板】割点(割顶)
  2. caffe的prototxt文件
  3. 双指针算法之快慢指针(二):力扣【寻找链表的第N个点】leetcode-876、19
  4. ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
  5. SQL2012 之 创建备份计划
  6. 谷歌,火狐浏览器不能禁用自动补齐的bug缺陷
  7. 关于tomcat的思考
  8. 路由汇总之二ospf路由汇总
  9. WeBack(微信聊天记录导出)使用教程
  10. 【网络安全】大学信息安全技术 期末考试复习题
  11. Word VBA:MathType公式与Latex公式切换
  12. 数字图像处理 冈萨雷斯(第四版)距离测度
  13. 个人计算机软件著作权,个人可以申请软件专利权吗?软件著作权申请的注意事项有哪些?...
  14. matplotlib报错Line2D‘ object has no property ‘linestyle‘或‘linewidth‘
  15. linux环境下java输出乱码,linux java 输出乱码问题
  16. OpenFOAM类库介绍(四)对流项
  17. 特种浓缩分离:倒极电渗析技术工作原理介绍
  18. 物质社会会变成巨大的神经,这颗星球将会成一颗会思考的大脑
  19. 交通数字孪生高速公路规划设计市政道路BIM正向改扩建设计利用实景三维无人机机载LiDAR倾斜摄影车载地面三维激光扫描仪LiDAR点云数据提取自动驾驶高精地图三维矢量车道标线3d点云标注
  20. python调用默认播放器_python使用Tkinter实现在线音乐播放器

热门文章

  1. 关于Mac系统输入法中文标点符号问题
  2. 甲骨文裁员,N+6 赔偿……部分员工不满
  3. Java使用word文档转换图片或pdf格式(aspose-words),无水印,亲测有效!!!
  4. Mac 上设置锁屏快捷键
  5. mysql改列名_mysql怎么修改列名
  6. 编译报错【error】dexpreopt.sh:23 exited with status 1
  7. 面试计算机有什么优势和不足,面试时如何介绍自己的优缺点
  8. 【Python-二分法-查找重复值】
  9. 微信小程序获取access_token报错errcode: 40125,errmsg: invalid appsecret
  10. 手把手带你快速实现直播聊天室