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

作者&投稿:笃忠 (若有异议请与网页底部的电邮联系)
~ 从网上见过一个:
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
;
程序
结束

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个
数码管没别的东西,就干脆做个静态的咯。怎么也闪烁不了的


汇编语言里 sub是 什么功能?
3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。汇编语言里*是什么意思 汇编语言中ROW可能表示液晶显示器或者点阵LED或者矩阵键盘灯的“行”。隐藏错误警告 汇编语言中的“#”代表的是寻址方式为立即寻址。 比如指令: MOV A,#21H MOV意思是单片机片内RAM之间传送,该指令的意思是:将值21H...

用汇编语言调节电机速度,用占空比调速,请给我个程序(汇编的)谢谢啦!
ORG 00H AJMP GO ORG 0BH AJMP TIME0_1 ORG 30H GO:MOV SP,#60H MOV TMOD,#01H MOV TH0,#0B0H MOV TL0,#3CH;50MS MOV R5,#5;中断间隔计次 MOV R6,#2;2中断为100MS MOV R7,#0;取表序号数 LOOP:MOV DPTR,#TAB MOV A,R7 MOVC A,@A+DPTR MOV P3,A AJMP LOOP TIME0_1...

单片机中调整指令:DA A是什么意思
这是用汇编写程序,计算十进制时常用的指令,是十进制调整指令。例,计算15+16,而且是用BCD码示时,是0001 0101 + 0001 0110 计算和为:0010 1011,是2BH,并不是31,这时就可以用DA A指令进行整调,就变成 0011 0001 ,这就是31的BCD码了。DA A指令,只对加法计算结果有调整作用。

如何用汇编写LED显示屏的读程序?
由于刷新频率的限制,一片单片机能控制显示元件的片数是较少的。现在大屏幕LED显示屏的应用已越来越广泛。为了对成百、上千片的LED点阵片实现有序的、快速的显示控制,人们动了许多脑筋,双双RAM的方案,FPGA的方案等都获得了成功的应用。但是这些方案的显示控制过程还是先读后写。本方案另开思路:用一...

请问用c语言怎么实现把一个数放到指定的地址里就像汇编语言那样
请问用c语言怎么实现把一个数放到指定的地址里就像汇编语言那样 MOVDPTR,#0030HMOVA,#31MOVX@DPTR,A好比这段程序,用c语言应该怎么写呢?... MOV DPTR,#0030H MOV A,#31MOVX @DPTR,A 好比这段程序,用c语言应该怎么写呢? 展开  我来答

pic单片机怎么用户汇编语言实现位取反?
COMF F,d ;这条语句中“F”是寄存器的名称,当“d=1”时,结果存入“F”,当“d=0”时,结果存入“W”。这个“W”书面解释是工作寄存器。可理解为过渡寄存器或临时寄存器,做中转数据用。2、在汇编语言中要实现位取反,可通过位状态检测判断来对位进行“置1”或“清零”,详见以下程序。...

