单片机用汇编写两个数码管显示0到99循环的程序 编一个AT89C51单片机00 —99 秒的汇编程序,要求有...

\u5355\u7247\u673a\u6c42\u52a9\uff0c\u7528\u6c47\u7f16\u8bed\u8a00\u5199\u4e00\u4e2a\u53cc\u4f4d\u6570\u7801\u7ba10\u523099\u5faa\u73af\u663e\u793a\u7684\u7a0b\u5e8f\u3002\u4eff\u771f\u7528\u7684\u5171\u9633\u6781\u6570\u7801\u7ba1\u3002\u5982\u56fe\u3002

\u8fd9\u4e2a\u662f\u52a8\u6001\u663e\u793a\u7684\u2026\u867d\u7136\u6bb5\u7684\u7aef\u53e3\u90fd\u4e00\u6837\uff0c\u4f46\u4f4d\u4e0d\u4e00\u6837\uff0c\u7ecf\u8fc7\u8f6f\u4ef6\u63a7\u5236\u5c31\u53ef\u4ee5\u8fbe\u5230\u52a8\u6001\u663e\u793a\u7684\u6548\u679c\u4e86

;\u5229\u7528\u4e2d\u65ad\u768499\u79d2\u8ba1\u65f6\u5668 \uff0c\u52a8\u6001\u626b\u63cf\u4e24\u4f4d\u6570\u7801\u7ba1
;P0\u53e3\u63a5J3\uff0c\u6570\u636e\u7aef\u53e3
;P2.2\u63a5 J2 B\u7aef\u5b50\uff0c\u8868\u793a\u6bb5\u7801\u9501\u5b58
;P2.3\u63a5 J2 A\u7aef\u5b50\uff0c\u6807\u5fd7\u4f4d\u7801\u9501\u5b58
LATCH1 BIT P2.2
LATCH2 BIT P2.3
ORG 00H
JMP START
ORG 0BH
JMP TIM0
START:MOV R3,#00 ;\u4e2d\u65ad\u5faa\u73af\u6b21\u6570
MOV R4,#0 ;\u65f6\u95f4\u521d\u503c
MOV DPTR,#TABLE
MOV SP,#40H
MOV TMOD,#01H ;\u5b9a\u65f6\u5668\u5de5\u4f5c\u65b9\u5f0f
MOV TH0,#HIGH(65536-3800)
MOV TL0,#LOW(65536-3800) ;\u521d\u503c4MS
SETB TR0
MOV IE,#82H ;\u5f00\u4e2d\u65ad
TIM0:
MOV TH0,#HIGH(65536-3800)
MOV TL0,#LOW(65536-3800)
INC R3
CJNE R3,#250,X1 ;1S
MOV R3,#0

MOV A,R4 ;\u5341\u8fdb\u5236\u8f6c\u6362
MOV B,#10
DIV AB
MOV 20H,B ; \u4e2a\u4f4d
MOV 21H,A ; \u5341\u4f4d
INC R4
CJNE R4,#100,LEDSCAN ;\u5230100\u5219\u6e05\u96f6
MOV R4,#0
LEDSCAN: CALL SCAN ;\u8c03\u7528\u6570\u7801\u7ba1\u626b\u63cf
X1: PUSH ACC
PUSH PSW
CALL SCAN
POP PSW
POP ACC
RETI
SCAN:
MOV A,21H
MOVC A,@A+DPTR
MOV P0,A
SETB LATCH1
CLR LATCH1
MOV P0,#11111110B ;\u626b\u63cf\u5b50\u7a0b\u5e8f
SETB LATCH2
CLR LATCH2
CALL DELAY1
MOV A,20H
MOVC A,@A+DPTR
MOV P0,A
SETB LATCH1
CLR LATCH1
MOV P0,#11111101B ;0\u4ee3\u8868\u9009\u901a\u8be5\u4f4d\u6570\u7801\u7ba1
SETB LATCH2
CLR LATCH2
CALL DELAY1
RET
DELAY:MOV R5,#50 ;\u5178\u578b\u5ef6\u65f6\u7a0b\u5e8f
D1: MOV R6,#40
D2: MOV R7,#248
CALL SCAN
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
DELAY1:MOV R6,#4 ;\u626b\u63cf\u5ef6\u65f6
D3: MOV R7,#248
DJNZ R7,$
DJNZ R6,D3
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;\u5171\u9634\u5b57\u7801\u8868
END
\u662f\u7528\u52a8\u6001\u626b\u63cf\u7684\u65b9\u6cd5\u663e\u793a\u7684\uff0c\u7528\u4e862\u4e2a\u9501\u5b58\u5668\uff0c8\u4e2a\u6570\u7801\u7ba1\u7684\u3002
\u9644\u4e0a\u7535\u8def\u56fe

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值的循环范围。



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

