第二个实验 按键 点亮led

本文介绍了一个基于STM32F10X微控制器的简单程序,该程序实现了LED灯的控制及按键检测功能。通过初始化GPIO端口配置,程序能够响应按键操作,并据此控制LED的状态。

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

#include "stm32f10x.h"
void Delay_ms( uint16_t time_ms );
int main()
{
//打开led对应的引脚时钟  并进行初始化
    GPIO_InitTypeDef  GPIO_InitStructure; 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//ʹÄÜGPIOµÄÍâÉèʱÖÓ
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;//Ñ¡ÔñÒªÓõÄGPIOÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÉèÖÃÒý½ÅÄ£Ê½ÎªÍÆÃâÊä³öģʽ      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//ÉèÖÃÒý½ÅËÙ¶ÈΪ50MHZ        
    GPIO_Init(GPIOC, &GPIO_InitStructure);//µ÷Óÿ⺯Êý£¬³õʼ»¯GPIO

//打开按键对应的引脚时钟 并进行初始化  按键设置为输出模式 只需要设置模式和引脚 不需要设置速率
 GPIO_InitTypeDef  GPIO_InitStructure1;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//¿ªÆôGPIOCµÄÍâÉèʱÖÓ
 
 GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_14;//Ñ¡ÔñÒªÓõÄGPIOÒý½Å 
 GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖÃÒý½ÅģʽΪÉÏÀ­ÊäÈëģʽ    
 GPIO_Init(GPIOB, &GPIO_InitStructure1); //µ÷Óÿ⺯Êý£¬³õʼ»¯GPIO  
 while(1)
  { 
  
//读取指定IO口的输入  来判断按键是否按下   此时不是中断模式
  if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)//ÅжÏ3¸ö°´¼üÊÇ·ñÓа´ÏÂ
  {
   //按下 点亮
   Delay_ms(20);
   GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
  
  }
  else
  {
   //否则 熄灭
   GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
 
  }
  }    
}
void Delay_ms( uint16_t time_ms )
{
  uint16_t i,j;
  for( i=0;i<time_ms;i++ )
  {
  for( j=0;j<10309;j++ );//´óÔ¼1ms
  }
}
### STC8H8K 单片机按键控制LED灯亮灭实验 #### 实验目的 本实验旨在学习如何利用STC8H8K系列单片机实现通过外部按键控制LED灯状态的功能。 #### 所需材料 - STC8H8K开发板一块 - LED若干(建议不同颜色) - 按键模块一个或多个 - 连接线数根 - USB下载线一条用于程序烧录 #### 硬件连接说明 将按键的一端接地(GND),另一端接到单片机的一个I/O口作为输入信号采集点。对于LED,则将其较长脚(正极)接入到指定的IO口中,较短脚负极则直接连至GND或者经过限流电阻再回到电源地线上去[^1]。 #### 软件设计思路 采用中断方式检测按键动作,在每次按下按钮时触发一次中断服务子程序(ISR),在此期间改变相应GPIO电平从而达到点亮/熄灭对应指示灯的效果。为了防止抖动影响判断准确性,可以在进入ISR前加入适当延时处理并重复确认按键确实处于闭合状态后再执行实际操作[^2]。 #### 示例代码展示 下面给出一段简单的基于上述原理编写的测试用源码: ```c #include <reg52.h> sbit Key = P3^2; //定义按键所使用的引脚位置 sbit Led14 = P1^0; //定义第一个LED对应的引脚位 sbit Led17 = P1^1; //定义第二个LED对应的引脚位 void Delay(unsigned int time){ while(time--); } void main(){ EA = 1; EX0 = 1; while (true){ if(Key==0){ //当检测到有低电平时认为是有效按压事件发生 Delay(10); //简单消抖措施 if(!Key){ Led14 ^= 1; //使用异或运算符来切换Led14的值 Led17 ^= 1; //同理也对另一个led做相同的操作 while (!Key); //等待松开按键 } } } } ``` 这段程序实现了两个功能:一是初始化部分设置了全局使能以及外部中断允许标志;二是主循环里不断监测是否有来自硬件开关的变化请求,并据此调整目标器件的工作模式——即每当捕捉到一次完整的触碰过程就会让两盏小夜灯交替闪烁一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值