• 单片机 数码管的发光


      数码管的显示原理都一样,都靠点亮内部发光二极管来发光。TX-1C 的单片机开发板是6位数码管。数码管的引脚是10个,显示8字需要7个小段,外加一个小数点,共有8个发光二极管,还有一个公共端。公共端分为共阳极和共阴极,共阴极即8个二极管的阴极连在一起,共阳极即8个二极管的阳极连在一起。TX-1C开发板的数码管位共阴极。多为一体的数码管,内部的公共端是独立的,而负责显示什么数字的断线是全部连在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连在一起的段线可以能控制这位数码管能亮出什么数字。公共端叫作位选线,连在一起的段线叫作段选线。有了这两根线,就能通过单片机控制任意的数码管显示任意的数字。

      (1) 数码管的静态显示

             在同一时刻,位选选通的数码管显示的数字始终是相同的,因为它们的段选是连在一起的,所以送入的数码管的段选信号是相同的。数码管的这种显示方法叫静态       显示法。

            6个数码管的位选端与74HC573锁存器U2的低六位连接,锁存器的数据输入端连接到P0口。6个数码管的a、b、c、d、e、f、g、h的引脚分别连在一       起,然后与74HC573锁存器U1的数据输出端连接,锁存器的数据输入端也与P0口相连。U1 、U2的锁存端与P2口的6、7位相连。

          代码

          #include<reg52.h>

          sbit dula=P2^6;    // 申明U1锁存器的锁存端

          sbit wela=P2^7;    // 申明U2锁存器的锁存端

          void main()

          {

              wela=1;      //打开U2锁存器

              P0=0xfe;      //送入位选信号

              wela=0;      //关闭U2锁存器

              dula=1;      //打开U1锁存器

              P0=0x7f;      //送入段选信号

              dula=0;      //关闭U1锁存器

          }

          以上就是数码管静态显示的代码。

       (2)数码管的动态显示

          第一个数码管显示1,时间为0.5秒,然后关闭它。第二个数码管显示2,时间为0.5秒………………

    代码如下:

    #include<reg52.h>

    #define uchar unsigned char

    #define uint unsigned int

    uchar code table_1[]={ 0x1, 0x2, 0x4, 0x8, 0x10, 0x20 };      //位选信号

    uchar code table_2[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };    //段选信号

    void delays(uint);    //延时函数

    uint h;

    void main()

    {

       while(1)

     {   for( h=1; h<=6; h++)

        {    dula=1;            //打开段选

            P0=table_2[h];         // 送入段选信号

            dula=0;            // 关闭段选

            P0=0xff;          // 消影语句,每次送入段选信号后,P0口仍然保留着上次的段选数据,若不加 P0=0xff;  在执行打开位选锁存器命令后,P0口

                            段选数据会立即加在数码管上,,接下来才是再次通过P0口给位选锁存器送入位选数据。这个过程很短暂,但我们仍能看见                         数码管显示混乱的现象。加上消影语句后就能避免这样的状况发生

            wela=1;            // 打开位选

            P0=table_2[h];        //送入位选信号

            wela=0;           // 关闭位选

            delay(500);

        } 

      }  

    }

    void delay( uint xms)          // 延时函数  (在下篇会和锁存器一并作出叙述)

    {

        uint i,j;

        for( i=mxs; i>0; i--)

          for( j=110; j>0; j--);

    }

  • 相关阅读:
    docker compose示例
    mysql表分区案例
    mysql表分区实战
    mysql分表
    MongoDB基础教程系列--目录结构
    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
    网站性能压力测试工具--apache ab使用详解
    tomcat8 JVM 优化
    tomcat8 性能优化
    redis.properties
  • 原文地址:https://www.cnblogs.com/ATMvip/p/2406170.html
Copyright © 2020-2023  润新知