GPIO
Genral Purpose Input Output:通用输入输出,是与外界交互最基本的形式,可以独立的将引脚配置为输入/输出模式
输出模式:控制引脚输出高电平/低电平(给定控制信号)
1,开漏输出
2,推挽输出
3,复用开漏
4,复用推挽
输入模式:检测引脚的电平(接收外部信号)
1,上拉输入:在引脚外部接了一个上拉电阻(引脚空闲状态高电平)
2,下拉输入:在引脚外部接了一个下拉电阻(引脚空闲状态低电平)
3,浮空输入:引脚空闲状态电平不确定
4,模拟输入(主要用于ADC)
注:51单片机没有这些模式
独立按键
原理图

工作原理:
当按键未被按下时,引脚会呈现高电平,当按键被按下时,会造成引脚和GND短路到一起,此时对应的引脚会呈现低电平,所以判断按键是否被按下,秩序判断引脚是否为低电平即可
结合数码管原理图可看出,P10---P13四个引脚管理数码管,P14---P17管理独立按键,所以P1的八位二进制,第0位到第3位管理独立按键,第4位到第7位管理数码管
需要说明的是,K5是由P35管理,部分 单片机 只有四个按键,没有K5
实物图

通过按键控制
二极管


注意:图中有错误,key_press最后一行的return应该返回5
如果在while里没有初始化,那么二极管亮起则不会熄灭。
如图代码可使得二极管对应按键亮起,只能亮起一个,若要同时亮起多个二极管,将key_press函数中的return去掉即可


数码管



注意:图中有错误,key_press最后一行的return应该返回5
main函数与二极管相同。
与二极管key_press不同的是,数码管中循环的n是从1开始,因为二极管没有D0去对应K1,但是数码管是可以显示0,如果key_press与二极管相同,那么按K1变会出现0,以此类推


中断
概念:当CPU正在执行某个任务时,此时外界发生了一个紧急的事件,要求CPU能暂停当前的任务,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续执行原来的工作的过程
中断源
能打断CPU执行当前任务的源头或事件
分类
1,外部中断0:INT0 → P32引脚
2,外部中断1:INT1→P33引脚
外部中断是引脚电平变化引发的中断,有两种触发条件,一种是从高电平变为低电平的下降沿触发,另一种是持续低电平触发
3,定时器0
4,定时器1
5,串口
优先级
当CPU在执行一个任务的时候,此时可能有多个中断源同时发起中断请求,此时CPU比较中断源的优先级,优先处理优先级高的中断

注:51单片机只有前五个
由图可知,外部中断0的优先级最高。左侧为自动设置优先级,而右侧为手动设置优先级(一般不设置)
中断嵌套
CPU在处理一个中断任务的时候,再去嵌套另外的一个中断任务
注:在51单片机中最多嵌套两层
中断处理流程
1,中断源发出中断请求
2,检查CPU是否允许中断及该中断源是否被屏蔽
3,比较中断优先级
4,保护现场
5,执行中断处理函数
6,恢复现场
中断处理函数
每个中断源都有与之对应的中断处理函数,而这些函数需要在程序中写好,不需要调用,当中断处理到第五步时自动执行

注意:最后的interrupt是中断标号,一定要写,代表了中断向量,存放函数的地址
中断寄存器

注:XICON在51单片机中没有,IPH和IP用来改变优先级
IE寄存器 中断允许寄存器

EA相当于电闸总开关,置1代表CPU允许所有的中断请求,置0代表CPU屏蔽所有的中断请求
TCON寄存器 定时器/计数器中断控制寄存器

IT0置1/0,代表外部中断0引脚(P32引脚)下降沿/低电平触发中断
外部中断0初始化函数
1,外部中断0引脚设置高电平
2,EA的bit7和bit0置1,允许CPU响应所有中断及外部中断0可以产生中断
3,将TCON寄存器中的bit0置1,代表外部中断0引脚下降沿可以触发中断(可以通过杜邦线产生下降沿,将P32和GND短接)
4,当外部中断0引脚产生下降沿时,会向CPU发起中断请求,此时TCON寄存器的IE0会由硬件自动置1
5,CPU执行外部中断0对应的中断处理函数,此时TCON寄存器的IE0会由硬件自动清0

通过数码管反应外部中断0次数



如图所示,通过杜邦线P32和GND短接在一起,使得P32产生下降沿,产生一次计数器g_n便加一
定时器
产生精准时间,不同外设 对时间要求是精准的
注:51单片机中有两个定时器,分别是Timer0和Timer1,是自增型定时器
工作原理:定时器内部有16位占两个字节的计数器,给定计数器一个初值,会按照1us的速率进行自增,加到65535溢出时向CPU发起中断请求,CPU响应中断并执行中断处理函数
1ms定时
1s = 1000ms;1ms = 1000us
单片机工作频率:1MHZ = 1 * 10 ^ 6HZ(外部晶振提供12MHZ频率,但实际上经过降频)

完成一条指令的时间:1/1MHZ = 1us
所以定时器初值:65535 - 1000 = 64535
定时器寄存器

TL0:定时器0的低位
TH0:定时器0的高位
在51单片机中,将short类型的两个字节分成上述两部分,所以得出的初值,其高位应放在TH0,低位放在TL0
TMOD定时器模式配置寄存器

低4位控制定时器0,高4位控制定时器1

注:51单片机中没有00模式
步骤(以计时器0为例)
1,将TMOD寄存器中的低4位清0
2,将M0置1,M1清0,代表定时器0工作在16位定时器模式下
TCON 定时器控制寄存器


将TCON寄存器中的TR0这一位置1,代表打开定时器,开始计数
注意:需要将IE寄存器中的bit7和bit1置1,代表允许CPU响应所有中断 + 允许定时器0产生中断
二极管一秒间隔闪烁


PWM
Pulse Width Modulation:脉冲宽度调制,能让引脚产生一个方波,让引脚电平周期性的翻转
PWM周期:一个方波所经历的周期,即从上升沿/下降沿到下一个上升沿/下降沿所需要的时间
PWM占空比:高电平在一个PWM周期所占的比例

可用于手机亮度调节
蜂鸣器
震荡源 声音(波)→音调→波的频率发生变化→高频高音,低频低音→音量→振幅 能量大小
有源蜂鸣器:内部有震荡源,上电后会持续发出固定频率的声音
无源蜂鸣器:内部没有震荡源,需要给定蜂鸣器一个震荡
原理图

给基极一个高电平,三极管导通,蜂鸣器开始工作,给低电平,则不会工作
实物图

通过蜂鸣器发出不同HZ声音
通过杜邦线将P11两个引脚接到一起,此时通过来回翻转P21,来产生震荡,使蜂鸣器发出声音
计算hz(以200hz为例)
PWM周期时间:1/200 = 0.005s,所以高低电平均为0.0025s
单片机工作频率:1000000Hz,所以执行一次需要0.000001s
所以定时器初值:0.0025/0.000001 = 2500 → 65535 - 2500 = 63035
代码及其效果



效果是按键K1对应200HZ,K2对应400HZ以此类推
其中按键函数对应K1~K5,但是HZ数组包含HZ[0],所以在主函数改变HZ时,n要减一