本篇咱们先介绍最根底的几个IO口操作。学完本篇,咱们要能自己独立完结下面几个试验。
1、点亮LED
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口相关的试验。
=======================================================