蓝桥杯单片机led流水灯学习

本文分享了大一学生如何从零开始学习蓝桥杯单片机,包括工程设置、LED灯控制、16进制理解、流水灯制作过程,以及延时函数应用。通过实例演示,逐步引导读者掌握基本编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大一零基础搞蓝桥杯单片机组,多天以来,感觉上手挺难的,将自己的学习笔记拿出来分享
首先是建工程,我用的单片机是IAP15F2K61S2型号的,建的工程是IA89C52的
新建一个文档,保存名称是main.c,接下来一个曾经困扰我的一个设置就是hex文件的生成,我们可以这样设置在这里插入图片描述
点上去后我开始写第一个程序,点亮我的开发板上第一个led灯:

#include "reg52.h"
sbit led0 = P0^0;//定义led0,也就是P0的零号引脚
sbit led1 = P0^1;
int main(){
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;//初始化,暂时不讲了,这里意思是关掉蜂鸣器,P0口转向led灯并全部关闭
	led0=0;//点亮led0,这里1为关闭0为开
	while(1);
}

结果图:在这里插入图片描述
下面讲一下16进制
也就是满16进一,对应关系:

11
22
33
44
10A/a
11B/b
12C/c
13D/d
14E/e
15F/f

然后下面再写一个前面4个灯一起亮的程序
我们知道0,1代表的是灯亮灭,那么四位的二进制数字代表的就是四个灯,也就是为什么使用十六进制
有很多器件也是8个引脚,所以0X**十六进制可以广泛应用于单片机

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
int main(){
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	P0=0xf0;//11110000对应的灯
	while(1);
}

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

以此推的话P0=0x55就是偶数灯亮,0xaa就是奇数灯亮

接下来我们开始写流水灯

先介绍一下延时的方法,要么就是计数器,中断程序,要么就是延时函数
计数器和中断程序后面写,先讲个最简单的也就是延时函数,通过空循环,让程序延时,原理就是处理每条语句cpu都需要一定时间处理,通过空循环那么可以轻松延时
以下是计算循环次数的方法

1.先计算你单片机的振荡(时钟)周期 T= 1/晶振(11.0592MHZ)

2.一次 i - -操作为12T

3.忽略变量定义,上述延时函数共需时间:921z12T

4.带入T:92112T*z 约为 z ms

可以轻松计算。那么实现延时流水灯的方法已经浮现了
以下是最初的程序

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
	unsigned int i;
	while(ms--){
		for(i=0;i<628;i++);
	}
}
int main(){
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	while(1){
		led7=1;
		led0=0;
		delayms(500);
		led1=0;
		led0=1;
		delayms(500);
		led2=0;
		led1=1;
		delayms(500);
		led3=0;
		led2=1;
		delayms(500);
		led4=0;
		led3=1;
		delayms(500);
		led4=1;
		led5=0;
		delayms(500);
		led5=1;
		led6=0;
		delayms(500);
		led6=1;
		led7=0;
		delayms(500);
	}
}

效果视频就不播放了
但是这个程序是不是有点冗长呢?
那么看这样
led0显示是P0状态是11111110
led1显示是P0状态是11111101
led2显示是P0状态是11111011

那么我们想到左移右移运算符
我们只需要让1往左移i位是不是就可以了然后取反就是我们所要的情况
下面上码!

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
	unsigned int i;
	while(ms--){
		for(i=0;i<628;i++);
	}
}
int main(){
	unsigned int i;
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	while(1){
		for(i=0;i<8;i++){
			P0=~(1<<i);
			delayms(500);
		}
	}
}

好了,这样流水灯就做出来了
今天就到这吧

### 蓝桥杯单片机LED灯电路设计实例 #### 1. 设计概述 在蓝桥杯竞赛中,单片机控制LED灯的设计通常涉及硬件连接和软件编程两部分。通过合理的电路设计可以实现多种功能,如交通信号灯模拟、流水灯光效以及按键控制等。 对于具体的电路布局而言,采用8051系列单片机作为控制器来管理多个LED的状态变化是一个常见方案[^1]。此过程中不仅能够展示基础的I/O端口操作技能,还能体现定时/计数器的应用能力。 #### 2. 硬件连接说明 为了完成上述提到的功能需求,在实际搭建时需注意以下几点: - **电源供应**:确保给定电压适合所使用的元件工作范围; - **限流电阻配置**:每个发光二极管都需要串联适当阻值的分压器件以防止过载损坏; - **接口分配**:合理规划P0~P3各组并行数据线与外部设备之间的映射关系以便于程序编写; 具体到本案例中的交通指示牌项目,则是利用前四个七段数码显示器呈现东向西路径上的剩余时间,而后四位则对应南北方通行情况。同时用字符“A”,“B” 和 “C” 来分别表示红色停止标志、“绿色前进许可” 及 黄色警示状态 . 另外一种应用场景下,可以通过设置不同的独立按钮触发相应事件,比如增加或减少特定位置上显示出来的数值大小,或是启动一段预设好的动画序列等等 [^2]. 这种交互方式增加了作品趣味性和实用性. 最后值得注意的是,在某些更复杂的任务里可能会涉及到延时处理机制 (例如使用 SysTick 定时器),它可以帮助开发者精确地掌控每一帧画面切换的时间间隔 [^3], 提升整体视觉效果质量. ```c // C语言代码片段用于初始化GPIO引脚为输出模式 void GPIO_Init(void){ // 配置PA0至PA7为推挽输出, 上拉 GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | ... | GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值