资源描述:
《几种流水灯程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、51单片机P1口控制8个LED灯要从P1.0到P1.7然后从P1.7到P1.0这样让LED灯来回流动ORG00HSTART:MOVA,#0FFHCLRCMOVR1,#8LEFT:;向左流动RLCAMOVP1,ACALLDELAYDJNZR1,LEFTMOVR2,#7RIGHT:;向右流动RRCAMOVP1,ACALLDELAYDJNZR2,RIGHTJMPSTARTDELAY:;延时200毫秒MOVR3,#20D1:MOVR4,#20D2:MOVR5,#248DJNZR5,$DJNZR4,D2D
2、JNZR3,D1RETEND或ORG0000HLJMPMAINORG0030HMAIN:MOVA,#0FEH;左移时(P1.0--P1.7)P1.0=0,低电平点亮MOVR3,#07H;移位次数LED_L:MOVP1,A;将移位结果赋给P1RLA;左移LCALLDELAYDJNZR3,LED_L;R3=0?不为0循环,否则顺序执行MOVR3,#07H;为下次循环次数重新赋值;以下为右移代码,注释同上MOVA,#7FHMOVR4,#07HLED_R:MOVP1,ARRALCALLDELAYDJNZ
3、R4,LED_R;MOVR4,#07HSJMPLED_R//延时子程序12M晶振1SDELAY:MOVR0,#100DEL2:MOVR1,#10DEL1:MOVR2,#124NOPDEL0:NOPNOPDJNZR2,DEL0DJNZR1,DEL1DJNZR0,DEL2RETENDP1口控制8个LED灯要从P1.0到P1.7然后从P1.7到P1.0这样让LED灯来回流动5只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。;用最直接的方式实现流水灯ORG0000HSTART:MOVP1,
4、#01111111B;最下面的LED点亮LCALLDELAY;延时60秒LCALLDELAY;延时60秒MOVP1,#10111111B;最下面第二个的LED点亮LCALLDELAY;延时60秒LCALLDELAY;延时60秒MOVP1,#11011111B;最下面第三个的LED点亮(以下省略)LCALLDELAYLCALLDELAY;延时60秒MOVP1,#11101111BLCALLDELAYLCALLDELAY;延时60秒MOVP1,#11110111BLCALLDELAYLCALLDEL
5、AY;延时60秒MOVP1,#11111011BLCALLDELAY;延时60秒LCALLDELAY;延时60秒LCALLDELAY;延时60秒LCALLDELAY;延时60秒LCALLDELAY;完成第一次循环点亮,延时约0.25秒AJMPSTART;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:;大约值:2us*256*256*2=260ms,也可以认为为250msPUSHPSW;现场保护指令(有时可以不加)MOVR4,#240L3:MOVR2,#00HL1:MOVR3,#00
6、HL2:DJNZR3,L2;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)DJNZR2,L1;中层循环:256次DJNZR4,L3;外层循环:240次POPPSWRETEND随便改了一个1357亮。2468不亮。中间间隔一个灯main:movP1,#0aahacalldelaymovP1,#55Hacalldelaysjmpmaindelay:movr7,#0ffhde:movr6,#0ffhdjnzr6,$djnzr7,deretend开发板上的8只LED为共阳极连接
7、,即单片机输出端为低电平时即可点亮LED。程序A:;用最直接的方式实现流水灯ORG0000HSTART:MOVP1,#01111111B ;最下面的LED点亮LCALLDELAY;延时1秒MOVP1,#10111111B ;最下面第二个的LED点亮LCALLDELAY;延时1秒MOVP1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALLDELAYMOVP1,#11101111BLCALLDELAYMOVP1,#11110
8、111BLCALLDELAYMOVP1,#11111011BLCALLDELAYMOVP1,#11111101BLCALLDELAYMOVP1,#11111110BLCALLDELAYMOVP1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMPSTART ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOVR4,#2L3:MOVR2,#250L1:MOVR3,#250L2:DJNZR3,L2DJNZ