蓝桥杯单片机LED课后题

  1. 第一个LED灯以间隔200ms闪烁
    #include <STC15F2K60S2.H>
    
    void LiuShuiDeng();
    
    void Delayms (int ms);
    
    void main (void)
    {
    	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序 
    	
    	LiuShuiDeng();
    	
    }
    
    void LiuShuiDeng()
    {
    	unsigned char LED=0;
    	
    	while(1)
    	{
    		P0=~(0X01<<LED) ;
    		Delayms(1000);
    		LED++;
    		if(LED==8)LED=0;
    	}
    }
    
    
    void Delayms(int ms)
    {
    	int i,j;
    	
    	for(i = 0; i<ms;i++)
    		for(j = 843;j>0;j--);
    }

  2. 8个LED灯由左至右间隔1流动,其中每个灯亮500ms,灭500ms

    #include<STC15F2K60S2.H>
    
    unsigned int i;
    
    void Delayms(int ms);
    
    void main(void)
    {
    	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序 
    		while(1)
    		{
    			P00=0;
    			Delayms(500);
    			P00=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P01=0;
    			Delayms(500);
    			P01=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P02=0;
    			Delayms(500);
    			P02=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P03=0;
    			Delayms(500);
    			P03=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P04=0;
    			Delayms(500);
    			P04=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P05=0;
    			Delayms(500);
    			P05=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P06=0;
    			Delayms(500);
    			P06=1;
    			Delayms(500);
    			Delayms(1000);
    			
    			P07=0;
    			Delayms(500);
    			P07=1;
    			Delayms(500);
    			Delayms(1000);
    			
    		}
    
    	
    	while(1);
    }
    
    void Delayms(int ms)
    {
    	int i,j;
    	
    	for(i = 0; i<ms;i++)
    		for(j = 843;j>0;j--);
    }

  3. 8个IED灯间隔200ms由左至右,再由右至左,再重复一遍,然后全部熄灭再以300ms间隔全部闪烁5次,然后重复整个过程
    #include <STC15F2K60S2.H>
    
    void LiuShuiDengZ();
    void LiuShuiDengF();
    
    void Delayms (int ms);
    
    void main (void)
    {
    	unsigned int i=0;
    	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序 
    	
    	LiuShuiDengZ();
    	LiuShuiDengF();
    	LiuShuiDengZ();
    	LiuShuiDengF();
    	P0=0XFF;
    	Delayms(300);
    	for(i=0;i<5;i++)
    	{
    		P0=0x00;
    		Delayms(300);
    		P0=0XFF;
    		Delayms(300);
    	}
    }
    
    void LiuShuiDengZ()
    {
    	unsigned char LED=0;
    	
    	while(1)
    	{
    		P0=~(0X01<<LED) ;
    		Delayms(200);
    		LED++;
    		if(LED==8)break;
    	}
    }
    
    void LiuShuiDengF()
    {
    	unsigned char LED=8;
    	unsigned char cnt=0;
    	
    	while(1)
    	{
    		P0=~(0X80>>cnt) ;
    		Delayms(200);
    		cnt++; 
    		LED--;
    		if(LED==0)break;
    	}
    }
    
    
    void Delayms(int ms)
    {
    	int i,j;
    	
    	for(i = 0; i<ms;i++)
    		for(j = 843;j>0;j--);
    }

  4. 间隔300ms第一次一个灯亮流动一次,第二次两个灯亮流动,依次到8个灯亮,然后重复整个过程
    #include <STC15F2K60S2.H>
    
    unsigned int k=0;
    void LiuShuiDeng();
    void Delayms (int ms);
    
    void main (void)
    {
    	unsigned char LED=0;
    	
    	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序 
    	
    	for(k=0;k<8;k++)
    	{
    		P0=~(0X01<<LED);
    		Delayms(1000);
    		LeiShuiDeng();
    		LED++;
    	}
    }
    
    void LiuShuiDeng()
    {
    	unsigned char LED_RUN=0;
    	while(1)
    	{
    		P0=~(0X01<<LED_RUN) ;
    		Delayms(300);
    		LED_RUN++;
    		if(LED_RUN==8) break;
    	}
    }
    
    
    void Delayms(int ms)
    {
    	int i,j;
    	
    	for(i = 0; i<ms;i++)
    		for(j = 843;j>0;j--);
    }

  5. 间隔300ms先奇数亮再偶数亮,循环三次;一个灯左右循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭所有LED灯,程序停止
    #include <STC15F2K60S2.H>
    
    unsigned char LED=0;
    unsigned int k=0;
    void LiuShuiDengJO(void);
    void LiuShuiDengZ(void);
    void LiuShuiDengF(void);
    void LiuShuiDengMiddle(void);
    void LiuShuiDengSide(void);
    void LiuShuiDengFlash(void);
    void Delayms (int ms);
    
    void main (void)
    {
    	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//初始化程序 
    	LiuShuiDengJO();
    	for(k=0;k<3;k++)
    	{
    		LiuShuiDengZ();
    		LiuShuiDengF();		
    	}
    	LiuShuiDengMiddle();
    	LiuShuiDengSide();
    	LiuShuiDengFlash();
    	
    	while(1);
    }
    
    void LiuShuiDengJO(void)
    {
    	
    	for(k=0;k<3;k++)
    	{
    		LED=0;
    		while(1)
    		{
    			P0=~(0X01<<LED);
    			Delayms(300);
    			LED+=2;
    			if(LED>6) break;
    		}
    		
    		if(LED>6)
    		{
    			LED=1;
    			while(1)
    			{
    				
    				P0=~(0X01<<LED);
    				Delayms(300);
    				LED+=2;
    				if(LED>7) break;
    			}
    		}
    	}
    }
    
    void LiuShuiDengZ(void)
    {
    	LED=0;
    	while(1)
    	{
    		P0=~(0X01<<LED) ;
    		Delayms(300);
    		LED++;
    		if(LED==8) break;
    	}
    }
    
    void LiuShuiDengF()
    {
    	unsigned char cnt=0;
    	LED=8;
    	
    	while(1)
    	{
    		P0=~(0X80>>cnt) ;
    		Delayms(300);
    		cnt++; 
    		LED--;
    		if(LED==0)break;
    	}
    }
    
    
    void LiuShuiDengMiddle(void)
    {
    	for(k=0;k<3;k++)
    	{
    		P0=~(0X81);
    		Delayms(300);
    		P0=~(0x42);
    		Delayms(300);
    		P0=~(0x24);
    		Delayms(300);
    		P0=~(0x18);
    		Delayms(300);
    	}
    }
    
    void LiuShuiDengSide(void)
    {
    	for(k=0;k<3;k++)
    	{
    		P0=0Xe7;
    		Delayms(300);
    		P0=0xdb;
    		Delayms(300);
    		P0=0xbd;
    		Delayms(300);
    		P0=0x7e;
    		Delayms(300);
    	}
    }
    
    void LiuShuiDengFlash(void)
    {
    	for(k=0;k<3;k++)
    	{
    		P0=0x00;
    		Delayms(300);
    		P0=0xff;
    		Delayms(300);
    	}
    }
    
    void Delayms(int ms)
    {
    	int i,j;
    	
    	for(i = 0; i<ms;i++)
    		for(j = 843;j>0;j--);
    }
    
    

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值