广告灯左移右移的单片机程序
- 提问者网友:你独家记忆
- 2021-04-13 03:32
- 五星知识达人网友:北城痞子
- 2021-04-13 04:19
八个发光二极管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楼网友:骨子里都是戏
- 2021-04-13 05:00
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
我也不是很熟,也是刚学