亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 求大神調試單片機數碼管問題 [打印本頁]

作者: 1sdaw123    時間: 2018-5-21 10:01
標題: 求大神調試單片機數碼管問題
為什么單片機上程序效果不好使  我想要數碼管顯示這個數

  1. #include<reg51.h>
  2. #define DataPort P0
  3. sbit duso=P2^1;
  4. sbit weso=P2^2;
  5. unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
  6. unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
  7. unsigned char count_Data[5];//定義count的全局變量

  8. void Display(unsigned int i);
  9. main(unsigned int count)
  10. {
  11. count=116788;
  12. while(1)
  13. {
  14.         count_Data[1]=dofly_DuanMa[count/100000];//第一位數字,十萬位上數字
  15.         count_Data[2]=dofly_DuanMa[(count%100000)/10000];//第二位數字,萬位上數字
  16.         count_Data[3]=dofly_DuanMa[(count%10000)/1000];//第三位數字 千位上數字
  17.         count_Data[4]=dofly_DuanMa[(count%1000)/100];
  18.         count_Data[5]=dofly_DuanMa[(count%100)/10];
  19.         count_Data[6]=dofly_DuanMa[count%10];




  20. }


  21. }        

  22. void Display()
  23. {
  24.       unsigned char i;
  25.          
  26.           for(i=0;i<6;i++)
  27.            {
  28.            DataPort=0;   //清空數據,防止有交替重影
  29.        duso=1;     //段鎖存
  30.        duso=0;

  31.        DataPort=dofly_WeiMa[i+2]; //取位碼
  32.        weso=1;     //位鎖存
  33.        weso=0;

  34.        DataPort=count_Data[i]; //取顯示數據,段碼
  35.        duso=1;     //段鎖存
  36.        duso=0;

  37.          

  38.        }

  39. }
復制代碼




作者: jingwei5267    時間: 2018-5-21 14:54
主函數中沒有發現怎么以調用顯示函數呀~~顯示似乎沒有執行吧??
作者: wulin    時間: 2018-5-21 15:14
想要數碼管顯示count=116788;要定義變量count為 long 類型,分解這么大的數在12MHz時鐘條件下需要耗時約3ms,這會造成數碼管閃爍。給你改主循環一次分解一位,顯示一位。
#include<reg51.h>
#define DataPort P0
sbit duso=P2^1;
sbit weso=P2^2;
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
unsigned char count_Data[6];//定義count的全局變量

void main()
{
        unsigned char i=0;
        unsigned long count=116788;
        while(1)
        {
                switch(i)
                {
                        case 0: count_Data[0]=dofly_DuanMa[count/100000]; break;
                        case 1: count_Data[1]=dofly_DuanMa[count%100000/10000]; break;
                        case 2: count_Data[2]=dofly_DuanMa[count%10000/1000]; break;
                        case 3: count_Data[3]=dofly_DuanMa[count%1000/100]; break;
                        case 4: count_Data[4]=dofly_DuanMa[count%100/10]; break;
                        case 5: count_Data[5]=dofly_DuanMa[count%10]; break;
                }
                DataPort=0;   //清空數據,防止有交替重影
                duso=1;     //段鎖存
                duso=0;               
                DataPort=dofly_WeiMa[i+2]; //取位碼
                weso=1;     //位鎖存
                weso=0;               
                DataPort=count_Data[i]; //取顯示數據,段碼
                duso=1;     //段鎖存
                duso=0;
                i++;
                if(i>=6)
                i=0;
        }
}

作者: HC6800-ES-V2.0    時間: 2018-5-21 16:07
好像我有你這板子,所以我有現成的程序。
看看我寫的(呵呵——得意的笑——新手的表現)
#include<reg51.h>

#define SMG P0//數碼管

sbit DUAN=P2^6;
sbit WEI1=P2^7;

unsigned char code ZF[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77
,0x7c,0x39,0x5e,0x79,0x71,0x00};//標準0~F數碼管顯示碼
unsigned char code WEI[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//控制哪一位數碼管顯示
                                //一次一位,對應最左位→最右位
unsigned char DisplayData[8];//用來存放要顯示的8位數的值,一個管分配一位數組,叫顯示緩存

void DigDisplay()//數碼管動態顯示函數
{
        unsigned char i,j;
        for(i=0;i<8;i++)//只有8個數碼管
        {
                switch(i)         //位選,選擇點亮的數碼管,并賦值顯示內容
                {
                        case(0):
                                SMG=WEI[i];//先選位0(最左邊),后選段
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];//發送段碼
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(1):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(2):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(3):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(4):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(5):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(6):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                        case(7):
                                SMG=WEI[i];
                                WEI1=1;
                                WEI1=0;
                                SMG=DisplayData[i];
                                DUAN=1;
                                DUAN=0;
                                break;
                }
                j=20;//顯示一段時間,再消隱,可以得到穩定的顯示
                while(j--);       
                SMG=0xff;
                WEI1=1;
                WEI1=0;
                SMG=0x00;//消隱
                DUAN=1;
                DUAN=0;//關閉段碼
        }
}

void XSHCFZ (unsigned long j)//顯示緩存賦值
{
        DisplayData[0]=ZF[j/10000000];//將十進制數換算為可顯示字符
        DisplayData[1]=ZF[(j%10000000)/1000000];
        DisplayData[2]=ZF[(j%1000000)/100000];
        DisplayData[3]=ZF[(j%100000)/10000];
        DisplayData[4]=ZF[(j%10000)/1000];
        DisplayData[5]=ZF[(j%1000)/100];
        DisplayData[6]=ZF[(j%100)/10];
        DisplayData[7]=ZF[(j%10)/1];
}

void main(void)
{
        DUAN=0;WEI1=0;
        XSHCFZ(76543210);
        while(1)
        {
                DigDisplay();//顯示
        }                               
}

好像和你的板子有點區別:兩個鎖存器的控制端接的口 不一樣,你自己改一下試試。
作者: 1sdaw123    時間: 2018-5-21 22:30
wulin 發表于 2018-5-21 15:14
想要數碼管顯示count=116788;要定義變量count為 long 類型,分解這么大的數在12MHz時鐘條件下需要耗時約3ms ...

你好 我直接復制的代碼運行到板子上是這個效果

IMG_4143.jpg (2.84 MB, 下載次數: 42)

IMG_4143.jpg

作者: 1sdaw123    時間: 2018-5-21 22:32
wulin 發表于 2018-5-21 15:14
想要數碼管顯示count=116788;要定義變量count為 long 類型,分解這么大的數在12MHz時鐘條件下需要耗時約3ms ...

這是最后效果 我直接復制的代碼

作者: HC6800-ES-V2.0    時間: 2018-5-22 07:16
1sdaw123 發表于 2018-5-21 22:32
這是最后效果 我直接復制的代碼

自己要改程序了,看到你的板子,才知道不是我的板子。但原理差不多。
好像你的573控制口和我的不一樣哦。

作者: wulin    時間: 2018-5-22 10:57
1sdaw123 發表于 2018-5-21 22:32
這是最后效果 我直接復制的代碼

軟件是建立在硬件的基礎上的,首先要了解硬件電路,才能編寫與其相適應的軟件。沒有包打天下的自適應軟件。




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