单片机c语言中io取反,单片机小白学步(21) IO口:基本的LED和按键操作
原标题:单片机小白学步(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和按键操作相关推荐
- 单片机c语言中p1asf,基于51单片机的蓄水池自动控制系统 毕业设计.doc
基于51单片机的蓄水池自动控制系统 毕业设计 广西民族大学 第二次综合课程设计报告 论文题目: 基于51单片机的蓄水池自动控制系统 学 院: 物理与电子工程学院 专 业: 自动化 年 级: 2007级 ...
- 在单片机C语言中const是什么意思
在单片机C语言中const unsigned char ov529[5]={0xff,0xff,0xff,SYNC_ID,0x00}前面加const是什么意思?? 表示常量,不允许修改里面的内容.也就 ...
- 单片机c语言的define,单片机C语言中define的妙用
单片机C语言中define的妙用 最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序.问题不大,但暴露了一点问题. 比如:PORTB=0x23; //他的意思是把第5和第2位置1 可是你能一下 ...
- _nop_在c语言里什么作用,单片机c语言中nop函数的使用方法和延时计算
原标题:单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句.但在 的C语言编程中,经常需要用几个空指令产生短延时的效果. 这在汇编语言中很容易实现,写几个nop就行了. 在C51中 ...
- c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位
1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...
- c语言 ——int16,c语言中int取值范围为16位指的是什么16位
匿名用户 1级 2013-10-20 回答 1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中 ...
- 编程c语言中,向上取整函数_C编程中的函数
编程c语言中,向上取整函数 什么是功能? (What is a Function?) A Function is a block of statements that performs a speci ...
- c语言中值程序,编程c语言中,向上取整函数_C编程中的函数
编程c语言中,向上取整函数 什么是功能? (What is a Function?) A Function is a block of statements that performs a speci ...
- 编程c语言中,向上取整函数_C编程中的函数–第3部分
编程c语言中,向上取整函数 Read: Functions in C Programming – Part 2 So far we have learnt about the simplest use ...
最新文章
- 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
- jQuery UI 拖动(Draggable) - 延迟开始
- Leetcode 189. 旋转数组 解题思路及C++实现
- python中 使用join()方法 对各种数据类型中元的素进行合并拼接
- ASE光源 ASE噪声
- 分别在(ModelAtrs)Ascend、(Ubuntu16.04服务器+18.04镜像)GPU、(Ubuntu18.04)CPU下通过MindSpore实现(cifar10)图像分类
- 高中电子技术——指针式万用表调零
- html页面 request,HTML DOM requestFullscreen() 方法
- 主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效
- 《人工智能导论》自然演绎推理
- Chrome浏览器更新失败
- 色彩构成与搭配——人对色彩的感觉
- oracle vm虚拟盒,虚拟盒子内部版下载|虚拟盒子虚拟机下载_最火软件站
- 【复现】deblurGAN: 用GAN使模糊图片变清晰(ECCV2018)
- 百度与吉利联合制造智能电动汽车;霍尼韦尔2020年度10大创新科技揭晓 | 美通企业日报...
- 流程控制语句—顺序、选择、循环
- Docker-compose快速部署PostgreSQL
- 从炒房现象反思当前中国投资环境
- 本地生活服务商家小程序开发解决方案
- 04-学院管理系统数据库-专业管理数据操作