Keil——STM32F103C8T6:LED流水灯

本文介绍了如何使用Keil在STM32F103C8T6开发板上实现LED流水灯,包括面包板接线步骤、使用GPIO控制LED和编写主函数。详细说明了如何配置GPIO、APB2时钟以及编写控制灯亮灭的函数。

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

前言:使用Keil编写LED流水灯,在STM32F103C8T6中运行,实现LED流水灯

一、面包板接线,将LED灯组连接到C8T6接口上。

1. 将ST-LINK与芯片接口相连接,作为芯片电源以及能够烧入程序。

具体内容,恕不详述,个人推荐可在视频网站上找详细视频,操作起来更加便捷。

2. 将LED灯分别与芯片接口连接。

本人使用的是A0、A1、A2接口,连接上红黄绿三色LED灯,组合为LED流水灯。
LED灯

到此,实验需要的连接工作完成。

二、编写LED流水灯程序。

1. 新建LED流水灯工程

在这里插入图片描述
在这里插入图片描述

选择STM32F103C8T6芯片
在这里插入图片描述在这里插入图片描述
我用的是ST-LINK烧录程序,若是使用TTL烧录则还需要打开output中的输出HEX文件选项,并且下载烧录软件才能进行烧录
在这里插入图片描述

2. 新建main.c文件,并编写程序

(1)新建main.c文件
在这里插入图片描述

(2)编写程序


//--------------APB2使能时钟寄存器------------------------
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)

//----------------GPIOA配置寄存器 ------------------------
#define GPIOA_CRL		*((unsigned volatile int*)0x40010800)
#define	GPIOA_ODR		*((unsigned volatile int*)0x4001080C)
	

//函数声明
void Delay_ms(volatile  unsigned  int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);

//时延函数
void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<10000;i++);
}

//控制灯亮灭
void A_LED_LIGHT()
	{
    GPIOA_ODR=0x0<<0;		//PA5低电平
	GPIOA_ODR=0x1<<1;		//PB9高电平
	GPIOA_ODR=0x1<<2;		//PC14高电平	
}
void B_LED_LIGHT()
	{
	GPIOA_ODR=0x1<<0;		//PA5高电平
	GPIOA_ODR=0x0<<1;		//PB9低电平
	GPIOA_ODR=0x1<<2;		//PC14高电平
}
void C_LED_LIGHT()
	{
	GPIOA_ODR=0x1<<0;		//PA5高电平
	GPIOA_ODR=0x1<<1;		//PB9高电平
	GPIOA_ODR=0x0<<2;		//PC14低电平
}

//------------------------主函数--------------------------
int main(){

	RCC_APB2ENR|=1<<2;			//APB2-GPIOA外设时钟使能
	RCC_APB2ENR|=1<<3;			//APB2-GPIOB外设时钟使能	
	RCC_APB2ENR|=1<<4;			//APB2-GPIOC外设时钟使能
//也可以写成 RCC_APB2ENR|=1<<3|1<<4;
	

  GPIOA_CRL&=0xFFF0FFFF;		//设置位清零	
  GPIOA_CRL|=0X00200000;		//PA5推挽输出,把第23、22、21、20位变为0010
	
  GPIOB_CRH&=0xFF0FFFFF;		//设置位清零	
  GPIOB_CRH|=0x00000020;		//PB9推挽输出,把第7、6、5、4变为0010
	 
  GPIOC_CRH&=0xFF0FFFFF;		//设置位清零	
  GPIOC_CRH|=0x02000000;		//PC14推挽输出,把第27、26、25、24变为0010

	GPIOA_ODR |= (1<<0);  
	GPIOA_ODR |= (1<<1);      //设置灯的初始状态为灭
	GPIOA_ODR |= (1<<2); 
	
	while(1)
		{
		  A_LED_LIGHT();
		  Delay_ms(60);
		  B_LED_LIGHT();
		  Delay_ms(60);
		  C_LED_LIGHT();
		  Delay_ms(60);
	}

}






(3)保存文件
在这里插入图片描述

保存为main.c文件
(4)在工程文件中添加main.c文件
在这里插入图片描述
在这里插入图片描述
(5)编译运行

LED流水灯

参考:最简单的STM32入门教程----闪烁LED
如何开始一个stm32的简单程序的编译

制作一个简单的面包单片机测温仪需要按照以下步骤进行: ### 材料准备 1. **单片机** - 选择89C52或其他兼容的微控制器 2. **DS18B20温度传感器** 3. **1602 LCD液晶显示器** 4. **杜邦线** - 连接电子元件的专用导线 5. **面包** - 用于临时搭建电路 6. **LED指示灯** (绿色、黄色、红色) 7. **电源模块** - 提供电源给整个系统 ### 步骤一:电路布局 1. **连接DS18B20温度传感器**: 将DS18B20的VCC脚(通常棕色)接到单片机的5V供电端,DOUT脚(数据输出)通过一根杜邦线接到单片机的数字输入口(例如P1口)。 2. **连接LED指示灯**: 绿色LED连接到单片机的低电平输出口(如P2.0),黄色LED连接到另一个低电平输出口(如P2.1),红色LED同样连接到低电平输出口(如P2.2)。每个LED的正极接到单片机的+5V,负极接到地线。 ### 步骤二:编写代码 1. **下载固件**: 使用适当的编程工具(如Keil、Proteus等),下载并烧录包含温度读取和LED控制功能的89C52程序。 2. **设置基本函数**: 编程中需要创建函数读取DS18B20的数据,处理数据,并根据温度高低控制LED亮灭。比如: ```c void readTemperature(); void displayTemperature(float temp); void ledControl(int tempValue); ``` ### 步骤三:液晶显示 1. **连接LCD**: 数据线D0-D4分别连接到单片机相应的IO口(根据1602的驱动数据表),RST连接单片机的低电平有效输出,VSS和VDD分别接到电源。 2. **初始化LCD**: 编写一段初始化代码,在主程序开始前完成LCD的硬件配置。 ### 步骤四:用户界面和LED指示 1. **显示温度**: 每次读取完温度后,调用`displayTemperature()`函数显示在LCD上。 2. **LED颜色变化**: 根据温度范围,调用`ledControl()`函数控制LED闪烁。例如: - 温度低于设定阈值,绿色LED亮; - 温度过低预警,黄色LED闪; - 高于危险温度,红色LED常亮。 ### 测试与调试 1. **连接电源**:确保所有组件都有足够的电压,然后通电测试。 2. **观察结果**:检查LCD是否正常显示温度,LED是否按预期响应温度变化。 **相关问题--:** 1. 单片机如何读取DS18B20的数据? 2. 如何通过代码调整LED的颜色阈值? 3. 如果液晶屏无法显示,应如何排查故障?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值