第6集 IO输入输出
讲解了 GPIO 的概念。1 高电平 0 低电平
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
高电平就是指接近于电源正极电压的电平;也叫逻辑“1”; VDD最大电压不能超过5.5V。上限溢出允许0.3v内.
单片机输出高电平就是输出VCC电压,输出低电平就是输出GND的电压。
四种模式:准双向口、推挽输出、高阻输出、开漏模式。 灌电流(电源到管脚串电阻尽量大于1K,不小于470欧)和拉电流(管脚到Gnd,推挽/强上拉)的讲解
单片机电压3.3V,施密特触发器,低电平不能高于0.99V,高电平不能低于1.18V。
通过按键来检测io状态
按键消抖。延时20ms
上代码
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
#include "intrins.h" //d调用头文件
#define u8 unsigned char // 8位无符号变量(0-255)
#define u16 unsigned int // 16位无符号变量(0-65535)
u8 state = 0; // 初始状态
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void Delay20ms(void) //@24.000MHz Delay20ms();
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i)
i--;
}
void main(void)
{
WTST = 0; // 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; // 扩展寄存器(XFR)访问使能
CKCON = 0; // 提高访问XRAM速度
usb_init(); // USB CDC 接口配置
IE2 |= 0x80; // 使能USB中断
EA = 1; // IE |= 0X80;
while (DeviceState != DEVSTATE_CONFIGURED)
; // 等待USB完成配置
while (1)
{
if (bUsbOutReady) // 如果接收到了数据
{
usb_OUT_done(); //
}
// //任务1:按下P32按钮灯亮,松开P32按钮灯灭;
// if( P32 == 0 ) //判断P32按钮是否按下
// {
// P20 = 0;
// }
// else
// {
// P20 = 1;
// }
//
// 任务2:按下P32按钮灯灭,松开P32按钮灯亮;
// if( P32 == 1 ) //判断P32按钮是否按下
// {
// P20 = 0;
// }
// else
// {
// P20 = 1;
// }
// 任务3:按一下灯亮,按一下灯灭
if (P32 == 0) // 判断P32按钮是否按下
{
Delay20ms(); // 延时20ms消抖
if (P32 == 0)
{
state = !state; // 变量取反 0 1 0 1 0 1
P20 = state;
printf("state:%d\r\n", (int)state);
while (P32 == 0)
; // 等待P32松开
}
}
}
}