STC15W4K32S4单片机
指示灯系列
任务五
八路发光二极管轮流点亮
参考代码
#include<stc15.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void Delay1ms()
{
unsigned char i,j;
_nop_();
_nop_();
_nop_();//空操作
i=11;
j=190;
do
{
while (--j);
} while(--i);
}
void delay(uint x)//延时函数
{
uint i;
for(i=0;i<x;i++)
{
Delay1ms();//调用Delay1ms
}
}
void main(void)//主函数
{
int a;
int b;
P2M0=0;P2M1=0;
P0M0=0;P0M1=0;
P27=0;
while(1)
{
P0=0xfe;
delay(1000);
for(a=0;a<7;a++)//轮流点亮
{
P0=(P0<<1)|0x00;
delay(1000);
}
P0=0x80;
delay(1000);
for(b=0;b<7;b++)//轮流熄灭
{
P0=(P0>>1)|0x80;
delay(1000);
}
}
}
#include<stc15.h>
void delay(unsigned int i)//延时函数
{
while(i--);
}
void main(void)//主函数
{
int a;
int b;
P2M0=0;P2M1=0;
P0M0=0;P0M1=0;
P27=0;
while(1)
{
P0=0xfe;
delay(50000);
for(a=0;a<7;a++)//轮流点亮
{
P0=(P0<<1)|0x00;
delay(50000);
}
P0=0x80;
delay(50000);
for(b=0;b<7;b++)//轮流熄灭
{
P0=(P0>>1)|0x80;
delay(50000);
}
}
}
拓展训练:8路发光二极管间隔轮流点亮,即先0、2、4、6轮流点亮,再1、3、5、7轮流点亮。
#include<stc15.h>
void delay(unsigned int i)//延时函数
{
while(i--);
}
void main(void)//主函数
{
int a;
P2M0=0;P2M1=0;
P0M0=0;P0M1=0;
P27=0;
while(1)
{
for(a=0;a<8;a+=2)//先点亮0、2、4、6
{
P0=~(0x01<<a);//将0x01左移a位,然后取反,赋值给P0
delay(50000);
}
for(a=1;a<8;a+=2)//再点亮1、3、5、7
{
P0=~(0x01<<a);
delay(50000);
}
}
}
如果发现程序存在问题,欢迎留言指正。