**今年开学的时候才想起来自己报名了蓝桥杯,然后开始备赛,因为时间原因,自己只把往年初赛真题刷了一遍,准备不足吧 导致初赛ne555捕获功能没有实现,现在闲了 就分享自己的学习历程吧 **
很多程序是自己复制早点自己写的,并没有重新写一遍
- 点亮一个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);
}
}
- 1. buzz_init():板子初始化,蓝桥杯板子如果不初始化,蜂鸣器会响,具体代码 后面讲解
- void Delay1ms(uint ms):延时函数,延时ms毫秒,无返回值,入口参数:需要延时的毫秒数
- 电路:如图,led共阳极,想让那个LED亮 则需要在相关io(PO口)赋值为低电平 P0= ~(0x01); -> P0=~(0000 0001 ) ->P0= 1111 1110 - 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);;
}
}
今后也会陆续更新,希望大家指点。<准备电赛,时间会比较紧,很多代码没法验证(主要是板子被我二手卖了 )>