5.2 直接驱动LED显示
5.1节介绍了单片机系统中的输入部分内容,本节将讲述单片机系统另外一个重要的部分:输出模块。
5.2.1 实例说明
在一个系统中,输入和输出是最基本也是最重要的组成部分,输入部分实现了人们对系统的控制,而输出则向人们展示了系统目前的工作状态。输出部分有很多种,本节将讲述一种基本的输出模块,即LED数码管。读者通过本节内容的学习,将了解LED数码管的工作原理和硬件电路连接方式,同时掌握LED数码管的软件编写流程。
5.2.2 LED数码管知识
LED数码管其实就是由一组LED灯组成的,共包括a、b、c、d、e、f、g、dp八位,其中a~g七位组合可以显示0~9的任意数字,dp位用于显示小数点。
LED数码管又分为共阴极和共阳极两种,所谓共阴极就是把8个发光二极管的阴极连接到一起,通过一个公共引脚接到电源地;而共阳极则是所有阳极连接到一起接到电源的正极。在本例中采用的是共阴极LED数码管。
另外,为了限制通过发光二极管的电流,保护二极管不被烧毁,在每个二极管的输入端串联了一个限流电阻,阻值一般为5kΩ。
5.2.3 硬件电路设计
LED数码管显示电路原理图如图5-3、图5-5所示,电路连接较简单。其中,图5-3是单片机部分的复位和晶振电路图;图5-5则是LED数码管的接线图。由于PIC每个引脚可以提供25mA的驱动电流,所以可以用直接驱动LED数码管显示。
图5-5 LED数码管的接线图
5.2.4 软件设计
直接驱动单个LED数码管程序相对较简单,因为本例中只驱动了一个数码管,不需要再添加控制位来选择向哪个数码管输入显示数据。在实际应用中若需要用到几个数码管同时显示,则可以再加入专门驱动LED数码管的芯片,例如,串入并出的移位寄存器74LS164以及SPI接口的移位寄存器74HC595等。用户可以根据设计系统时的不同资源情况进行选择。
本程序设计流程图如图5-6所示,其中RB口是PIC单片机的一个8位端口,在本程序执行过程中需设置RB口为输出。
图5-6 程序设计流程
程序代码与注释如下:
#include <pic.h> #include <pic1687x.h> __CONFIG(WDTDIS & HS & LVPDIS & DEBUGDIS); //*该程序用于在LED上依次循环显示0~9 static volatile unsigned char table[11]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0XD8, 0x80,0x90,0xff}; void delay(void) { int x,y; for(x=0;x<100;x++) for(y=0;y<1000;y++); } //*主程序*/ main() { unsigned char i,data; TRISB=0; //设置RB口为输出 while(1) { for(i=0;i<10;i++) //*连续发送8个数据*/ { data=table[i]; //*通过数组的转换获得待显示的段码*/ RB=(data); //*发送显示段码显示*/ delay(); //延时 } } }
5.2.5 实例总结
本节实现了如何直接驱动LED显示。通过本节内容的学习,读者应掌握LED数码管的硬件电路设计和程序的编写方法。LED数码管是单片机系统中常常用到的一种简单的显示系统,在实际应用中,用户需要根据系统的实际情况和具体要求灵活应用,选择合适的LED数码管个数及驱动方式。