|
程序A: ORG 0000H START:MOV P1,#01111111B ;最下面的LED點(diǎn)亮 LCALL DELAY MOV P1,#10111111B ;最下面第二個(gè)的LED點(diǎn)亮 LCALL DELAY MOV P1,#11011111B ;最下面第三個(gè)的LED點(diǎn)亮 (以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循環(huán)點(diǎn)亮,延時(shí)約0.25秒 AJMP START ;反復(fù)循環(huán) ;延時(shí)子程序,12M晶振延時(shí)約250毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 程序B: org 00h ;程序上電從00h開(kāi)始 ajmp main ;跳轉(zhuǎn)到主程序 org 0030h ;主程序起始地址 main: MOV a,#0feh ;給A賦值成11111110 loop: MOV p1,a ;將A送到P1口,發(fā)光二極管低電平點(diǎn)亮 lcall delay ;調(diào)用延時(shí)子程序 rl a ;累加器A循環(huán)左移一位 ajmp loop ;重新送P1顯示 delay: MOV r3,#20 ;最外層循環(huán)二十次 d1: MOV r4,#80 ;次外層循環(huán)八十次 d2: MOV r5,#250 ;最內(nèi)層循環(huán)250次 djnz r5,$ ;總共延時(shí)2us*250*80*20=0.8S djnz r4,d2 djnz r3,d1 ret end 程序C: #include<reg51.h> #include <intrins.h> void delayms(unsigned char ms) // 延時(shí)子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
main() { unsigned char LED; LED = 0xfe; P1 = LED; while(1) { delayms(200); LED = LED>>1; //循環(huán)右移1位,點(diǎn)亮下一個(gè)LED P1 = LED; } } |