51单片机之独立按键
(一)IO口驱动能力:(注意:1的时候是驱动电流,0是驱动灌电流)
灌电流:在P0口为0V时,支持外接的电源流入的电流为12mA.
灌电流
如上图所示,当单片机输出低电平时,允许电路向单片机引脚内灌入电流,这个电流就叫做“灌电流”,从而发光二极管被点亮,发光二极管所在的电路可以叫做“灌电流负载”。
拉电流
如上图所示,当单片机输出高电平时,允许电路从单片机的引脚拉出电流,这个电流就叫做“拉电流”,从而发光二极管被点亮,发光二极管所在的电路可以叫做“拉电流负载”
上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。用单片机输出高电平,但由于后续电路的影响,输出的高电平不高,就是达不到VCC,影响电路工作。所以要接上拉电阻
讲人话就是:本来达不到电压要求,在端口又加了一个补充到足够电压的外设,从外设里面来帮助实现高电平。
P1,P2,P3内部自带上拉电阻,无需再接。
(二)准双向口弱上拉配置
输入为1时工作电路原理:(极弱和弱在工作,电流I=220微安,电压输出U=5V)
解释,如果是输出,则输出5V ,但是如果从下端输入数据(读取引脚数据),则将把弱给关掉来拉低电压,降低能耗,加快输入速率。
2. ** 输入为0时:**
3.开启强上拉,当锁存器口由0变为1时,由于上面电路会有两2个CPu的延时,所以在这两个延时时,上面电路的0在两个延时内不会变成1,或门下面电路和上面电路在这两个延时内都为0,此时强上拉导通
(三)强推挽输出模式:
(四)独立按键:
代码:
(按下时动态扫描被打断,松手时接上)
#include"reg52.h"
typedef signed char int8;
typedef signed int int16;
typedef signed long int32;
typedef unsigned char uint8; //字符型
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit key1=P3^7; //独立按键接口
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
sbit JDQ = P2 ^ 0;
sbit SHIFT_CLOCK_595 = P1 ^ 4; //74HC595
sbit data_A_595 = P1 ^ 0;
sbit LATCH_CLOCK_595 = P2 ^ 3;
sbit duanxuan=P2^5; //段选控制数字显示
sbit weixuan=P2^6; //位选控制有几个或者第几个显示数字
//自加变量,用来测试编码表
uint16 test_numb; //用来记录数值
uint8 zifu_test2;
uint8 number[8]; //用来存入各个位数
uint8 code zifu[19]={
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF};
uint8 code wei_test[8]={
0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选数组
void delay(uint16