51单片机 - 基本的输入输出

1、引言

  • 之前学习51单片机的时间很短,感觉很不扎实,就想在闲的时候回顾一下51单片机。说到单片机,最简单的就是输出引脚电平,还有获取引脚当前状态了(read和write)。

2、引脚输出

  • 一说到单片机的引脚输出,大家可能都会想到点灯,然后就有了这样的代码。

    P0 = 0x00;
    while(1) {delay(100);P0 = ~P0;
    }
    
    • 简单来说就是把P0一组引脚变为低电平,然后一段延时之后反转电平。
  • 会控制一组引脚之后,就会想要控制单独的引脚实现流水灯(流水灯超酷的好吧),然后就会写出下面这段代码。
    P0 = ~(0x01);
    while(1) {P0 = _crol_(P0, 1);delay(1);
    }
    
  • 嗯?为什么不用sbit?这东西我用的不熟,而且和各种c语法不兼容,所以就不用了。

3、引脚输入

  • 会了输出之后自然要尝试输入了,毕竟读电平也很常用(按键什么的)。
  • 不用sbit的话读电平相对麻烦一点,比如读P0_0 引脚就要这样
    if(P0 & 0x01 == 1) {// 高电平
    }
    else {// 低电平
    }
    
    • 写成函数比较方便一点。
    unsigned char ifPin(unsigned  char pin)
    {if(P0 & (1 << pin) == 1) {return 1;}else {return 0;}
    }
    

