原标题:单片机小白学步(21) IO口:基本的LED和按键操作

本篇我们先介绍最基础的几个IO口操作。学完本篇,大家要能自己独立完成下面几个实验。

1、点亮

2、一个按键控制LED,按下灯亮,释放灯灭

3、两个按键控制一个LED,一个键开灯,一个键关灯

实验一

点亮LED的例子前面入门篇已经讲过了,程序写起来很简单,Keil编写程序并编译生成HEX文件,烧写进的过程,也做了完整详细的介绍。

点亮LED利用了IO口输出操作。简单复习一下,最核心的两句代码是:

sbit LED = P1^0;

LED = 0;

第一句定义LED为sbit型变量,对应了P1.0口的高低电平,具体应该写哪个IO口,和实际电路有关。第二句设置LED对应的P1.0管脚输出低电平,从而点亮LED。

实验二:按键开关

讲第二个实验前,先简单介绍下常用的按键开关。下图就是最常见的按键开关,有四个引脚,图中的1、2连在一起,3、4连接在一起。按下按键时,四个引脚就全部导通了。

实验二:搭建电路

根据前面讲的IO口原理,我把按键开关一端接在P2.0端口了,另一端接到GND。因为P2.0有内部,我就不用自己外接了。最小系统和LED还是之前的电路不变,如下图所示。

实验二:程序实现

程序首先定义了LED和KEY,分别表示发光二极管和按键开关。如果你用的是成品开发板,或者电路和我的不一样,就定义你的电路中对应的管脚。开发板可以从电路图查看独立按键所在的管脚。

主函数刚开始时,设置KEY输出高电平,因为后面要读取KEY所在端口的电平。在程序的主循环中,读取KEY的值,这里我们直接把KEY当做一个一位变量去判断就可以了,它有值0和1。如果KEY为1,即KEY==1,说明按键没有按下,设置LED=1即熄灭。注意这里使用两个等号表示比较而不能用一个等号,那样就成赋值了。在else中,设置LED=0即点亮。于是就能实现我们需要的效果了。

#include

sbit LED = P1^0;

sbit KEY = P2^0;

void main()

{

KEY = 1;

while(1) {

if(KEY == 1) {

LED = 1;

} else {

LED = 0;

}

}

}

这是我按下按键,灯亮时的情形。

实验二:程序分析

注意这里我们读取按键和开关LED的代码应该放在主循环里面,也就是不断的读取按键状态并开关灯。如果放在主循环前面,主函数写成下面这样,是不能工作的。因为单片机执行速度很快,放在循环前面只会读取按键执行一次,执行完了进入while(1)主循环,单片机就不会再读取按键的状态,这时无论如何按键,它都不会帮你开关LED了。

void main()

{

KEY = 1;

if(KEY == 1) {

LED = 1;

} else {

LED = 0;

}

}

程序简化

还要说的是,这个程序还能进一步简化。因为KEY是一个变量,在C语言中变量有真假值,非零为真,零为假。所以主循环中可以这样写(其他部分相同):

if(KEY) {

LED = 1;

} else {

LED = 0;

}

但是还可以继续简化。因为LED和KEY都是变量,可以考虑直接用KEY给LED赋值,写成下面这样就行了。

LED = KEY;

取反操作的应用

如果要实现按下按键灯灭,释放按键灯亮这样恰好相反的效果,做个很小的修改就可以了,如下所示。感叹号是逻辑取反的意思,如果是0就会变成1,如果是非0就变成0。

LED = !KEY;

实验三

实验三我只提供主要代码片段,具体的分析理解,实际电路搭建和实验,交给大家自己完成。

sbit KEY_ON = P2^0;

sbit KEY_OFF = P2^1;

while(1) {

if(KEY_ON == 0)

LED = 0;

if(KEY_OFF == 0)

LED = 1;

}

再次强调,如果想学好单片机,大家一定要自己独立做完这三个实验,切身体验单片机的工作过程,提高动手能力。如果做实验的过程中感觉很神奇,感受到动手的乐趣,就更容易学好单片机。如果你觉得这只是不想做的任务,或许你对单片机并没有什么兴趣,那样的话想学好单片机就有些困难了。因为学习从来都应该是主动的事情。