从网上见过一个:
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 ; 程序 结束

两位共阳数码管的单片机共阴数码管的单片机用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

参考:

http://hi.baidu.com/do_sermon/item/629fcd582fac7317db16356f

  • 鍗曠墖鏈虹敤姹囩紪鍐欎袱涓暟鐮佺鏄剧ず0鍒99寰幆鐨勭▼搴
    绛旓細鍦ㄨ繘琛鍗曠墖鏈烘眹缂缂栫▼鏃讹紝瑕佸疄鐜颁竴涓0鍒99寰幆鏄剧ず鍦涓や釜鏁扮爜绠涓婄殑绋嬪簭锛岄鍏堥渶瑕佽繘琛屼互涓嬫楠わ細1. 鏂板缓涓涓」鐩紝纭繚纭欢鐜鍜屽紑鍙戝伐鍏峰噯澶囧氨缁2. 涓烘暟鐮佺璁剧疆娈甸夎〃锛屾牴鎹暟鐮佺鐨勬鐮佸畾涔変竴缁勬槧灏勫叧绯伙紝渚夸簬鎺у埗姣忎釜鏁扮爜绠鐨勬樉绀瀛楃銆3. 瀹炵幇寤舵椂鍑芥暟锛屼互纭繚瀛楃鐨勭ǔ瀹氭樉绀猴紝閫氬父閫氳繃瀹氭椂鍣ㄦ垨...
  • 鍗曠墖鏈虹敤姹囩紪鍐欎袱涓暟鐮佺鏄剧ず0鍒99寰幆鐨勭▼搴
    绛旓細3銆佸欢鏃跺嚱鏁般4銆乽char i; 鍙橀噺i锛泈k = 1;鎵撳紑浣嶉夛紝P0 = 0xf7;1111 0111绗4浣鏁扮爜绠℃樉绀锛寃k = 0;鍏抽棴浣嶉夈5銆亀hile(1) //姝诲惊鐜晥鏋渰} 銆6銆乨k = 1;//鎵撳紑娈甸夛紝P0 = leddata[i];锛宒k = 0;//鍏抽棴娈甸夛紝delay(100);//寤舵椂鏁堟灉銆7銆侀夋嫨鏁堟灉锛岄檺鍒秈鍊肩殑寰幆鑼冨洿銆
  • 鍗曠墖鏈虹敤姹囩紪鍐欎袱涓暟鐮佺鏄剧ず0鍒99寰幆鐨勭▼搴
    绛旓細= TABLE锛堜负鏄剧ず鐮 鏁版嵁琛ㄥ湴鍧锛塎OV 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 =
  • ...鏍锋墠鑳借绗竴涓暟鐮佺鏄剧ず2,绗浜屼釜鏁扮爜绠℃樉绀0鍛?
    绛旓細涓绉嶆槸鍔ㄦ佹壂鎻忥紝涓绉嶆槸闈欐佹樉绀猴紝闈欐鏄剧ず鐨绠鍗曪紝鐣ヨ繃...ORG 00H AJMP MAIN MAIN: MOV P1,#10H MOV P3,#09FH LCALL DELAY MOV P1,#20H MOV P3,#25H LCALL DELAY MOV P1,#40H MOV P3,#0DH LCALL DELAY MOV P1,#80H MOV P3,#99H LCALL DELAY AJMP MAIN ...
  • 51鍗曠墖鏈鎺у埗2涓暟鐮佺鍔ㄦ佸疄鐜0鍒99(C璇█)
    绛旓細void delay();void main(){ unsigned char i;int j;while(1){ for(i=0;j=100,i<100;++i)while(j--)show(i);} } void show(unsigned char n){ P0=table[n%10];P2=~0x01;delay();P2=0xFF;P0=table[n/10];P2=~0x02;delay();P2=0xFF;} void delay(){ int i=100;while...
  • 鍗曠墖鏈涔犻,鎸変笅鐭╅樀鎸夐挳鍚,鍦2涓暟鐮佺涓鏄剧ず鎸夐敭鍊0鍒15銆
    绛旓細ENLED = 0; //閫夋嫨鏁扮爜绠DS1杩涜鏄剧ず ADDR3 = 1;ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;TMOD = 0x01; //璁剧疆T0涓烘ā寮1 TH0 = 0xFC; //涓篢0璧嬪垵鍊0xFC67锛屽畾鏃1ms TL0 = 0x67;ET0 = 1; //浣胯兘T0涓柇 TR0 = 1; //鍚姩T0 P0 = LedChar[0]; //榛樿鏄...
  • 鍗曠墖鏈 涓や綅鏁扮爜绠℃樉绀,浣跨敤涓や綅鏁扮爜绠℃樉绀哄櫒,寰幆鏄剧ず涓や綅鏁0-99
    绛旓細;鍏遍槾鍔ㄦ鏄剧ず P0鎺ユ鎺э紝P1鎺ヤ綅鎺э紝P3鎺ユ寜閿緭鍏 ;P0鍙f帴閿洏鎵弿鎺ュ彛锛孭1鍙f帴鏁扮爜绠鎺ュ彛娈垫帶锛孭2鍙d綆鍥涗綅鎺ヤ綅鎺 ;DIR :MOV R0,#00H MOV DPTR,#TAB MOV R4,#100 DIR4:MOV R3,#0feH MOV R2锛,02H DIR1:CJNE R2锛#01,DIR2 MOV A,R0 MOV B,#0AH DIV AB SJMP DIR3 DIR2...
  • 鍗曠墖鏈烘眹缂璇█璁鏁扮爜绠℃樉绀0鍒9
    绛旓細1銆佸皬寤鸿锛岄噯鐢⊿TC鐨51鑺墖鏇夸唬AT鐨勶紝閲嗙敤595鏇夸唬164銆2銆佹柊寤洪」鐩紝鍋氬ソ鍑嗗銆傛暟鐮佺娈甸夎〃銆傚欢鏃跺嚱鏁般倁chari锛涘彉閲廼锛泈k=1锛涙墦寮浣嶉夛紝P0=0xf7锛11110111绗4浣鏁扮爜绠℃樉绀锛寃k=0锛涘叧闂綅閫夈倃hile(1)//姝诲惊鐜晥鏋渰}銆3銆佹暟鐮佺娈甸夎〃銆傚欢鏃跺嚱鏁般倁chari锛涘彉閲廼锛泈k=1锛涙墦寮浣嶉夛紝P0=0x...
  • 51鍗曠墖鏈轰袱涓闃虫瀬鏁扮爜绠℃樉绀24鍊掕鏃舵庝箞鏄剧ず00
    绛旓細1銆佸熀浜51鍗曠墖鏈鍏遍槾涓や綅鏁扮爜绠℃樉绀鍊掕鏃#includeunsigned char s=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char count,d1,d2,g,y;signed int time=10; void delay(unsigned char i);void sm()d1=time/10;d2=time%10;P1=sd1;P3=0x00;delay(2);P3=0x01;P1...
  • Protues 浠诲姟:89c51鍗曠墖鏈鎺у埗涓や釜鏁扮爜绠℃樉绀0~99(寤舵椂涓嶈澶煭)_鐧 ...
    绛旓細鏁扮爜绠℃樉绀鍘熺悊 鏁扮爜绠$畝浠嬬粍鎴愶細LED鏁扮爜绠$敱7娈垫垨8娈靛彂鍏変簩鏋佺缁勬垚锛屽湪骞抽潰涓婃帓鎴8瀛楀瀷銆傚垎绫伙細鏈夊叡闃存瀬鍜屽叡闃虫瀬涓ょ銆傛樉绀哄師鐞嗭細浣挎煇浜涙鐐逛寒鑰屽彟涓浜涙涓嶄寒灏卞彲浠鏄剧ず0---9锛孉---F绛夊瓧鍨嬨 浣挎煇娈电偣浜繀椤诲叿澶2涓鏉′欢锛氣憼 鍏遍槾鏋佺鐨勫叕鍏辩鎺ュ湴鍜屽叡闃虫瀬绠$殑鍏叡绔帴鐢垫簮銆傗憽 鍏遍槾鏋佺鐨勬帶鍒...
  • 扩展阅读:单片机数码管滚动显示 ... 七段数码管显示图 ... 八位数码管同时显示 ... 单片机实验数码管显示 ... 两个数码管显示00-59 ... 数码管0-f双向显示 ... 单片机数码管0-15显示 ... plc数码管0到9梯形图 ... 两个数码管显示00到99简单 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网