蓝桥杯单片机(一)流水灯

从本文开始,我将介绍蓝桥杯比赛中使用的各部分外设。首先介绍的就是LED灯了,毕竟学习开发板最简单的外设了。
我们先在Keil5建立一个新工程

在这里插入图片描述
在D盘建立一个keilproject文件夹,再在里面建立Class,然后在Class里面建立一个LED文件夹,然后下面名字写为led,后续学习别的可以再在Class重新创建一个文件夹。
在这里插入图片描述
选择STC15F2K60S2
在这里插入图片描述
在这里插入图片描述
然后新建一个main.c文件
在这里插入图片描述
在这里插入图片描述
然后把创建HEX选项选上,后面烧写程序要使用。
在这里插入图片描述

首先,我从蓝桥杯这款开发板的LED部分原理图开始讲解。
在这里插入图片描述
我们打开蓝桥杯单片机的原理图找到LED,然后找到与LED相关的连接在一起的几个元件。首先是左上角的74HC138,这是一个译码器,P25,P26,P27是译码器的输入,输出的Y4连接到了与非门Y4,与非门的输出Y4C连接到了锁存器M74HC573M1R的Y4C,然后在与八个LED灯相连。
首先LED右端接到了VCC(高电平),也就是说另外一端接低电平才能导通,LED才能亮,LED的左端接到的锁存器。
锁存器的作用就是锁定D0-D8的状态,当锁存器的Y4C为高电平时,锁存器上的D0-D8才能被改变,这时候才能把单片机P0口的电平输入到Q1-Q8。所以当我们想要改变LED的亮灭状态时,首先要将Y4C置为高电平。而Y4C又是与非门的输出,所以只要Y4为低电平时,Y4C一定是高电平,要让Y4C为低电平,所以译码器对应的值为100,首先要将P27=1,P26=0,P25=0,才能改变LED的状态。

然后就可以编写代码了。
首先引入STC15F2K60S2的头文件

#include <stc15f2k60s2.h>

然后创建一个主函数,使用while循环锁死,让程序一直在while循环运行。
然后再while循环里面点亮一个LED

void main(void)
{
	//上电首先要关闭蜂鸣器
	//防止的蜂鸣器一直响
	P2=0XA0;P0=0X00;
	while(1)
	{
	//0X80==1000 0000
	//0X01==1111 1110
	//也会就是先选上锁存器,再打开LED第一个
		P2=0X80;P0=0XFE;
	}
}

P2=0XA0;P0=0X00;这句话可以用上面同样分析LED的来获得关闭蜂鸣器的代码。
然后使用stc-isp进行烧录程序

在这里插入图片描述
效果如图:
在这里插入图片描述

能够点亮一个LED灯,接下来就是流水灯了。
所谓流水灯,就是首先第一个灯亮,然后延时一段时间,然后下一个灯亮,然后一直循环下去。
延时函数可以在stc-isp直接生成。(stc-isp考试也能直接使用)
我生成的是1s的延时函数

在这里插入图片描述
然后复制到程序中。代码如下

#include <stc15f2k60s2.h>
#include "intrins.h"

void Delay1000ms(void);
void main(void)
{
	unsigned char i;
	P2=0XA0;P0=0X00;
	while(1)
	{
		for(i=0;i<8;i++)
		{
			P2=0X80;P0=~(0X01<<i);
			Delay1000ms();
		}
	}
}

void Delay1000ms(void)		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 43;
	j = 6;
	k = 203;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

多引入了一个intrins.h的头文件是因为生成的delay1000ms函数中使用了intrins.h头文件中NOP指令,这个作用是让单片机不进行操作一个机器周期。
主函数只有一个for循环,定义了一个i变量进行循环,第一次i=0,P0=0X01取反,也就是第一个灯亮,延时1s,也就是让第一个灯亮1s。然后i=1,P0=0X01向左位移再取反,也就是0X02取反,也就是第二个灯亮1s,然后以此类推。

效果如下:
在这里插入图片描述

有疑问可以评论或私信

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月明Mo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值