具体要求:
控制P0口的8个LED发光管可实现先右移,P7口灯亮后再全亮,接着再全灭,再从P7右开始向左移,到P0口后灯亮完后,再全亮,接着再全灭,最后跳到程序开始时依此循环………
具体要求:
控制P0口的8个LED发光管可实现先右移,P7口灯亮后再全亮,接着再全灭,再从P7右开始向左移,到P0口后灯亮完后,再全亮,接着再全灭,最后跳到程序开始时依此循环………
ORG 0000H
LJMP MAIN;跳到主程序
ORG 0030H;主程序起始地址
MAIN:MOV A,#0FEH;给A一个值,等下通过A把值给P0口,FE就是只有第一位是低电平
RIGHT:MOV P0,A;点亮了第一个灯
LCALL DALAY;多少时间移位一次
RL A;A左移一位,这个就是你所说的向右移一位的意思
JNB P0.7 ALLON;当P0.7亮时,跳到全亮程序
LJMP RIGHT;跳到右移程序
ALLON:MOV P0,#00H;灯全亮
LCALL DALAY;多少时间后灭
ALLOFF:MOV P0,#0FFH;灯全灭
LCALL DALAY;多少时间后开始左移位
MOV A, #07FH;给A一个值,等下通过A把值给P0口,7F就是只有最后一位是低电平
LEFT:MOV P0,A;点亮了最后一个灯
LCALL DALAY;多少时间移位一次
RR A;A右移一位,这个就是你所说的向左移一位的意思
JNB P0.0 ALLON1;当P0.0亮时,跳到全亮程序
LJMP LEFT;跳到左移程序
ALLON1:MOV P0,#00H;灯全亮
ALLOFF1:MOV P0,#0FFH;灯全灭
LJMP MAIN;程序开始时依此循环
END
DELAY:MOV R6,#250;这个是延迟子程序,就是多少时间移位一次
D2: MOV R7,#250
D1: DJNZ R7,D1
DJNZ R6,D2
RET
单片机编程一般都是用C语言的!
#include<reg52.h> //52单片机头文件 #include <intrins.h> //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() //主函数 { uchar a,i,j; while(1) //大循环 { for(j=0;j<2;j++) { a=0xfe; //赋初值 for(i=0;i<8;i++) //左移 { P0=a; //点亮小灯 delay(200); //延时200毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f; for(i=0;i<8;i++) //右移 { P0=a; //点亮小灯 delay(200); //延时200毫秒 a=_cror_(a,1); //将a变量循环右移一位 } } a=0xff; //全部熄灭 for(j=0;j<10;j++) { delay(300); //延时 P0=~P0; //全部取反10次,既闪烁5次 } } }