嵌入式学习 day45:51单片机基础

一、数码管显示

1.1 数码管是什么

数码管是一种显示数字的电子元件,由多个LED段组成。常见的数码管有7段 (显示数字)和8段(多一个小数点)。每一段对应一个LED,通过控制不同段的亮灭,就能组合出不同的数字。

text

复制代码
    a
   ───
  │   │
 f│   │b
  │   │
   ───
  │   │
 e│   │c
  │   │
   ───  · dp
    d

每个数字对应一段组合,比如数字 0 需要点亮 a、b、c、d、e、f 六段,数字 1 只需要点亮 b、c 两段。

1.2 段码表

为了显示数字,需要给每一段分配一个二进制位。共阴极数码管(低电平点亮)的段码表如下:

数字 段码(十六进制)
0 0x3F
1 0x06
2 0x5B
3 0x4F
4 0x66
5 0x6D
6 0x7D
7 0x07
8 0x7F
9 0x6F

1.3 多位数码管的显示原理

一块开发板上通常有4位或8位数码管,但它们的段选线是共用的,只有位选线是独立的。这意味着:

  • 位选:选择当前要点亮哪一位数码管

  • 段选:决定这一位显示什么数字

  • 动态扫描:由于不能同时显示多位,需要快速轮流点亮每一位,利用人眼视觉暂留效应,看起来就像同时显示了

显示逻辑:

  1. 选中第m位数码管(位选)

  2. 送入该位要显示的数字段码(段选)

  3. 延时一小段时间

  4. 切换到下一位,重复以上步骤

当扫描速度足够快(每秒50次以上),人眼就感觉不到闪烁。

1.4 显示多位数字的思路

要把一个整数(比如 1234)拆成每一位显示出来:

  1. 用 num % 10 取出当前最低位

  2. 用 num / 10 去掉最低位

  3. 循环4次,依次显示个、十、百、千位

  4. 每显示一位前先清空P0,避免残影

二、按键输入

2.1 按键的电路原理

按键本质上是一个开关,按下时接通,松开时断开。在单片机中,按键通常接在I/O口上,通过检测引脚电平来判断是否按下。

常见接法:按键一端接地,另一端接I/O口,I/O口通过上拉电阻保持高电平。按键按下时,引脚被拉低(0),松开时恢复高电平(1)。

2.2 按键检测思路

  1. 初始化:将按键对应的引脚设为输入模式(输出高电平)

  2. 检测:读取引脚电平,为0表示按下,为1表示松开

  3. 识别:多个按键对应不同引脚,哪个引脚为0就是哪个按键被按下

代码逻辑:

c

复制代码
if ((P1 & (1<<4)) == 0)  ret = 1;   // 第4位按下
else if ((P1 & (1<<5)) == 0)  ret = 2;   // 第5位按下
// ...

三、中断

3.1 什么是中断

中断是单片机处理突发事件的一种机制。当某个事件发生时(比如按键按下、定时器溢出),CPU暂停当前正在执行的程序,转去执行对应的处理函数(中断服务函数),处理完之后再回到原来的位置继续执行。

3.2 中断的处理流程

  1. 中断请求:外设或内部事件发出中断信号

  2. 中断响应:CPU检测到中断请求,暂停当前程序

  3. 保护现场:保存当前程序的返回地址和状态

  4. 执行中断服务函数:跳转到对应的处理函数

  5. 恢复现场:中断处理完毕,恢复之前保存的状态

  6. 返回主程序:回到中断发生的位置继续执行

3.3 外部中断的配置

以外部中断0(INT0)为例,需要配置三个寄存器:

寄存器 作用
IE 中断允许寄存器,开启总中断和INT0中断
TCON 定时器控制寄存器,设置INT0触发方式(下降沿/低电平)
P3 将P3.2引脚设为输入模式

配置步骤:

  1. P3 \|= (1<<2):P3.2设为高电平(输入模式)

  2. IE \|= (1<<0) \| (1<<7):开启INT0中断和总中断

  3. TCON \|= (1<<0):设置INT0为下降沿触发

3.4 中断服务函数

中断服务函数是中断发生时自动执行的函数,语法比较特殊:

c

复制代码
void eint0_handler(void) interrupt 0
{
    // 处理代码
}

interrupt 0 表示这是外部中断0的服务函数,编译器会自动把它放到中断向量表对应的位置。

四、今日总结

今天学了数码管显示、按键输入和外部中断,核心要点如下:

数码管:

  1. 段码表把数字转换成段选信号

  2. 多位显示靠动态扫描------轮流点亮每一位,利用视觉暂留

  3. 显示多位数字用 %10 和 /10 循环拆位

按键:

  1. 按键就是开关,按下为低电平,松开为高电平

  2. 通过检测引脚电平判断哪个按键按下

  3. 实际项目需要按键消抖

中断:

  1. 中断是CPU响应突发事件的机制

  2. 处理流程:请求→响应→保护现场→处理→恢复现场→返回

  3. 外部中断需要配置 IE、TCON、P3 寄存器

  4. 中断服务函数用 interrupt 0 声明

相关推荐
我命由我123451 天前
Photoshop - 将Photoshop图像置入其他应用程序
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
个 人 练 习 生1 天前
C++-----string基本使用详解
开发语言·c++·学习
千谦阙听1 天前
【C++篇】:string类——常用接口、底层原理与深浅拷贝
开发语言·c++·学习·visual studio
dadaobusi1 天前
学习:chiesel,scala
学习·fpga开发·scala
艾莉丝努力练剑1 天前
【AI大模型接入SDK】ChatSDK 集成测试概述
jvm·c++·人工智能·学习·面试·集成测试·sdk
艾莉丝努力练剑1 天前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
Joe_Wang51 天前
【从0到1学习JVM · 14】堆内存各区域分工与Xms和Xmx设为一样的真相
java·jvm·学习·垃圾回收
東隅已逝,桑榆非晚1 天前
stack和queue(类函数学习和模拟实现)
c++·笔记·学习
Vcaker1 天前
Linux学习37-rook-ceph部署
linux·运维·学习
阳光九叶草LXGZXJ1 天前
Linux-学习-12-JDK安装
java·linux·运维·学习