广告灯左移右移的单片机程序

如题所述

八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环,晶振12M: 这是汇编: ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 当然,还可以用C语言来编写: #include <reg52.h> #include <intrins.h>//包含位移函数 #define uint unsigned int #define uchar unsigned char uchar temp,i; //数据类型unsigned char为8位 void delay(uint); void main() { temp=0xfe; P1=temp; while(1) { for(i=0;i<8;i++) { temp=_cror_(temp,1); //右移一位 delay(800); //设置延时的时间 P1=temp; } for(i=0;i<8;i++) { temp=_crol_(temp,1); //左移一位 delay(800); //设置延时的时间 P1=temp; } } } void delay(uint z) //延时程序 { uint y; for(;z>0;z--) for(y=248;y>0;y--) ; }
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-23
ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV P0,#0FEH;第一个亮(广告灯接在P0口的,其它口也可以,自已改) MOV A,P0 RL A ;左移 LCALL DELAY;这是隔多少时间移位一次 MOV P0,A JB P0.7 MAIN RIGHT:RR A ;右移 MOV P0,A LCALL DELAY JNB P0.0 MAIN LJMP RIGHT END 我也不是很熟,也是刚学