概述
GPIO的基本概念
GPIO(General Pin Input/Output)又叫通用输入输出引脚
GPIO引脚可以有很多用途:
1.输出类的使用(1)最常见的就是控制LED灯的亮灭,通过输出一个高低电平的开控制LED的亮灭.
(2)PWM的输出(PWM,Pulse Width Modulation脉宽调制技术,应用广泛也是需要花时间去学习的一个东西)2.输入类的使用
(1)输入中断检测
(2)输入按键检测除了上述的使用还有高级一点的使用:ADC采集、模拟IIC或者SPI数据线。
所以在后续的学习笔记和例程中会一点点介绍和使用。
51单片机的P0~P3口
P0口为开漏输出的工作方式,如果要输出高电平需要外接上拉电阻
P1~P3口为弱上拉的工作方式
具体的工作方式以及需要怎样的外接电路可以参考使用的单片机的数据手册(datasheet)
仿真例程
仿真功能有LED流水灯,蜂鸣器控制,继电器控制
电路原理图
C语言代码
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit buzzer = P3 ^ 0;//蜂鸣器
sbit relay = P1 ^ 0;//继电器
sbit LED_G = P0 ^ 0;
sbit LED_B = P2 ^ 0;
sbit LED0 = P2 ^ 1;
sbit LED1 = P2 ^ 2;
sbit LED2 = P2 ^ 3;
sbit LED3 = P2 ^ 4;
/*********************************/
/*函数:delay_ms(uint num)
/*功能:延时
/*参数:num延时时间(软件延时)
/********************************/
void delay_ms(uint num)
{
uint i = 0, j = 0;
for (i = 0; i < num; i++)
{
for (j = 0; j < 110; j++) //1ms
{
_nop_();
}
}
}
/**********************************/
/*函数:LED_Show()
/*功能:LED闪烁时间间隔为1S
/*参数:
/**********************************/
void LED_Show()
{
LED_G = ~LED_G;
LED_B = ~LED_B;
delay_ms(1000);
}
/*********************************/
/*函数:Relay_Control()
/*功能:继电器1S动作1S关断
/*参数:
/*********************************/
void Relay_Control()
{
relay = ~relay;
delay_ms(1000);
}
/**************************/
/*函数:Buzzer_Control()
/*功能:蜂鸣器1S响1S关闭
/*参数:
/***************************/
void Buzzer_Control()
{
buzzer = 1;
delay_ms(1000);
buzzer = 0;
delay_ms(1000);
}
/***********************/
/*函数:LED_Direction()
/*功能:流水灯方向控制,使LED来回闪烁
/*参数:
/***********************/
void LED_Direction()
{
uchar i = 0;
P2 = 0xfe;
while (1)
{
delay_ms(1000);
if (i < 4)
{
P2 = _crol_(P2, 1); //循环左移函数
}
else
{
P2 = _cror_(P2, 1); //循环右移函数
}
i++;
if (8 == i)
{
i = 0;
}
}
}
/************************/
/*函数:主函数
/*功能:需要对应功能就把注释去掉即可
/*参数:
/************************/
void main(void)
{
while (1)
{
//LED_Show();
//Relay_Control();
//Buzzer_Control();
}
}
第一次写文章和学习笔记,不足之处请各位大佬指正。
后续会继续更新基于Proteus的51单片机学习笔记之矩阵键盘 。