什么是机器语言,汇编语言和高级语言
汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。高级语言相对于机器语言,是一种指令集的体系。这种指令集,称机器码(machine code...

用汇编语言编制一个 将内存BUFA单元存放的8个数字传送到BUFB单元中...
使用MOVS指令,复制内存单元。DS:SI指向源,ES:DI指向目标 例:DATA SEGMENT BUFA db 'abcdefgh',0DH,0AH,'$'BUFB db 8 dup(?),0DH,0AH,'$'DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,8 MOV SI,OFFSE...

求解51单片机I2C对24c02读写汇编程序
BUF EQU 30H ;数据缓存区 ;ORG 0 JMP Reset ORG 100H Reset:CALL AT24C04_WritePage ;写一页数据 CALL Delay5ms ;写一页数据需延时5ms CALL AT24C04_ReadPage ;读一页数据 JMP ;;向AT24C04写1页(16字节)数据 ;将TESTDATA开始的16个测试数据写如设备的00~0F地址中 ;入口参数:无...

你好,我想请问下我是一个单片机汇编程序初学者,应该怎样去学习呢,有什...
至于仿真软件我建议用protues,专用的单片机仿真软件。如果是自学,那么不懂的地方可以上网收索或者上论坛询问,这里有个单片机的QQ群,是官方建的你可以加上一起学习讨论群号是:7344883 还有在了解指令的同时你要了解你的板子的结构亦即电路连接才能写好你的程序。当你学到一定程度的时候你可以学习一下...

玉树县18779777248: 单片机求助,用汇编语言写一个双位数码管0到99循环 -
石严芙格: 一个数码管显示0005~01秒,再换另一个显示,他俩轮流这么显示着(再多几个也可以),这种交替人眼看不出来的单片机求助,用汇编语言写一个双位数码管0到99循环

玉树县18779777248: AT89S51单片机怎么用汇编语言让数码管从0到9显示 -
石严芙格: START:MOV R5,#00H ;次数计数单元R5,后面的程序应该看得懂了,都是教科书式的 MAIN: MOV A,R5 MOV DPTR,#TAB MOV A,@A+DPTR LCALL DISPLAY CJNE,R5,#10,START ;次数到,从头再来 LJMP MAIN DISPLAY: ;数码管显示...

玉树县18779777248: 用完整的汇编语言编写使数码管循环显示0,1,2,3,4,5,6,7,8,9的程序 -
石严芙格:程序如下: /********************************** 用P0口输出到数码管显示0-9 编写:jzy23 交流:paulucy@126.com *********************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char /*********************** 共阴...

玉树县18779777248: 51单片机,如何编写显示数码管00到99,可用电脑键盘(串行口)暂停,继续的程序(用汇编语言) -
石严芙格: MOV 31H,#00H MOV 32H,#00H MOV 33H,#01H MOV 34H,#06H MOV 35H,#03H MOV 36H,#02H ACALL D0 JMP $-2D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TABD1: ORL P1,#00111111B MOV A,@R0 MOVC A,@A+DPTR ...

玉树县18779777248: 求:8字数码管动态显示0到99的汇编程序 -
石严芙格: 写那么长干嘛,p1口接数码管扫描.p0口接8段字符显示,已测试正常. ORG 0000H STAER: MOV DPTR,#K1MOV 41H,#00HMOV 42H,#00HMOV R2,#0FFH A2: ACALL A1;调用显示子程序DJNZ R2,A2MOV R2,#0FFHINC 41HMOV ...

玉树县18779777248: 求单片机控制两个数码管显示0 - 9程序 -
石严芙格: /*模块低电平有效、外部中断0、1为低电平出发*/#include "reg52.h" void delay( char i) { unsigned char t; while(i--) { for(t=0;t<108;t++); } } void INT0_ROUTING() interrupt 0//外部中断0子程序 { P0=0xfe;//LED0点亮 while((P3|0xfb)==0xff);//等待外部...

玉树县18779777248: 用单片机控制2位数码管,不用锁存器能显示动态扫描码?比如说从0到99.如果能程序怎么写? -
石严芙格: char code duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} char i,j,x; int y; yanshi(char shu) {while(shu--)for(x=0;x<110;x++); } void main() {y=30000;while(y--){for(i=0;i<9;i++){p21=1;//如果你用的数码管是共阳极的话.就置1...

玉树县18779777248: 51单片机汇编语言1位数码管显示0,1,2,……到9再从9,8,7……到0,反复显示. -
石严芙格: 反复循环是一个作法,0到9循环结束后再做9到0的循环,0到9时用INC加法,9到0用DEC减法就行了,分开做两个循环,先加后减,两个循环结束,再回到0到9实现大循环就好了.很容易的呀,既然会0到9的循环,自己都能做出来,那其它的也能做出来吗,自己独立完成是最好的煅炼了,不能什么事都靠别人,那样是不会提高进步的.

玉树县18779777248: 求用51单片机接两个数码管,0 - 99动态显示程序(用C语言) -
石严芙格: #include #define uchar unsigned char #define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; void delay(uint x) { uchar i; while(x--)for(i=0;i<120;i++); } void main() { uchar i; P0 = 0x00; P2 = 0x00; while(1)...

玉树县18779777248: 怎么用单片机汇编语言数码管静态显示1234?? -
石严芙格: 这是四位数码管,是动态扫描显示电路,不叫静态显示电路. 但,确实可以显示出1234,那也是动态扫描显示的结果,与静态显示是不同的. 汇编语言写程序有点费劲哪,有偿代写.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网