01_蓝桥杯_LED

**今年开学的时候才想起来自己报名了蓝桥杯,然后开始备赛,因为时间原因,自己只把往年初赛真题刷了一遍,准备不足吧 导致初赛ne555捕获功能没有实现,现在闲了 就分享自己的学习历程吧 **
很多程序是自己复制早点自己写的,并没有重新写一遍

  1. 点亮一个LED 闪烁
#include "stc15f2k60s2.h"
#include <intrins.h>
 void  buzz_init()
 {
  	P2=((P2&0X1F)|0Xa0);	//开锁存器
	P0=0x00;	//		//关闭蜂鸣器
	P2&=0x1f;
	
	P2=((P2&0X1F)|0X80);	//开锁存器
	P0=0xff;	//		//关闭led
	P2&=0x1f;
	
	P2=((P2&0X1F)|0Xc0);	//开锁存器
	P0=0xff;	//关闭数码管位选   共阳极
	P2&=0x1f;
		
	P2=((P2&0X1F)|0XE0); 
	P0=0XFF; //关闭数码管段选
	P2&=0X1F;	
 }
void Delay1ms(uint ms)		//@11.0592MHz
{
	unsigned char i, j,k;

	_nop_();
	_nop_();
	_nop_();
	for(i=0;i<11;i++)
		for(j=0;j<190;j++)
			for(k=0;k<ms;k++);
}
 
 void main()
{
while(1)
		{  
	P2=((P2&0X1F)|0X80);	P0=~(0x01);P2&=0x1f;
	Delay1ms(1000);
		 }
}

蓝桥杯led电路图

  1. 1. buzz_init():板子初始化,蓝桥杯板子如果不初始化,蜂鸣器会响,具体代码 后面讲解
    - void Delay1ms(uint ms):延时函数,延时ms毫秒,无返回值,入口参数:需要延时的毫秒数
    - 电路:如图,led共阳极,想让那个LED亮 则需要在相关io(PO口)赋值为低电平 P0= ~(0x01); -> P0=~(0000 0001 ) ->P0= 1111 1110
  2. 2.流水灯
	
#include "stc15f2k60s2.h"
#include <intrins.h>
char  i=0;

 void  buzz_init()
 {
  	P2=((P2&0X1F)|0Xa0);	//开锁存器
	P0=0x00;	//		//关闭蜂鸣器
	P2&=0x1f;
	
	P2=((P2&0X1F)|0X80);	//开锁存器
	P0=0xff;	//		//关闭led
	P2&=0x1f;
	
	P2=((P2&0X1F)|0Xc0);	//开锁存器
	P0=0xff;	//关闭数码管位选   共阳极
	P2&=0x1f;
		
	P2=((P2&0X1F)|0XE0); 
	P0=0XFF; //关闭数码管段选
	P2&=0X1F;	
 }
 
void Delay1ms(uint ms)		//@11.0592MHz
{
	unsigned char i, j,k;

	_nop_();
	_nop_();
	_nop_();
	for(i=0;i<11;i++)
		for(j=0;j<190;j++)
			for(k=0;k<ms;k++);
}
 
 void main()
{
while(1)
		{  
			for(i=0;i<=8;i++)
				{
				P2=((P2&0X1F)|0X80);	//开led所存
				P0= ~(0x01<<i);	//流水
				P2&=0X1F;  //关闭锁存器
					Delay1ms(1000);
				}
		 }
}

3.继续点灯

while(1)
		{  
			for(i=0;i<=8;i++)
				{
				P2=((P2&0X1F)|0X80);	//开led所存
				P0= ~(0x01<<i);	//流水
				P2&=0X1F;  //关闭锁存器
					Delay1ms(100);
				}
			for(i=8;i>=0;i--)
			{
				P2=((P2&0X1F)|0X80);	//开led所存
				P0= ~(0x01<<i);	//流水
				P2&=0X1F;  //关闭锁存器
				Delay1ms(100);
			}
			for(i=0;i<4;i++)
			{
				P2=((P2&0X1F)|0X80);	//开led所存
				P0= ~((0x01<<i)|(0x01<<(8-i-1)));
				P2&=0x1f;
					Delay1ms(100);
			}	
			for(i=4;i>=0;i--)
			{
				P2=((P2&0X1F)|0X80);	//开led所存
				P0= ~((0x01<<i)|(0x01<<(8-i-1)));
				P2&=0x1f;
					Delay1ms(100);;
			}
		 }

今后也会陆续更新,希望大家指点。<准备电赛,时间会比较紧,很多代码没法验证(主要是板子被我二手卖了 )>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值