先说一下IO口
IO(Input/Output)
也就是说它可以输出高电平或低电平
并且它所使用的电平为TTL
逻辑1为5v
逻辑0为0v
可上下波动,具体请看附连
单片机是一种可编程设备
也就是可以用程序进行控制
我们所用的12系列一共有40引脚
如图:
除了某些特定功能引脚以外,大都可以用程序操控
(PS:因为本帖不涉及IO口模式变更,所以不在此赘述)
先看一下IO口的通常用法
(在此之前先声明一下,因为IO口驱动能力有限通常使用低电平导通器件(外设))
用IO口控制三极管,以此来驱动外设
如我们板子上的LED与数码管
用的全是低电平导通(9012)
并且为了防止IO口驱动能力不够,使用了74HC245驱动芯片
(PS:为了防止电流过大烧坏器件,图中都加了限流电阻)
至此,IO口就了解这么多
接下来是LED
首先找出LED与单片机的物理链路
P0口(P0.0-0.7,一共8个口)与74HC245输入口相连
并且,要想74HC245输出,应将OE置低
那么OE连在哪里?
P1.1引脚
此时,还要打开LED的输入端
也就是38译码器的Y6
6换算成二进制110
也就是P2.0=0;P2.1=1;P2.2=1;
综上,要想让LED亮,需要
P0,P1.1,P2.0-2
这12个引脚
先添加头文件
#include<stc12c5a60s2.h>//单片机的头文件
如果是89系列也可以使用此文件(但部分功能不支持)
(如果添加失败,请参照序章)
然后再用sbit声明这些引脚
如:
(不一定非要用大写,笔者为了便于后期整合所以使用大写)
然而,对于P0口来说,这种声明方法非常麻烦
我们可以再不需要声明的情况下进行整体赋值
如:
此时使用16进制给P0口赋值
则从高位到低为依次为
1010 1010//0xaa
我们将LED使能打开,将245驱动打开
则:
使用KEIL软件,生成HEX文件(详见序章)
使用STC-ISP先导入程序然后进行下载
(PS:提示和单片机握手时,需进行断电再上电一次,也就是按开关)
最后效果
LED灯隔一个亮一个
若要进行流水
可以写如下程式
(此时我使用下载器自带软件延时功能,也可以自己编写,建议先自己编写后对照使用)
关于如何编写软件延时函数
基本方法是让机器执行一些无用的循环
如:
unsigned int a;
for(a=0;a<60000;a++);(这里不能使其大于某一数值,否则会发生错误,应该是数据位宽不够造成的)
之类的,并不精确,并且浪费MCU资源
这就是这篇的内容-LED与IO
|