c代码如下:
#include<reg51.h>
#include<intrins.h>
//包含循环左移函数
_cro_l头文件
unsigned
char
tmp
//中间变量
//////////////////////////////////////////////////////////////////////////////////////////////////
//
延时子程序
////////////////////////////////////////////////////////////////////////////////////////////////
void
delay(unsigned
int
cnt)
{
while(--cnt)
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
主函数
////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
while(1)
//外层循环
{
tmp
=
0xfe
p1
=
tmp
while(1)
//内层循环,执行1、3、5、7亮灯循环
{
delay(30000)
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2)
p1
=
tmp
if(tmp
==
0xbf)
//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环
{
break
}
}
tmp
=
0xfd
p1
=
tmp
while(1)
//内层循环,执行2、4、6、8亮灯循环
{
delay(30000)
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2)
p1
=
tmp
if(tmp
==
0x7f)
//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环
{
break
}
}
}
}
低电平点亮START:MOV R0,#8
MOV R1,#8
SETB C
MOV A,#0FEH
MOV P1,A
S1:RLC A
CALL DELAY
MOV P1,A
DJNZ R0,S1
SETB C
MOV A,#0FEH
MOV P2,A
S2:RLC A
CALL DELAY
MOV P2,A
DJNZ R1,S2
AJMP START
DELAY:MOV R5,#0FFH //改变值变延时时间
LOOP2: MOV R4,#0FFH//改变值变延时时间
LOOP1:DJNZ R4,LOOP1
DJNZ R5,LOOP2
RET
END
#include "reg51.h"unsigned char led[]={0xfe,0xfd,0xfb,0xf7} //LED灯的花样数据
void delay(unsigned char time){//延时函数
unsigned int j=15000
for(time>0time--)
for(j>0j--)
}
void main(){
bit dir=0,run=0 //标志位定义及初始化
char i
while(1){
switch (P0 &0x0f){ //读取键值
case 0x0e:run=1break //K1动作,设run=1
case 0x0d:run=0,dir=0break // K2动作,设run=dir=0
case 0x0b:dir=1break //K3动作,设dir=1
case 0x07:dir=0break //K4动作,设dir=0
}
if (run)//若run=dir=1,自上而下流动
if(dir)
for(i=0i<=3i++){
P2=led[i]
delay(200)
}
else
for(i=3i>=0i--){ //run=1,dir=0,自下而上流动
P2=led[i]
delay(200)
}
else P2=0xff //若run=0,全部灯灭
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)