4、思考

  • 引脚的操作相同的话,就可以把行为抽象出来,写一组通用的引脚输入和输出的函数,把位操作封装起来(说实话每次写位操作都很难受)。
  • 先写输出的函数,输出的函数就是让某个引脚输出某个电平就行,其它的功能暂时不需要。
    uint8_t GPIO_WritePin(uint8_t GPIO_PORT, uint8_t GPIO_PIN, uint8_t GPIO_PIN_STATE)
    {if (GPIO_PIN_STATE == GPIO_PIN_SET) {if (GPIO_PORT == GPIO_PORT_0) {P0 |= GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_1) {P1 |= GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_2) {P2 |= GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_3) {P3 |= GPIO_PIN;}}else if (GPIO_PIN_STATE == GPIO_PIN_RESET){if (GPIO_PORT == GPIO_PORT_0){P0 &= ~GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_1){P1 &= ~GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_2){P2 &= ~GPIO_PIN;}else if (GPIO_PORT == GPIO_PORT_3){P3 &= ~GPIO_PIN;}return NO_ERROR;
    }
    
  • 读取引脚的函数和上面写的差不多,就是多了个引脚的判断
    uint8_t GPIO_ReadPin(uint8_t GPIO_PORT, uint8_t GPIO_PIN)
    {if (GPIO_PORT == GPIO_PORT_0) {if(P0 & GPIO_PIN == 0){return GPIO_PIN_RESET;}else {return GPIO_PIN_SET;}}else if (GPIO_PORT == GPIO_PORT_1){if(P1 & GPIO_PIN == 0){return GPIO_PIN_RESET;}else {return GPIO_PIN_SET;}}else if (GPIO_PORT == GPIO_PORT_2){if(P2 & GPIO_PIN == 0){return GPIO_PIN_RESET;}else {return GPIO_PIN_SET;}}else if (GPIO_PORT == GPIO_PORT_3){if(P3 & GPIO_PIN == 0){return GPIO_PIN_RESET;}else {return GPIO_PIN_SET;}}
    }
    

5、结语

51本身的操作不难,主要是外设的使用比较困难,比如按键,138译码芯片,锁存什么的操作比较繁琐。

51单片机 - 基本的输入输出相关推荐

  1. p1口输入输出实验c语言程序,51单片机P1口输入输出实验实验报告.doc

    51单片机P1口输入输出实验实验报告 实验一 P1口输入输出实验一 实验目的 1 掌握P1口作为I/O口时的使用方法. 2 理解读引脚和读锁存器的区别. 实验原理 由 AT89C51 组成的单片机系统 ...

  2. 51单片机IO口输入输出方式

    传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路. 灌电流方式:LED正极接VCC,负极接IO口.IO为高电平是LED两极电平相同,没有 ...

  3. 51单片机c语言数字输入输出,第五章 51单片机C语言程序--输入输出接口.pdf

    四川师范大学成都学院 51单片机原理及应用 单片机输入/输出口(I/O口) 主讲教师:刘强 四川师范大学成都学院电子竞赛培训实验中心(刘强) 明德.博学.求实.创新 复习1.单片机的外观 AT89C5 ...

  4. 51单片机之输入输出

    文章目录 51单片机之输入输出(Input/Output IO) 0. 题外话 1. IO介绍 2. IO编程 2.1 字节寻址 2.2 位寻址 3.常用器件的驱动电路 3.1 LED 3.2 数码管 ...

  5. 51单片机入门(一):输入输出

    概述 学习任何单片机(开发板)第一步都是了解输入输出.一般是从输出开始,比如对单个位进行操作(点亮流水灯),对多个位进行操作(数码管,点阵等).至于输入,最基础的便是键盘(按键) IO的结构 初学的时 ...

  6. 51单片机的输入输出简介

    以下是我整理的关于学习51 单片机和使用过程中出现疑问以及32单片机通用IO口的介绍,本人才疏学浅,表达略显粗浅,若有不合理之处,望大家多多指正! 本文参考资料 在采用单片机的I/O口作为输入口或输出 ...

  7. 51单片机入门 - I/O口直接输入输出实例

    博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...

  8. 如何高效地使用51单片机串口输入输出

    51单片机一般使用串口的方法都是这样的 #include<reg52.h> #define uint unsigned int void UART_Init(); uint num ; / ...

  9. 51单片机好学嘛?学完51单片机学什么?

    大家好,我是无际单片机编程的徐导,很多想学单片机又担心自己学不会的兄弟们,都想问这个问题:51单片机好学嘛? 作为一个资深的老工程师,我还是要客观地回答一下这个问题. 关于的"0基础15天学 ...

最新文章

  1. 【评论】一个老程序员的建议
  2. 【Android 应用开发】 Fragment 详解
  3. 【机器学习】对于特征离散化,特征交叉,连续特征离散化非常经典的解释
  4. 关于RMQ问题的四种解法
  5. 信用卡还款直减500
  6. Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002
  7. 线性代数同济第六版笔记:1-行列式
  8. Amesim更改为中文
  9. 在未知社交网络中最大化影响力(论文翻译)
  10. HEVC/H.265与AVC/H.264对比总结
  11. Carpet-mod常用的用法记录
  12. 202. 快乐数 (Python 实现)
  13. 【Python】多进程 AttributeError: Can‘t pickle local object
  14. android 加载第三方so文件,Uni-app 以Module方式开发Android插件,引入第三方资源包so文件,但无法读取...
  15. 遇到的面试题基础知识
  16. oracle.-904,ORACLE 11G ORA-904 while running select query(BUG)
  17. 乔布斯告诉我们的十大成功理念
  18. 中国大学慕课第六周编程题
  19. APP提现之微信服务号红包
  20. 使用Nodejs创建一个Web服务器应如何操作?以及路由相关知识了解

热门文章

  1. 今日头条2018校园招聘后端开发工程师(第二批)编程题 - 题解
  2. Excel中小方框内打√
  3. 墙裂推荐!10个非常有趣的Python库!
  4. 颅脑外伤护理查房PPT模板
  5. 滤波电容,小电容滤高频,大电容滤低频的理解
  6. 考研计算机英语词汇,考研英语词汇(英汉双语对照,完美打印版).pdf-原创力文档...
  7. 韦东山所有课程详细目录介绍(最新)
  8. 大白菜装机教程win10_【技术】Win10系统U盘启动盘制作教程(重装系统必备)
  9. Realm,users,groups 和 roles
  10. java GUI记忆纸牌游戏(memorize game)