单片机:显示器件及开关,键盘的接口设计

单片机与显示器件及开关,键盘的接口设计

单片机与显示器件以及开关,键盘的接口设计

掌握单片机控制发光二极管显示

大部分发光二极管工作电流1~5mA之间,其内阻为20-100Ω,电流越大,亮度也越高。

为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要,一般串接电阻。若供电电压为+5V,则限流电阻可选1-3kΩ

单片机与发光二极管的连接

单片机并行端口P1-P3直接驱动发光二极管,电路图如下:

图1通过I/O口接发光二极管的阳极,发光二极管的阴极就接地。I/O口内部开漏,高电平经过发光二极管,即高电平驱动。(I/O口内部接了一个上拉电阻,阻值30KΩ,就是+5V下面这个)高电平驱动不是不可以,只是比较微弱,加上拉电阻电流约为160微安。

图2高电平接发光二极管的阳极,阴极通过I/O口接地,从外部流向内部。低电平驱动。外部+5V电压接上拉电阻。

I/O口的编程举例

对单片机I/O口进行编程控制时,需要对I/O口的SFR进行声明,在C51,编译器中,这项声明包含在头文件reg51.h中,编程时,可通过预处理命令#include<reg51.h>,把这个头文件包含进去

例:制作流水灯,8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。(低电平点亮

#include<reg51.h>
#include<intrins.h>		//包含移位函数_crol_()的头文件
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)		//延时函数
{
    uchar t;
    while (i--)
    {
        for(t=0;t<120;t++);
    }
}
void main()			//主程序
{
    P1=0xfe;		//向P1口送出点亮数据
    while(1)
    {
        delay(500);		//500为延时参数,可根据实际需要调整
        P1=_crol_(P1,1);//函数_crol_(P1,1)把P1中的数据循环左移1位
    }
}

程序说明

  • while(1)的两种用法:

"while(1);":while(1)后有分号,是使程序停留在这指令上;

while(1){……;}”:反复循环执行大括号内程序段。本例用法,即控制流水灯反复循环显示。

  • 循环左移函数(_crol_)和循环右移函数(_cror_

本例用循环左移函数,括号第1个参数为循环左移对象,即对P1中的内容循环左移;第2个参数为左移位数,即左移1位。编程中一定要把含有移位函数的头文件intrins.h包含在内,例如第二行#include<intrins.h>

循环左移的意思就是移出的那个不管是0或者1都放在参数的后半部分。不是添0。

掌握单片机的开关状态检测