8个数码管依次显示的程序

8个数码管依次显示的程序,第1张

请问朋友你开关是电源开关还是控制键盘?

如果是电源开关,那么汇编程序好写。

程序如下:

P2口送位控制,P0口送显示数据(P10——P16对应数码管abcdefg),用于共阳数码管,

ORG 0000H;跳过中断入口

LJMP START;

ORG 0030H;主程序开始

START:MOV SP,#60;初始化堆栈

MOV DPTR,#TAB;显示数据表格首址送数据指针

MOV R0,#0FEH;位控制寄存器

MOV R1,#0;取码寄存器

MOV P2,#0FFH;

MOV R4,#255;延时控制

MOV P0,#0FFH;

MOV R2,#8;要显示8个数,既8个数码管同时显示01234567;

L1:MOV A,R1;

MOVC A,@A+DPTR;

MOV P0,A;送显示数据

MOV P2,R0;送位控制

DJNZ R4,$;延时

MOV P2,#0FFH;关显示

INC R1;显示下一个数据,

MOV A,R0;

RL A;下一位数码管显示

MOV R0,A;

DJNZ R2,L1;

AJMP START;

TAB:DB 0C0H;0

DB 0F9H;1

DB 0A4H;2

DB 0B0H;3

DB 99H; 4

DB 92H; 5;

DB 82H; 6

DB 0F8H;7

END

#include<reg52h>

//52系列单片机头文件

#define

uchar

unsigned

char

//宏定义

#define

uint

unsigned

int

sbit

dula=P2^6;

//申明u1锁存器的锁存端

sbit

wela=P2^7;

//

u2

uchar

num1,num2;

uchar

code

table[]={

//数组定义

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar

code

aable[]={

//位选数组定义

0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

void

delays(uint);

//子函数申明

void

main()

{

while(1)

{

for(num1=0;num1<48;num1++)

//6个数循环显示

{

wela=1;

//打开u2锁存端

P0=aable[num1%6];

//送入位选信号

wela=0;

//关闭u2锁存端

//

delays(1);

dula=1;

//打开u1锁存端

P0=table[num1%16];

//送入段选信号

dula=0;

//关闭u1锁存端

delays(1);

}

}

}

/---------主函数-----------------------------------------------/

void

delays(uint

xs)

{

uint

i,j,k;

for(i=xs;i>0;i--)

for(j=1000;j>0;j--)

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

}

/----------------延时程序-----------------------------------------------/

ORG 是伪指令,指定程序从哪个地址开始存起。

因为00H到30H中间有几个地址是固定划给中断用的,是中断进入的地址。而单片机上电程序从00H到始运行。为了避开这些地址,用了两个ORG

以上就是关于8个数码管依次显示的程序全部的内容,包括:8个数码管依次显示的程序、51单片机数码管显示程序、数码管显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9844448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存