一、GPIO(通用输入输出)
- 定义:单片机与外界交互的基础接口,引脚可独立配置为输入或输出模式。
- 输出模式 :
- 开漏输出:需外接上拉电阻输出高电平。
- 推挽输出:直接输出高/低电平,驱动能力强。
- 复用模式:引脚复用为外设功能(如串口、定时器)。
- 输入模式 :
- 上拉/下拉输入:内置电阻确保默认电平。
- 浮空输入:无默认电平,易受干扰。
- 模拟输入:用于连接模拟传感器(如ADC)。
二、独立按键
-
硬件原理:
- 未按下:引脚通过上拉电阻保持高电平(V_{CC})。
- 按下:引脚与GND短路,电平拉低至0。
- 判断逻辑:检测引脚是否为低电平(V \< 0.3V_{CC})。
-
消抖处理:
cif (KEY == 0) { // 检测低电平 delay_ms(10); // 延时消抖 if (KEY == 0) { // 执行按键动作 } }
三、中断
-
中断流程 :
\\text{中断请求} \\rightarrow \\text{优先级裁决} \\rightarrow \\text{保护现场} \\rightarrow \\text{执行ISR} \\rightarrow \\text{恢复现场}
-
寄存器配置示例(外部中断0):
cIT0 = 1; // 下降沿触发 EX0 = 1; // 允许外部中断0 EA = 1; // 全局中断使能
四、定时器
-
定时器初值计算 :
若需定时T(微秒),晶振频率f=12\\text{MHz},则:
\\text{初值} = 65536 - \\frac{T \\times f}{12}
-
定时器0模式配置:
cTMOD |= 0x01; // M1=0, M0=1 → 16位定时器 TR0 = 1; // 启动定时器0
五、PWM(脉冲宽度调制)
- 参数定义 :
- 周期T:高电平+低电平时间。
- 占空比D:
D = \\frac{t_{\\text{high}}}{T} \\times 100%
- 实现方法 :
通过定时器中断调整引脚电平翻转时间。
六、蜂鸣器
- 驱动电路 :
- 无源蜂鸣器需串联限流电阻(如100\\Omega),避免过流。
- 音调生成 :
音符频率f与定时器初值关系:\\text{初值} = 65536 - \\frac{10\^6}{2f} \\quad (\\text{单位:}\\mu\\text{s})
综合应用示例
按键控制蜂鸣器音调:
c
#include <REG52.H>
sbit Buzzer = P1^0; // 蜂鸣器引脚
sbit KEY = P3^2; // 按键(外部中断0)
void Timer0_Init() {
TMOD = 0x01; // 定时器0,模式1
TH0 = 0xFC; TL0 = 0x18; // 1kHz中断初值
ET0 = 1; EA = 1; TR0 = 1;
}
void main() {
Timer0_Init();
while(1);
}
void Timer0_ISR() interrupt 1 {
TH0 = 0xFC; TL0 = 0x18; // 重载初值
Buzzer = !Buzzer; // 翻转电平
}
void Key_ISR() interrupt 0 {
if (KEY == 0) {
TH0 = 0xF8; TL0 = 0x30; // 切换为500Hz
}
}