欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機利用switch_case語句實現(xiàn)數(shù)碼管的動態(tài)顯示程序問題 [打印本頁]

作者: maomaoaichiyu    時間: 2020-10-30 18:11
標題: 51單片機利用switch_case語句實現(xiàn)數(shù)碼管的動態(tài)顯示程序問題
剛剛才開始接觸單片機,
今天學到利用switch-case語句實現(xiàn)數(shù)碼管的動態(tài)顯示以及多參數(shù)的分時顯示,
不知道為啥第二個和第四個數(shù)碼管一直沒有辦法顯示,
希望各位大佬能幫忙看看



第二個數(shù)碼管和第四個數(shù)碼管一直無法顯示

主調(diào)函數(shù):main.c

#include<reg51.h>
#include"delay.h"
#include"display.h"
unsigned char wnd   ; //窗口變量
unsigned char parm1 = 44 ; //每一個窗口變量下設(shè)一個參數(shù)
unsigned char parm2 = 55 ;
unsigned char parm3 = 66 ;
unsigned char parm4 = 77 ;
void dis_service() ;
void main()
{
   unsigned int i ;
   for(i=0 ; i<5000 ; i++)
   {
     Display() ;
   }
   while(1)
   {
      dis_service();
         }

}
//應(yīng)用層的功能函數(shù)
void dis_service()
{
unsigned int i ;     
switch(wnd) //窗口變量默認(初始化)為0
         {
           case 0 :
                LEDBUF[0] = 0;
                        LEDBUF[1] = 22;
                        LEDBUF[2] = parm1/10;
                        LEDBUF[3] = parm1%10;
                     for(i=0 ; i<5000 ; i++)
            {
               Display() ;
            }           
                        wnd++ ;
                        break ;
           case 1 :
                LEDBUF[0] = 0;
                        LEDBUF[1] = 22;
                        LEDBUF[2] = parm2/10;
                        LEDBUF[3] = parm2%10;
                     for(i=0 ; i<5000 ; i++)
            {
               Display() ;
            }           
                        wnd++ ;
                        break ;               
           case 2 :
                LEDBUF[0] = 0;
                        LEDBUF[1] = 22;
                        LEDBUF[2] = parm3/10;
                        LEDBUF[3] = parm3%10;
                     for(i=0 ; i<5000 ; i++)
            {
               Display() ;
            }           
                        wnd++ ;
                        break ;               
           case 3 :
                LEDBUF[0] = 0;
                        LEDBUF[1] = 22;
                        LEDBUF[2] = parm4/10;
                        LEDBUF[3] = parm4%10;
                     for(i=0 ; i<5000 ; i++)
            {
               Display() ;
            }           
                        wnd = 0 ;
                        break ;               
           default : break ;
           }

底層數(shù)碼管的驅(qū)動函數(shù):display.c

#include"display.h"
#include"delay.h"

unsigned char code leddata [] = {                                                                        

                    0x3F,   //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義
                                                            };

unsigned char LEDBUF [] ={8,8,8,8} ;                                                   
unsigned char code PLACE_CODE[] = {0xfe,0xfd,0xfb,0xf7};               

void Display ()         
{
   unsigned char i ;
   switch(i)
   {
     case 0 :
             GPIO_DIG   = leddata[LEDBUF[0]] ;
                 GPIO_PLACE = PLACE_CODE[0]        ;
                 DelayXms(1);
                 GPIO_DIG = 0x00 ;
                 i++ ;
                 break ;
        case 1 :
             GPIO_DIG   = leddata[LEDBUF[1]] ;
                 GPIO_PLACE = PLACE_CODE[1]        ;
                 DelayXms(1);
                 GPIO_DIG = 0x00;
               i++ ;
                 break;
         case 2 :
             GPIO_DIG   = leddata[LEDBUF[2]] ;
                 GPIO_PLACE = PLACE_CODE[2]        ;
                 DelayXms(1);
                 GPIO_DIG = 0x00 ;
                 i++ ;
                 break ;
         case 3 :
             GPIO_DIG   = leddata[LEDBUF[3]] ;
                 GPIO_PLACE = PLACE_CODE[3]        ;
                 DelayXms(1);
                 GPIO_DIG = 0x00 ;
                 i = 0 ;
         default : break ;
   }
         i++;            
         if(N == i)
         i = 0 ;
}


函數(shù)的聲明:delay.h

#ifndef __DISPLAY_H__
#define __DISPLAY_H__

#include<reg51.h>

/*宏定義*/
//IO的聲明
#define GPIO_DIG      P0  
#define GPIO_PLACE    P2  //

#define N             4   

unsigned char code leddata [] ;
extern unsigned char LEDBUF [] ;

void Display() ;


#endif




作者: wulin    時間: 2020-10-31 06:30
樓主把P2作紅色數(shù)碼管的段驅(qū)動,P2.0~2.3作藍色數(shù)碼管的位驅(qū)動。由于紅色數(shù)碼管的公共端接地,在硬件電路不改變的情況下無法消除相互干擾。其實可以合并按5位數(shù)碼管寫程序,段碼共用P0,位碼P2.0~2.4。當然也可以只改紅色數(shù)碼管的公共端接某空閑端口實現(xiàn)P2共用,分時控制。樓主注意,此仿真軟件用于數(shù)碼管動態(tài)顯示時對消隱很敏感,處理不好會出現(xiàn)異常。
作者: fj51hei    時間: 2020-10-31 08:50
wulin 發(fā)表于 2020-10-31 06:30
樓主把P2作紅色數(shù)碼管的段驅(qū)動,P2.0~2.3作藍色數(shù)碼管的位驅(qū)動。由于紅色數(shù)碼管的公共端接地,在硬件電路不 ...

消隱是哪個時間段




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1