PIC单片机常用模块与综合系统设计实例精讲
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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数码管个数及驱动方式。