单片机用汇编写两个数码管显示0到99循环的程序

如题

1、新建项目,做好准备。

2、数码管段选表。

3、延时函数。

4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。

5、while(1) //死循环效果{} 。

6、dk = 1; //打开段选,P0 = leddata[i];,dk = 0; //关闭段选,delay(100);//延时效果。

7、选择效果,限制i值的循环范围。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-05-18
ORG 0000H
AJMP MAIN

ORG 30H
MAIN: MOV R1,#0
XUNH:
LCALL DISP
LCALL DELAY
INC R1
CJNE R1,#100,XUNH
AJMP MAIN
;显示P1口十位P2口个位,这样做就怎么也不会闪烁了把
DISP: MOV DPTR,#TAB ;共阴
MOV A,R1
MOV B,#10
MUL AB
MOV A
MOVC A,@A+DPTR
MOV P1,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;延时1s,要精确延时可以稍微调一下数值
DELAY:MOV R2,#25
DEL1: MOV R3,#100
DEL2: MOV R4,#200
DEL3: DJNZ R4,$
DJNZ R3,DEL2
DJNZ R2,DEL1
RET
END
;做动态显示也可以,人眼是看不出闪烁的。那样会省点口线,嘿嘿反正你只有2个 数码管没别的东西,就干脆做个静态的咯。怎么也闪烁不了的本回答被网友采纳
第2个回答  2013-04-13
从网上见过一个:
ORG 0000H ; 上电 与 复位 向量
LJMP MAIN ; 转移指令 转至 MAIN 处
ORG 0040H ; 定义 MAIN 程序 起始地址
MAIN: MOV SP,#5FH ; 设置 堆栈 起始地址
MOV DPTR,#TABLE ; 数据指针 = TABLE(为显示码 数据表地址)
MOV R0,#0 ; R0 = 0
MOV R1,#0 ; R1 = 0
MOV R2,#200 ; R2 = 200
B1: LCALL S2 ; 调用 子程序 S2
LCALL S1 ; 调用 子程序 S1
DJNZ R2,B1 ; R2 不等于 0 则转至 B1
INC R0 ; R0 = R0 + 1
CJNE R0,#10,B1 ; R0 不等于 10 则转至 B1
MOV R0,#0 ; R0 = 0
INC R1 ; R1 = R1 + 1
CJNE R1,#10,B1 ; R1 不等于 10 则转至 B1
LJMP MAIN ; 转至 MAIN 处
S1: MOV A,R0 ; A = R0 显示一位的子程序
MOVC A,@A+DPTR ; A = (@A+DPTR) 读取显示段码
MOV P1,#02H ; 写 显示 位 选
MOV P0,A ; 写 显示 段码
LCALL DELAY ; 调用 延时 子程序
RET ; 子程序 返回
S2: MOV A,R1 ; A = R1 显示另一位的子程序
MOVC A,@A+DPTR ; A = (@A+DPTR) 读取显示段码
MOV P1,#01H ; 写 显示 位 选
MOV P0,A ; 写 显示 段码
LCALL DELAY ; 调用 延时 子程序
RET ; 子程序 返回
DELAY: MOV R5,#15 ; 设置 R5 = 15 延时 子程序
D1: MOV R6,#15 ; R6 = 15
D2: DJNZ R6,$ ; R6 不等于 0 继续执行 本条 指令
DJNZ R5,D1 ; R5 不等于 10 则转至 D1
RET ; 子程序 返回
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; 共阴显示段码表
END ; 程序 结束
第3个回答  2013-04-13
两位共阳数码管的单片机共阴数码管的单片机用AT89C51实验板的两位数码管显示00~99依次循环的汇编语言程序 a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
temp equ 22h ;计数器数值存放内存位置star: mov temp,#0 ;初始化计数器,从0开始
stlop: acall display;调用显示子程序
inc temp;对计数器加1
mov a,temp
cjne a,#100,next ;判断计数器是否满100?
mov temp,#0;满100就清零重新开始
next: ljmp stlop;不满就循环执行;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.7 ;开个位显示
acall d1ms ;显示162微秒
setb p2.7;关闭个位显示,防止鬼影
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.6 ;开十位显示
acall d1ms ;显示162微秒
setb p2.6;关闭十位显示,防止鬼影
djnz r1,dplop ;循环执行250次
djnz r0,dpl1 ;循环执行250X4=1000次
ret

