求单只数码管循环显示0-9的汇编代码

求单只数码管循环显示0-9的汇编代码,第1张

ORG 0000H

SJMP MAIN

ORG 030H

MAIN: MOV R1,#00H

MOV A,R1

D1: ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR ;查表

MOV P0,A ;P0口输出,显示数字

ACALL DELAY

INC R1

MOV A,R1 ;A加1

CJNE A,#10,D1 ;判断A是否到达10

LJMP MAIN ;当A达到10跳回主函数,重新赋值为0

DELAY: MOV R2,#05H ;延时

D2: MOV R3,#0FFH

D3: MOV R4,#0FFH

DJNZ R4,$

DJNZ R3,D3

DJNZ R2,D2

RET

TAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数值1到9的共阳极编码

END

补充说明两点:

1、程序下载到目标板之后,注意一下晶振频率,如果显示效果不佳,可以通过修改延时参数,调节刷新频率。

2、这里采用的是共阳极编码二极管(公共端已经接VCC了),下载程序前,请注意自己到网上找编码,代替倒数第二行代码。

/该程序是一个0-9单个数码管循环显示程序/

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar a,t;

sbit dula=P2^6;

sbit wela=P2^7;

void display(uchar a);

void delay(uint z);

void main()

{

dula=0;

wela=0;

t=0;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

if(t==20)

{

t=0;

a++;

if(a==10)

a=0;

}

display(a);

}

}

void display(uchar a)

{

dula=1;

P0=table[a];

dula=0;

wela=1;

P0=0xfe;

wela=0;

P0=0xff;

delay(1);

}

void timer0()interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t++;

}

void delay(uint z)

{

uint x,y;

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

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

}

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

MOV R0,#0

MOV R1,#3

LOOP:

MOV DPTR,#TABLE

MOV A,R0

MOVC A,@A+DPTR

MOV P1,A

LCALL DELAY

MOV P1,#00H

LCALL DELAY

DJNZ R1,LOOP

INC R0

MOV R1,#3

CJNE R0,#10,LOOP

MOV R0,#0

SJMP LOOP

DELAY:

MOV R2,#200

DELAY1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,DELAY1

RET

TABLE: ; 共阴极数码管显示代码表

DB 3FH,06H,5BH,4FH,66H ;01234

DB 6DH,7DH,07H,7FH,6fh ;56789

END

七段共阳数码管接在P0口,显示从0到9, 按键接P32按一下加一, 按键P33 按一下减一。程序如下:

K1 BIT P32

K2 BIT P33

START:MOV  DPTR,#TABLE

MOV  R1,#0

MLOOP:MOV A,R1

MOVC A,@A+DPTR

MOV  P0,A

JB K1 ,TK2

CJNE R1,#9,CPM

CPM:JNC MLOOP

INC R1

JNB K1,$

SJMP MLOOP

TK2:JB  K2,MLOOP

CJNE R1,#0,CPN

SJMP MLOOP

CPN:DEC R1

JNB K2,$

SJMP MLOOP

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,80H,90H

END

仿真图及效果

把 数码管的 1-9 的 对应的码算出来就好了

例如:#include <AT89X51H>

//数字0-9的字形码

unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

unsigned char dispcount;

void delay02s(void);

void main(void)

{

P1_0=0;//选通第一位数码管

while(1)

{

 for(dispcount=0;dispcount<10;dispcount++)

 {

  P0=table[dispcount];

  delay02s();

 }

}

}

void delay02s(void)

{

unsigned char i,j,k;

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

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

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

}

补充:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机

你要c语言的还是汇编的?

#include<reg52h>

#define uint unsigned int

#define uchar unsigned char

void delay(uchar x); //延时程序

void ds_50ms(void); //50ms定时,中断程序

void Ptime(uchar); //时间处理函数

void Js_Scan(void); //数码管扫描函数

sbit S1=P2^4; //置位P24为数码管1控制位

int num=0,m=0; //定义数据类型

//int code LED_Num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管扫描数组,共阴极

int code LED_Num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极

void main(void) //主函数

{

TMOD=0x01; //定义计时器工作类型

TH0=(65535-50000)/256; //定时器高4位初值

TL0=(65535-50000)%256; //定时器低4位初值

EA=1; //开中断

ET0=1; //开中断

while(1) //建立死循环

{

Js_Scan(); //调用数码管扫描函数

TRO=1;

}

}

void ds_50ms(void) interrupt 1 using 1 //50ms定时中断程序

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

num++; //执行累加,直到50ms

Ptime(num); //调用时间处理函数

}

void Ptime(uchar time) //时间处理函数

{

if(time==20) //判断是否到1000ms,即1秒

{

num=0; //num清零

m++; //m累加

}

if(m==9) //数码管显示9时,m清零,重新计数

{

m=0;

}

}

void Js_Scan() //数码管扫描函数

{

uchar j; //定义j数据类型

for(j=0;j<5;j++) //建立循环

{

S1=1;P0=LED_Num[m];delay(1);S1=0; //扫描显示位,稍作延时(对于单位数码管可直接置高置低,此为扫描的写法,单位不需要延时,不需要写for循环)

}

}

void delay(uchar x) //延时函数,防止数码管显示不稳定

{

uchar k;

while(x--)

for(k=0;k<125;k++);

}

这个是共阳极的,共阴极改变数组就行了。。。。 将前面的//删掉 将后面数组加上// S1=0;S1=1;就行了。

以上就是关于求单只数码管循环显示0-9的汇编代码全部的内容,包括:求单只数码管循环显示0-9的汇编代码、数码管显示数字0~9的C程序、汇编语言 数码管显示0-9.每个数字闪烁三次,再显示下一个数字,如此循环。求程序,,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存