蓝桥杯省赛/单片机笔记-独立按键的基本操作

该文描述了一个基于单片机的电路设计,通过J5跳帽连接P3口的2~3引脚来实现4个独立按键,每个按键对应控制一个LED灯的亮灭。在按键扫描过程中,采用去抖动处理以消除机械开关的抖动,确保稳定控制。程序中定义了各按键和LED的sbit,通过函数实现对HC573选择器的控制,以及按键松开时LED自动熄灭的功能。主循环不断检测按键状态并执行相应操作。

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

  • J5跳帽接到2~3引脚,使s4-s7的另一端接地,形成4个独立按键。在独立按键扫描的过程中,发现有接触信号,先进行去抖动处理(延时),当确实按键按下时,才进行功能处理。

  • 基本操作:

s7控制点亮led1,松开熄灭;

s6控制点亮led2,松开熄灭;

s5控制点亮led3,松开熄灭;

s4控制点亮led4,松开熄灭;

  • 程序编译

#include "reg52.h"
sbit s7 = P3^0;
sbit s6 = P3^1;
sbit s5 = P3^2;
sbit s4 = P3^3;

sbit l1 = P0^0;
sbit l2 = P0^1;
sbit l3 = P0^2;
sbit l4 = P0^3;
sbit l5 = P0^4;
sbit l6 = P0^5;


void selecthc573(unsigned char channel)
{
    switch(channel)
    {
        case 4:
        P2 = (P2 & 0x1f) | 0x80;
        break;
        case 5:
        P2 = (P2 & 0x1f) | 0xa0;
        break;
        case 6:
        P2 = (P2 & 0x1f) | 0xc0;
        break;
        case 7:
        P2 = (P2 & 0x1f) | 0xe0;
        break;
    }
}
void delayk(unsigned char t)
{
    while(t--);
}

void skey_alone()
{
    if(s7 == 0)
    {
        delayk(600);
        if(s7 == 0)
        {
            l1 = 0;
            while(s7 == 0);
            l1 = 1;
        }
    }
    if(s6 == 0)
    {
        delayk(600);
        if(s6 == 0)
        {
            l2 = 0;
            while(s6 == 0);
            l2 = 1;
        }
    }
    if(s5 == 0)
    {
        delayk(600);
        if(s5 == 0)
        {
            l3 = 0;
            while(s5 == 0);
            l3 = 1;
        }
    }
    if(s4 == 0)
    {
        delayk(600);
        if(s4 == 0)
        {
            l4 = 0;
            while(s4 == 0);
            l4 = 1;
        }
    }
    
}

void main()
{
    selecthc573(4);
    while(1)
    {
        skey_alone();
    }
}

### 关于蓝桥杯电子单片机小蜜蜂项目笔记 #### 定时器的应用 在蓝桥杯电子中,对于单片机小蜜蜂项目而言,定时器是一个非常重要的组件。通过合理配置定时器参数,能够实现精确的时间控制功能。例如,在音乐播放过程中,利用定时中断来触发音符的变化,从而达到演奏旋律的效果[^1]。 ```c // 初始化定时器函数示例 void Timer_Init(void){ TMOD |= 0x01; // 设置为模式1,16位计数器 TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; ET0 = 1; // 开启T0中断允许 EA = 1; // 总中断使能 } ``` #### 矩阵键盘的设计 为了简化硬件连接并提高输入效率,通常采用矩阵式按键设计。这种结构由行列组成,每条线都对应着一个I/O端口。当按下某个键时,相应的行和列会产生低电平信号变化,通过对这些状态的检测即可判断具体按下了哪个按钮[^2]。 | 行/列 | C1 | C2 | C3 | |-------|------|------|------| | **R1**| Key1 | Key2 | Key3 | | **R2**| Key4 | Key5 | Key6 | #### 温度传感器DS18B20的操作流程 针对温度测量需求,选用了一款数字型温度传感器DS18B20作为感知元件。其工作过程较为特殊,需严格按照既定步骤执行初始化命令、发送读取指令以及获取数据返回值等一系列操作才能得到准确的结果[^3]。 ```c // DS18B20读取温度子程序片段 float Read_Temperature(){ uchar i,j; float temp=0; One_Wire_Reset(); // 复位总线 Write_Byte(0xCC); // 过ROM匹配 Write_Byte(0x44); // 启动转换 One_Wire_Reset(); Write_Byte(0xCC); Write_Byte(0xBE); // 发送读寄存器命令 for(i=0;i<9;i++) Temp[i]=Read_Byte(); // 接收9字节的数据 ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值