;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#80
DJNZ R7,$
RET;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend;如果是共阳数码管的显示代码
numtab: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H

单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。 2、数码管段选表。 3、延时函数。 4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。 5、while(1) \/\/死循环效果{} 。 6、dk = 1;\/\/打开段选,P0 = leddata[i];,dk = 0;\/\/关闭段选,delay(100);\/\/延时效果。 7...

单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。2、数码管段选表。3、延时函数。4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。5、while(1) \/\/死循环效果{} 。6、dk = 1;\/\/打开段选,P0 = leddata[i];,dk = 0;\/\/关闭段选,delay(100);\/\/延时效...

单片机用汇编写两个数码管显示0到99循环的程序
要实现单片机用汇编语言编写的数码管循环显示0到99的程序,首先,你需要创建一个新的项目并做好初始化准备工作。接着,创建一个数码管段选表,它将决定每个数码管的显示模式。延时函数在此过程中也至关重要,以控制数码管的刷新速度。定义一个名为i的uchar变量,初始化一个名为wk的标志位,用于控制数...

单片机用汇编写两个数码管显示0到99循环的程序
在进行单片机汇编编程时,要实现一个0到99循环显示在两个数码管上的程序,首先需要进行以下步骤:1. 新建一个项目,确保硬件环境和开发工具准备就绪。2. 为数码管设置段选表,根据数码管的段码定义一组映射关系,便于控制每个数码管的显示字符。3. 实现延时函数,以确保字符的稳定显示,通常通过定时器或...

单片机用汇编写两个数码管显示0到99循环的程序
程序 起始地址 MAIN:MOV SP,#5FH ;设置 堆栈 起始地址 MOV DPTR,#TABLE ;数据指针 = TABLE(为显示码 数据表地址)MOV R0,#0 ;R0 = 0 MOV R1,#0 ;R1 = 0 MOV R2,#200 ;R2 = 200 B1:LCALL S2 ;调用 子程序 S2 LCALL S1 ;调用 子程序 S1 DJNZ R2,B1 ;R2 不等于 0 则转至 ...

用单片机AT89C51驱动两位数码管显示00--99依次循环程序代码
以下是用单片机AT89C51驱动两位数码管显示00--99循环的程序代码片段:程序开始于0000h地址,通过计数器temp(22h)控制数码管从00到99的循环显示。计数器初始化为0,然后调用子程序display进行显示。每当计数器加1并判断是否达到100后,若未满则返回stlop继续循环,满100则清零重新开始。display子程序中,先...

求用单片机驱动数码二级管的C语言程序,要求二级管显示00~99_百度知 ...
两位数码管显示00~99,无需采用数码管扫描,通常采用静态显示。给你提供一个两位数码管00~99循环加法计数的CC语言程序。程序中,采用了软件延时的方法,每半秒自动加1。include<reg52.h> unsigned char count=0;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,...

...怎么用单片机使2位数码管动态显示00---99? P1口接1个二位数码管 P3...
if(n==99){ n=0;} flag=0;} } void xianshi(){ unsigned char i,weixuan;weixuan=0x80;for(i=0;i<6;i++){ P2=weixuan;P3=tab[buffer[i]];delay(0);weixuan>>=1;} } void main(){ TMOD=0X01;TH0=(65535-50000)\/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;n=0...

数码管俩位显示0到99加中断程序
num=0;TMOD=0x01;\/\/采用定时器中断 TH0=(65536-50000)\/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;} void dispaly(uchar num)\/\/显示子程序 { uchar a,b;a=num\/10;b=num%10;p1=0;p2=1;P1=table[a];delay(3);p1=1;p2=0;P1=table[b];delay(3);} void delay(uint z)...

求汇编51单片机接两个数码管从00显示到99,外部中断0接一开关用于复位...
MOVP2,#0FDH;开启位码=十位 MOVP0,A;送个位数据 CALLDELAY;RET ;采用定时器每秒数码管加1 TIME:PUSHPSW;状态寄存器压入堆栈 PUSHACC;累加器A压入堆栈 MOVTH0,#3CH;重装50MS定时器初值 MOVTL0,#0B0H;INCCOUNT;50MS时间到寄存器加1 MOVA,COUNT;送入A中 CJNEA,#20,UENRET;比较不等于20,...

相似回答