久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7067|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

多位數(shù)碼管動態(tài)掃描顯示變化數(shù)據(jù),并不停變化數(shù)值 大家能幫我解釋一下這原理嗎??

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66137 發(fā)表于 2014-12-8 22:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個程序是開發(fā)板里面的一個,大家能幫我分析下這個程序的工作原理嗎,先謝謝各位了。。程序如下,我一直都搞不懂.......

/****************************** (C) COPYRIGHT 2013 YQDZ **************************
* 文  件  名      : 999累加.C
* 作      者      : YQDZ
* 版      本      : V1.0
* 日      期      : 2013/07/07
* 主  控  MCU     : STC89C52RC
* 主      頻      : 11.0592MHz
* 編  譯  器      : Keil C51 V4.22
* 描      述      : 多位數(shù)碼管動態(tài)掃描顯示變化數(shù)據(jù),并不停變化數(shù)值。V573需要用短
*                                        路帽短接到VCC,不用時需要移除。
*********************************************************************************/
#include"reg52.h"                                                                                 /* 調(diào)用頭文件,單片機內(nèi)部寄存器都定義在此,用的時候需要先調(diào)用 */

typedef        unsigned char UINT8;                                            /* 給unsigned char重新定義一個別名UINT8,用的時候直接寫UINT8就可以 */
typedef unsigned int  UINT16;                                                        /* 給unsigned int重新定義一個別名UINT16,用的時候直接寫UINT16就可以 */

/******************************** 引腳定義 **************************************
                        單片機                    74HC573
                        P00-P07              DB0-DB7
                         P22                                  LE1
                         P23                                  LE2

                         V573                                  VCC
*********************************************************************************/
#define DataPort P0                                                                         /* 定義數(shù)據(jù)端口,程序中遇到DataPort則用P0替換 */
sbit LE1 = P2^2;                                                                                /* 定義74HC573鎖存使能端口 段鎖存 */
sbit LE2 = P2^3;                                                                                /* 定義74HC573鎖存使能端口 位鎖存 */

UINT8 code DuanMa[ ] = { 0x3F,0x06,0x5B,0x4F,
                                             0x66,0x6D,0x7D,0x07,
                                             0x7F,0x6F };                                        /* 段碼值0-9 */

UINT8 code WeiMa[] = { 0xFE,0xFD,0xFB,0xF7,
                                           0xEF,0xDF,0xBF,0x7F };                        /* 分別對應(yīng)相應(yīng)的數(shù)碼管位碼,決定哪個數(shù)碼管被點亮 */

UINT8 TempData[8];                                                                                 /* 存儲顯示值 */

/*******************************************************************************
* 函  數(shù)  名      : DelayMs
* 描      述      : 毫秒延時.
* 輸      入      : UINT8 Ms:
*                   要延時的Ms時間. Ms值范圍為0-65535,數(shù)值越大延時時間越長
* 返      回      : 無.
*******************************************************************************/
void DelayMs( UINT16 Ms )
{
        UINT8 i;
         
        while (Ms--)
          {
            for ( i = 0; i < 114; i++ );                                        /* 循環(huán)114大概是1MS時間 */
          }
}

/*******************************************************************************
* 函  數(shù)  名      : Display
* 描      述      : 顯示函數(shù),用于動態(tài)掃描數(shù)碼管
* 輸      入      : UINT8 FirstBit:
*                                        要顯示的位
*                                        UINT8 Num:
*                                        要顯示的數(shù)碼管的位數(shù)
* 返      回      : 無.
********************************************************************************/
void Display( UINT8 FirstBit, UINT8 Num )
{
        UINT8 i;
         
        for( i = 0; i < Num; i++ )
        {
                DataPort=0;                                                                           /* 清空數(shù)據(jù),防止有交替重影 */
               LE1 = 1;                                                                             /* 段鎖存 */
               LE1 = 0;

               DataPort = WeiMa[ i + FirstBit ];                                /* 取位碼 */
               LE2 = 1;                                                                             /* 位鎖存 */
               LE2 = 0;

               DataPort = TempData[ i ];                                                 /* 取顯示數(shù)據(jù),段碼 */
               LE1 = 1;                                                                             /* 段鎖存 */
               LE1 = 0;

                   DelayMs(5);                                                                         /* 掃描間隙延時,時間太長會閃爍,太短會造成重影 */
        }
}

