linux 动态扫描 数码管,数码管动态扫描显示01234567程序(三种方案)
描述
数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调、热水器和冰箱等)得到了极为广泛的应用。在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容。鉴于此,本文为大家带来三个数码管动态扫描显示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程序(三种方案)相关推荐
- linux 动态扫描 数码管,数码管动态扫描显示01234567程序(三种方案) - 全文
数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调.热水器和冰箱等)得到了极为广泛的应用.在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容.鉴于此 ...
- c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...
数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...
- html把一张图片动态的代码,原神:4张动态图演示168皮肤琴的实机效果,三种玩家可入手...
原神这款游戏凭借着"细腻的角色设计""有趣的剧情路线"迅速走火,但是玩久了的老玩家很容易发现这款游戏的弊端,真的是太缺核心玩法了.本来原神的核心玩法应该是探索新 ...
- 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式
centos 软件安装的三种方式 Linux下面安装软件的常见方法: 一.yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决 1.方便 简单 2.没有办法深入修改 yum ...
- linux装win之后C盘爆满,win7c盘突然爆满的三种解决办法
win7c盘突然爆满怎么办?前段时间有用户和我们反馈,自己电脑原来都是好好的,突然有一天变得非常卡顿,打开计算机一看C盘处于爆满的红色状态,明明之前还有很多空间,这是什么原因呢?小编今天就来告诉大家w ...
- Nginx 动态负载 upstream 三种方案
基于Nginx dyups模块的动态上下线 基于以上这些情况, 我计划实现一个工具,这个工具首先解决站点上下线和动态扩容问题,也就是说在不需要重启nginx的情况下,并且在保证请求不丢失的情况下来更新 ...
- 动态表单的数据库结构设计的三种方案
1.一个表单对应数据库的一张或多张物理表(主从表),这种设计在很多业务的情况下,其数据库的物理表会不断膨胀,同时,当修改表单时,其对应的物理表结构也需要修改,当物理表有很多数据时,改变物理表schem ...
- Linux drm显示系统的两种方案
找了几篇和drm不错的文章分享给大家,Linux是一个模块化非常明显的系统,每个子系统又会有属于自己的一些特性,学习的时候,最好也是分类学习比较好. 这篇文章主要是回答一位同学的提问,当然也是做一次总 ...
- 为Linux系统增加中文字体支持:解决显示问题的三种方法
Linux 增加中文字体支持 在使用 Linux 操作系统的过程中,用户经常会遇到中文字体显示问题,导致一些界面上的文字不能正确显示.为了解决这个问题,我们可以通过以下方法来增加中文字体支持. 一.安 ...
- Linux系统下xxx.deb、xxx.rpm、xxx.tar.gz三种软件包的区别及安装方法
一. rpm(Redhat Linux Packet Manager)包-在红帽LINUX.SUSE.Fedora可以直接进行安装,但在Ubuntu中却无法识别: deb包-debian发行版的软件包 ...
最新文章
- linux mysql 二进制包_mysql5.7 二进制包安装
- mysql之对视图的操作
- html在表格添加下拉按钮,Bootstrap-table 使用说明--如何在表格td里增加一个按钮
- 自然语言处理模型_ICLR 2020 「自然语言处理」【Prosus AI】金融情感分析FinBERT模型(含源码)!...
- Mbps、Kbps、bps、MB、KB
- RedHat5 升级OpenSSH服务
- 华为腾讯众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!
- django_4:数据库0——配置数据库
- win11系统怎么样 Windows11系统好用吗
- mysql中rm+-f_Mysql命令大全
- 35岁危机?请收下这部转型秘籍
- 我觉得很有必要好好看看JavaScript
- 在sap系统设置纸张打印格式(针式打印机)
- 20款优秀的基于浏览器的在线代码编辑器
- 两个方法教你彻底解决win10系统更新补丁安装失败的问题
- MATLAB命令行窗口常见命令与功能
- 3d人体智能测试软件,人体系统女性3Dapp
- python招聘杭州拉勾网_Python爬虫:爬取拉勾网招聘信息
- 用Python做数据分析之数据筛选及分类汇总
- 「化学」相对分子质量
热门文章
- MAC安装中文输入法Rime
- 月度计划之2012年10月中旬—11.15
- 关系数据库与对象数据库
- 蛋白质组学技术与药物作用新靶点研究进展
- 什么是驻点和拐点_驻点、极值点、拐点间的“爱恨情仇”
- 手工卸载各版本金蝶K/3客户端的方法
- WPS Excel将多个Excel文件合并到一个Excel文件中(sheet)
- 小米9开发版自带root吗_怎么获取root权限-小米CC9和小米CC9美图版刷入MIUI开发版,获取完美ROOT权限功能...
- Scrapy 爬取电影网站开发微信公众号
- highchart drilldown钻取