用户工具

站点工具


侧边栏

抱歉,您没有权限增加页面
4.单片机入门教程:4.stc单片机io口模式

单片机入门教程之IO口模式配置

if你是电子小白,else关于数电和模电的理论基础,请自行补充相关知识。如果这些基础都不会,只凭一时热度而去学单片机,是学不好的哈。在学单片机之前,建议你去买一块面包板,一些LED灯和常用电阻电容二极管三极管芯片,用所学的数电模电知识搭一些简单的电路来找找感觉。多动手实践,从电子小制作开始,步步积累电路原理。

实验一,实验现象:
点亮STC51 Discovery板上一个LED灯

二.实验原理
用电池接灯泡都玩过吧 ,那么怎样用单片机来点亮一个LED灯呢?电流的流通首先要形成回路,我们可以把单片机连接LED一端的管脚输出1或者输出0,LED的另一极接地或者接电源,这样就可以点亮喽,So Easy !单片机IO口直接驱动LED方式有两种,IO口输出高电平1叫拉电流驱动,输出低电平0叫灌电流驱动。板子上采用拉电流的方式来驱动,同时板子上的LED负极接到PNP型三极管的发射集,通过IO控制基极使三极管导通来接地形成回路,看下面的原理图,以点亮板子上D2为例:

三:代码流程
1.首先把连接PNP型三极管基极的IO口P1.4输出低电平,使三极管导通形成回路。
2.其次使连接D2的IO口P0.0输出高电平,由于单片机默认IO口类型为准双向口,拉电流只有几百个微安,电流不足以驱动LED灯,所以要先把IO口配置成强推挽模式,强推挽模式输出电流可达20毫安。

四:代码演示

五:代码解释(看前灰色框中红色行号)
1.第3行,引用STC12系列头文件,引用头文件使用关键字:#include < xxx.h >
2.第5行,声明管脚位定义,代表你想单独控制哪个管脚上的东西,使用关键字sbit,如:此处P1口的P1.4管脚接三极管的基极,就这样声明:sbit LED = P1^4;
3.第7行,main函数入口,一个程序中只能有一个main函数入口。
4.第9行,LEDK = 0,表示把P1.4管脚置低电平使PNP三极管导通
5.第10行,IO口直接赋值操作,如:P0=0x00表示把P0口八个管脚全部输出低电平
6.第11-12行,IO口寄存器配置,配置为推挽输出电流才能驱动LED,如图:

7.第13行,while(1)大循环,进去一直执行里面的内容,一个完整的程序必须有一个大循环,否则程序跑一遍就停止了。
8.第15行,IO口直接赋值操作,P0口最低位置低电平(0000 0001),即P0.0点亮LED。

注:本代码完整工程在stc51 discovery开发板【实验例程】【基础实验】【实验一】 好了,自己写一遍代码然后下载到板子上看下效果吧……

实验二,实验目的
让一个灯不停亮灭闪烁起来

二:原理流程
通过上面的学习,会点亮一个灯了吧,那么怎样让这个灯闪烁起来呢?闪烁灯,顾名思义,就是亮一下,延时等待一会,再灭一下,延时一会,就构成了闪烁效果。单片机怎样来延时呢?由于单片机运行是单线程的,也就是一条语句接着一条语句向下执行,执行一条指令的时间属于微秒级别的,要达到长延时效果,我们可以使用一个for循环不停的让单片机在原地打转,转个几万次,延时就出来了。

三:代码演示

注:本代码完整工程在stc51 discovery开发板【实验例程】【基础实验】【实验二】

四:代码解释
关于语句的意思,第一个实验已经说了,好好分析一下吧,明白每条语句的意思,恭喜,你会简单的控制单片机的IO口了,可以焊一个心形的闪烁灯拿去哄MM了……

五:基础练习
1.试试如何让P0口的两个灯同时亮起来,或者交替闪烁。
2.尝试写一个流水灯,就是八个灯,第一个亮一会灭掉,然后接着邻近的第二个灯亮一会然后灭……直到第八个,如此循环构成流水灯效果。

这里我在说说如何操作寄存器吧,上面的IO口设置成推挽输出可能有些童鞋看不懂,为什么要写成P0M1=0x00; P0M0=0xff; 其实P0M1和P0M0是两个寄存器的名字,这两个寄存器是8位的,向每个位写0或者写1就代表了IO口一种功能。如下图:

功能设置组合如下:

例子:
如果要把P0.0口设置成推挽输出其他口为准双向口,只要把P0M1的最低位B0写成0,P0M0的最低位B0写成1,即P0M1 = 0x00; P0M0 = 0x01; 其他IO口功能设置方法以此类推,具体请看数据手册第87页。

4.单片机入门教程/4.stc单片机io口模式.txt · 最后更改: 2017/03/03 16:37 由 wawooo