/*******************************************************************************
* 函  數(shù)  名      : main
* 描      述      : 主函數(shù)
* 輸      入      : 無.
* 返      回      : 無.
********************************************************************************/
void main (void)
{
        UINT16 Num;
         UINT16 j = 0;
         
        while( 1 )
    {
            j++;                                            /* 計數(shù)次數(shù)加1 */
                   if( j == 5 )                                                                      /* 檢測當(dāng)前數(shù)值顯示了一小段時間后,需要顯示的數(shù)值加1,實現(xiàn)數(shù)據(jù)顯示的變化 */
            {
                        j = 0;                                      /* 計數(shù)重新開始 */
                          Num++;                                      /* 顯示數(shù)據(jù)加 1 */
                          if( Num == 1000 )                                                        /* 用于顯示0-999 */
                    Num = 0;                                    /* 重新從0開始顯示 */

                }
               
                TempData[ 0 ] = DuanMa[ Num / 100 ];                        /* 計算顯示數(shù)據(jù)對應(yīng)段碼的數(shù)據(jù)成員,如要顯示68,則68/10=6  68%10 = 8 */
                   TempData[ 1 ] = DuanMa[ ( Num % 100 ) / 10 ];
                   TempData[ 2 ] = DuanMa[ ( Num % 100 ) % 10 ];
                   Display( 2, 3 );                                /* 調(diào)用顯示程序 */
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:836364 發(fā)表于 2020-11-3 20:45 | 只看該作者
首先你得明白動態(tài)掃描的工作原理,這個多位數(shù)碼管一般分為兩個東東,一個是數(shù)據(jù)位,另一是地址位,數(shù)據(jù)位主要是顯示數(shù)字之類的東東的,而地址位是選擇那個位置的led燈亮的
回復(fù)

使用道具 舉報

板凳
ID:826942 發(fā)表于 2020-11-4 12:30 | 只看該作者
數(shù)碼管顯示的原理是快速的循環(huán)掃描顯示數(shù)字,利用人眼睛視覺差達(dá)到同時顯示的效果,比如顯示268,就是在TempData[ 0 ]顯示數(shù)字2,其他數(shù)碼管不顯示,延遲5毫秒后,在TempData[ 1 ]顯示數(shù)字6,其他數(shù)碼管不顯示,延遲5毫秒后,在TempData[ 2]顯示數(shù)字8,其他數(shù)碼管不顯示,延遲5毫秒后,又回到最開始的TempData[ 0 ]顯示數(shù)字2,其他數(shù)碼管不顯示上,如此循環(huán),因為顯示刷新的頻率快和人眼的視覺差的原因,你看到的就是268同時顯示。
具體到數(shù)碼管的顯示上有分段選和位選,就是8位數(shù)碼管顯示那一個數(shù)碼管,就是這段代碼
UINT8 code WeiMa[] = { 0xFE,0xFD,0xFB,0xF7,
                                           0xEF,0xDF,0xBF,0x7F };                        /* 分別對應(yīng)相應(yīng)的數(shù)碼管位碼,決定哪個數(shù)碼管被點亮 */
比如顯示268,就是在TempData[ 0 ]顯示數(shù)字2,這段就是選擇點亮TempData[ 0 ],
UINT8 code DuanMa[ ] = { 0x3F,0x06,0x5B,0x4F,
                                             0x66,0x6D,0x7D,0x07,
                                             0x7F,0x6F };                                        /* 段碼值0-9 */
這段就是決定在TempData[ 0 ]上顯示的數(shù)字是2.
回復(fù)

使用道具 舉報

地板
ID:213173 發(fā)表于 2020-11-4 12:44 | 只看該作者
把程序簡化一下便于樓主理解
#include"reg52.h" /* 調(diào)用頭文件,單片機內(nèi)部寄存器都定義在此,用的時候需要先調(diào)用 */

typedef unsigned char UINT8;/* 給unsigned char重新定義一個別名UINT8,用的時候直接寫UINT8就可以 */
typedef unsigned int  UINT16;/* 給unsigned int重新定義一個別名UINT16,用的時候直接寫UINT16就可以 */

sbit LE1 = P2^2;   /* 定義74HC573鎖存使能端口 段鎖存 */
sbit LE2 = P2^3;   /* 定義74HC573鎖存使能端口 位鎖存 */

UINT8 code DuanMa[ ] = { 0x3F,0x06,0x5B,0x4F,
                         0x66,0x6D,0x7D,0x07,
                         0x7F,0x6F };  /* 段碼值0-9 */
UINT8 code WeiMa[] = { 0xFE,0xFD,0xFB,0xF7,
                       0xEF,0xDF,0xBF,0x7F };/* 分別對應(yīng)相應(yīng)的數(shù)碼管位碼,決定哪個數(shù)碼管被點亮 */
UINT8 TempData[8];   /* 存儲顯示值 */

void DelayMs(UINT16 Ms)
{
        UINT8 i;
        while (Ms--)
        {
                for(i=0;i<114;i++);/* 循環(huán)114大概是1MS時間 */
        }
}

void main (void)
{
        UINT16 Num=0,j=0;
        UINT8  i=0;
        while(1)
        {
                j++;
                if(j==1000)//約1秒
                {
                        j=0;
                        Num++;
                        if(Num==1000)
                                Num = 0;
                }//數(shù)據(jù)按十進(jìn)制分解后保存在顯示緩存中
                TempData[0] = DuanMa[Num/100%10];/* 計算顯示數(shù)據(jù)對應(yīng)段碼的數(shù)據(jù)成員,如要顯示68,則68/10=6  68%10 = 8 */
                TempData[1] = DuanMa[Num/10%10];
                TempData[2] = DuanMa[Num%10];

                P0=0x00;/* 清空數(shù)據(jù),防止有交替重影 */
                LE1 = 1;   /* 段鎖存 */
                LE1 = 0;
               
                P0=WeiMa[i];/* 取位碼 */
                LE2 = 1;/* 位鎖存 */
                LE2 = 0;
               
                P0=TempData[i]; /* 取顯示數(shù)據(jù),段碼 */
                LE1 = 1;  /* 段鎖存 */
                LE1 = 0;
                i++;
                if(i==3)
                        i=0;
                DelayMs(1);//控制主循環(huán)周期約1ms
        }
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人黄色av网站 | 久久精品影视 | 中文字幕99 | 亚洲成人免费视频在线 | 青娱乐一区二区 | 成人在线视频一区 | 欧美日韩不卡合集视频 | 韩日在线观看视频 | 日韩欧美在线视频 | 国产精品免费一区二区 | 97碰碰碰| 国产视频久久久 | 另类视频在线 | 久草视频观看 | 综合国产第二页 | 欧美亚洲综合久久 | 国产亚洲精品精品国产亚洲综合 | 国产高清精品在线 | 亚洲国产一区二区三区四区 | 91麻豆精品国产91久久久久久 | 欧美一区二区激情三区 | 成人18亚洲xxoo | 国产成人精品一区二区三区视频 | 一区在线视频 | 日本a网站 | 久久91av | 欧美一级片中文字幕 | 亚洲视频观看 | 黑人巨大精品欧美一区二区免费 | 成人综合一区 | 在线精品一区二区三区 | 激情国产视频 | 一区二区视频免费观看 | 久久精品国产99国产精品亚洲 | 国产高清一区二区三区 | 国产九九av| 久久99久久99 | 日韩和的一区二在线 | 亚洲第一色站 | 一区二区三区在线 | 影视先锋av资源噜噜 |