基于Proteus的51单片机学习笔记之GPIO的简单使用

概述

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流水灯,蜂鸣器控制,继电器控制

电路原理图

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单片机学习笔记之矩阵键盘 。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值