求这道数码管单片机程序的每一步含义

数码管显示0-9ORG 0000H
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H
LJMP MAIN
ORG 0030H
MAIN:MOV P3,#0F0H
MOV DPTR,#TAB
MOV R7,#0
LOOP:MOV A,R7
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1S
INC R7
CJNE R7,#10,LOOP
MOV R7,#0
SJMP LOOP
DELAY1S:MOV MM0,#10
DELAY1S0:MOV MM1,#200
DELAY1S1:MOV MM2,#248
DJNZ MM2,$
NOP
DJNZ MM1,DELAY1S1
DJNZ MM0,DELAY1S0
RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

嘿嘿 还是俺来帮你回答吧
;数码管显示0-9
;用等价伪指令 EQU 将50H、51H、52H定义为3个软件计数器即MM0、MM1、MM3
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H
ORG 0000H ; 0000H 为单片机起始地址
LJMP MAIN ;跳转至主程序
ORG 0030H
MAIN:MOV P3,#0F0H ;主程序 P3口的高四位为1,第四位为0
MOV DPTR,#TAB ;数据指针指向TAB表的首地址
MOV R7,#0 ;偏移量初始值为0
LOOP:MOV A,R7
MOVC A,@A+DPTR ;将TAB表中的偏移量对应的数据 即要显示的数的显示编码送A
MOV P2,A ;送到P2口显示
LCALL DELAY1S ;调用延时程序 延时1秒钟
INC R7 ;偏移量加1 即要显示的数加1
CJNE R7,#10,LOOP ;0~9十个数没有显示完 则转继续LOOP继续显示
MOV R7,#0 ;10个数据显示完毕,重新进行偏移量初始化
SJMP LOOP//继续上述过程
DELAY1S:MOV MM0,#10 ;延时1秒子程序 外循环次数MM0为10
DELAY1S0:MOV MM1,#200 ;第一层内循环 循环次数MM1为200
DELAY1S1:MOV MM2,#248 ;第二层内循环 循环次数MM1为248
DJNZ MM2,$
NOP ;空操作 延时1微妙
DJNZ MM1,DELAY1S1 ;循环次数MM1 减1 不等于0 转DELAY1S1继续循环
DJNZ MM0,DELAY1S0 ;循环次数MM0 减1 不等于0 转DELAY1S2继续循环
RET ;子程序返回

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;按字节定义0~9的显示编码

END ;汇编结束
呵呵 满意就给加分阿
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-19
数码管显示0-9ORG 0000H //定义起始地址
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H//没什么具体意思,完全可以用其他寄存器代替,如R2,R4,R5;这样浪费内存
LJMP MAIN //跳转至主程序
ORG 0030H
MAIN:MOV P3,#0F0H //P3口的高四位为1,第四位为0
MOV DPTR,#TAB //指针指向TAB的首地址
MOV R7,#0 //偏移量
LOOP:MOV A,R7
MOVC A,@A+DPTR //将TAB表中的第个数据读入A寄存器
MOV P2,A //送到P2口显示
LCALL DELAY1S //调用延时程序
INC R7//偏移量加1
CJNE R7,#10,LOOP //TAB表中的10个数据未全送入P2口显示,则继续完成上述过程
MOV R7,#0//10个数据显示完毕,将计数器计数偏移量的R7清0
SJMP LOOP//继续上述过程
DELAY1S:MOV MM0,#10 //延时程序
DELAY1S0:MOV MM1,#200
DELAY1S1:MOV MM2,#248
DJNZ MM2,$
NOP
DJNZ MM1,DELAY1S1
DJNZ MM0,DELAY1S0
RET

求这道数码管单片机程序的每一步含义
;用等价伪指令 EQU 将50H、51H、52H定义为3个软件计数器即MM0、MM1、MM3 MM0 EQU 50H MM1 EQU 51H MM2 EQU 52H ORG 0000H ; 0000H 为单片机起始地址 LJMP MAIN ;跳转至主程序 ORG 0030H MAIN:MOV P3,#0F0H ;主程序 P3口的高四位为1,第四位为0 MOV DPTR,#TAB ;...

关于单片机数码管显示的程序。看不太懂,求大神帮忙分析一下每一步在
\/ 程序:void main() \/\/主函数 这一讲的主要内容: 按键检测主函数 功能描述: 按键检测主函数 输 入:输 出:全局变量:调用模块:作 者: 吴鉴鹰 日 期: 14.04.12 备注:有什么错误的地方,欢迎各大烧友指正,感谢电子发烧友提供这个平台能跟各大烧友一同分享,一同进步 O(∩_∩)...

求单片机C语言程序的解释
! 这个程序是一个按键显示程序,显示按下了多少次按键,最大显示99. P2.0和P2.1用作两个led数码管的片选,led数码管的数据线连接到P0口!P3.2接按键,按键按下为低电平。 P2=0xfe;及右面部分为显示程序,if语句为判断按键次数。 首先,程序进入死循环while(1),然后判断按键是否按下。如果...

51单片机中的程序,求大神解释!
是两个不完整的函数,一个用于显示,一个用于键扫描(有软件去抖动功能)。

关于单片机数码管的C语言代码,高分求详解,先谢过
一、LedNumVal%10000\/1000 是模,取余数的意思,%10000,得到的数最大是四位数。\/是整除的意思不带小数,如8\/3=2 一个小于10000的数,整除1000结果一定是0到9之间的一个数 二、Disp_Tab 以及LedOut,dispbit都是数组,根据相应的数可得到对应的字符数据,达到位选的功能。

单片机中数码管程序p2=0xef; p0=table[a]; delay(1);是啥意思
p2=0xef; \\\\开通这一位的数码管,让它把数字显示在P2_7的这位上P0=table[a];\\\\table是一个数组,里面应该是数码管的段码,这样就会就能在上面开通那位显示具体的数据。‘a'delay(1); \\\\延时作用,因为人眼对光的反应没有单片机运算那么快,如果不延时就会让眼睛看到数码多显。

单片机c程序不懂 如图是单只数码管循环显示0~9 i=(i+1)%10;是什么意思...
就是i+1然后除以10 得到余数,这样i就能在0~9一直循环了 当i=9的时候 再运行i+1,这样等于10,再余10 就能回到0.

单片机程序注释
2 该程序就是利用这个一位的7段数码管分时循环显示0~9、A~F共16个十六进制数码。3 在程序存储器存放的表格TAB: 是共阳极显示编码 应该是0~9、A~F共16个显示编码 可惜少了一半:现在给你补全:TAB:DB 0C0H, 0F9H, 0A4H,0B0H,99H,92H,82H,0F8H,DB 80H, 90H, 88H, 82H,...

单片机菜鸟问个小白问题 求解释 C语言程序的。
全局变量数组,8个元素,分别表示8个数码管分别显示什么。主程序部分一个循环,首先检测什么按键被按下,按了就给这个全局数组赋值 检测完了之后是显示的代码。我只操作过2位数码管,8位光靠扫描不确定能不能显示得稳定(不闪烁),这个只能靠你了,反正是显示,显示的代码就是从我刚刚说的全局数组读...

如何理解这段单片机程序. 各位大侠,请解释一下。我搞不明白,为什么会这 ...
++c的意思就是c先自加1然后再进行运算,你的程序中,刚开始程序是不执行if语句里面的这些语句的 但是c要先加一然后再判断是不是比300大,知道第三百次到了,c值就变成300了,if语句的条件就满足,这时候才执行{ LedNumVal++ ; \/\/每隔300个扫描周期加一次 C =0; \/\/每隔300个扫描清零 }...

相似回答
大家正在搜