下一篇会继续讲IO口相关的实验。

=======================================================

责任编辑:

单片机c语言中io取反,单片机小白学步(21) IO口:基本的LED和按键操作相关推荐

  1. 单片机c语言中p1asf,基于51单片机的蓄水池自动控制系统 毕业设计.doc

    基于51单片机的蓄水池自动控制系统 毕业设计 广西民族大学 第二次综合课程设计报告 论文题目: 基于51单片机的蓄水池自动控制系统 学 院: 物理与电子工程学院 专 业: 自动化 年 级: 2007级 ...

  2. 在单片机C语言中const是什么意思

    在单片机C语言中const unsigned char ov529[5]={0xff,0xff,0xff,SYNC_ID,0x00}前面加const是什么意思?? 表示常量,不允许修改里面的内容.也就 ...

  3. 单片机c语言的define,单片机C语言中define的妙用

    单片机C语言中define的妙用 最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序.问题不大,但暴露了一点问题. 比如:PORTB=0x23; //他的意思是把第5和第2位置1 可是你能一下 ...

  4. _nop_在c语言里什么作用,单片机c语言中nop函数的使用方法和延时计算

    原标题:单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句.但在 的C语言编程中,经常需要用几个空指令产生短延时的效果. 这在汇编语言中很容易实现,写几个nop就行了. 在C51中 ...

  5. c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位

    1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...

  6. c语言 ——int16,c语言中int取值范围为16位指的是什么16位

    匿名用户 1级 2013-10-20 回答 1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中 ...

  7. 编程c语言中,向上取整函数_C编程中的函数

    编程c语言中,向上取整函数 什么是功能? (What is a Function?) A Function is a block of statements that performs a speci ...

  8. c语言中值程序,编程c语言中,向上取整函数_C编程中的函数

    编程c语言中,向上取整函数 什么是功能? (What is a Function?) A Function is a block of statements that performs a speci ...

  9. 编程c语言中,向上取整函数_C编程中的函数–第3部分

    编程c语言中,向上取整函数 Read: Functions in C Programming – Part 2 So far we have learnt about the simplest use ...

最新文章

  1. 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
  2. jQuery UI 拖动(Draggable) - 延迟开始
  3. Leetcode 189. 旋转数组 解题思路及C++实现
  4. python中 使用join()方法 对各种数据类型中元的素进行合并拼接
  5. ASE光源 ASE噪声
  6. 分别在(ModelAtrs)Ascend、(Ubuntu16.04服务器+18.04镜像)GPU、(Ubuntu18.04)CPU下通过MindSpore实现(cifar10)图像分类
  7. 高中电子技术——指针式万用表调零
  8. html页面 request,HTML DOM requestFullscreen() 方法
  9. 主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效
  10. 《人工智能导论》自然演绎推理
  11. Chrome浏览器更新失败
  12. 色彩构成与搭配——人对色彩的感觉
  13. oracle vm虚拟盒,虚拟盒子内部版下载|虚拟盒子虚拟机下载_最火软件站
  14. 【复现】deblurGAN: 用GAN使模糊图片变清晰(ECCV2018)
  15. 百度与吉利联合制造智能电动汽车;霍尼韦尔2020年度10大创新科技揭晓 | 美通企业日报...
  16. 流程控制语句—顺序、选择、循环
  17. Docker-compose快速部署PostgreSQL
  18. 从炒房现象反思当前中国投资环境
  19. 本地生活服务商家小程序开发解决方案
  20. 04-学院管理系统数据库-专业管理数据操作

热门文章

  1. linux 配置oracle instantclient
  2. [python]线性规划作图及求解
  3. QPainter 绘制阴影边界
  4. 软考 java程序设计,软考程序员考点Java语言程序设计之控制流语句分类
  5. 简道云--公式与函数的使用教程
  6. matlab 热传导方程,热传导方程有限差分法的MATLAB实现
  7. 头戴蓝牙耳机+变形金刚联名手表+巧克力键盘
  8. CPDA : 数据分析师常见面试题
  9. 英语单词:profile
  10. SAS应用入门学习笔记1