01.4LED-流水灯

1. 

#include<stc15.h>

unsigned int i=0;

sbit LED1=P0^0;//定义特殊功能寄存器的位变量
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
void main(void)
{
   P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
    while(1)
    {
        LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
        LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
		LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
		LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
	    LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
		LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;
        for(i=0;i<65535;i++);
		LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;
        for(i=0;i<65535;i++);
		LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;
        for(i=0;i<65535;i++);
    } 
}

2.毫秒延迟子函数:

加上宏定义的使用

#include<stc15.h>
//#define DT 500    宏定义,但是在执行过程中不可更改时间

unsigned int DT = 500;
unsigned char Num=0;//可以让程序在运行中更改DT的值

unsigned int i=0;
sfr LED=0X80;
void IO_Init(void);
void Delay_MS(unsigned int MS);
void main(void)
{
	void IO_Init(void);
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
	while(1)
	{
		LED=0XFE;    // 1111 1110
		Delay_MS(DT);
		LED=0XFD;    // 1111 1101
		Delay_MS(DT);
		LED=0XFB;    // 1111 1011
		Delay_MS(DT);
		LED=0XF7;    // 1111 0111
		Delay_MS(DT);
		LED=0XEF;    // 1110 1111
		Delay_MS(DT);
		LED=0XDF;    // 1101 1111
		Delay_MS(DT);
		LED=0XBF;    // 1011 1111
		Delay_MS(DT);
		LED=0X7F;    // 0111 1111
		Delay_MS(DT);
		if(++Num==200)//每运行200次,则DT-50,闪烁将变快
		{
			Num=0;
			DT=DT-100;
		}
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned int i,j;
	for(i=0;i<MS;i++)
	{
		for(j=853;j>0;j--);
	}
}
/*void IO_Init(void)
	{
	P0M0 = 0x00; 	P0M1 = 0x00; 			//IO初始化为准双向I/O模式,STC15F系列可以写
	P1M0 = 0x00; 	P1M1 = 0x00;			//IO初始化为准双向I/O模式,STC15F系列可不写
	P2M0 = 0x00; 	P2M1 = 0x00;			//IO初始化为准双向I/O模式,STC15F系列可不写
	P3M0 = 0x00; 	P3M1 = 0x00;			//IO初始化为准双向I/O模式,STC15F系列可不写
	P4M0 = 0x00; 	P4M1 = 0x00;			//IO初始化为准双向I/O模式,STC15F系列可不写
	P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; P4=0XFF; P5=0XFF; //P0、P1、P2、P3、P4、P5输出为高电平	 STC15系列单片机可不写
}
*/

3.并口移位控制的方式:

移位取反:

for(i=0;i<8;i++)
        {
            LED=~(0X01<<i);
            Delay_MS(DT);
        }

#include<stc15.h>
//#define DT 500    宏定义,但是在执行过程中不可更改时间

unsigned int DT = 500;
unsigned int LED=0;


void Delay_MS(unsigned int MS);
void main(void)
{

	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
	while(1)
	{
		for(LED=0;LED<8;LED++)
		{
       		P0=~(0X01<<LED);//移位取反,当i=0时,即0000 0001向左移0个位置,后取反为1111 1110
                            //依次类推,左移一位后面补0
                    
			Delay_MS(DT);
		}
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned int i,j;
	for(i=0;i<MS;i++)
	{
		for(j=853;j>0;j--);
	}
}

4.并口循环移位控制方式:

LED=_crol_(LED,1);

#include<stc15.h>
#include<intrins.h>	//支持循环移位函数使用的头文件
unsigned int DT=300;
unsigned char LED=0XFE; //只要小于255,就可以使用char, int也可以使用
void Delay_MS(unsigned int MS);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序
	while(1)
	{
		P0=LED;
		Delay_MS(DT);
		LED=_crol_(LED,1);//  1111 1110循环移位,向左移一位,移出来的补在最后面
		
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned int i,j;
	for(i=0;i<MS;i++)
	{
		for(j=853;j>0;j--);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值