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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc8g1k17的三位數(shù)碼管顯示問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1135888 發(fā)表于 2024-12-24 17:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
三位數(shù)碼管的顯示問題,因為之前的掃描方式亮度不均勻,換了下面這種掃描方式,但更換后發(fā)現(xiàn)數(shù)值顯示有問題 如我輸入值為 1.1  數(shù)碼管三位 應(yīng)為 1  .   1     0  ; 實際顯示我拍照了 請看大圖        
調(diào)試了一下 disx 值 固定為 0 ,1  , 2 , 3時 對應(yīng)的位選上顯示的數(shù)值都是正常的 ,但是設(shè)為 disx++; 后就不正常了 。
小白技術(shù)不太行 尋求幫助,給我點思路 ,我自己修改就可以的 感謝
#include    "smg.h"
#include    "STC8H.H"
#include     "button.h"
#include    "eeprom.h"
extern void abc(int c);
// 數(shù)碼管位選引腳定義
#define DIGIT1 P13
#define DIGIT2 P15
#define DIGIT3 P17
#define DIGIT4 P10
unsigned char segmentCodes[] = {
    0x3F, // 0
    0x06, // 1
    0x5b, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F, // 9
    0x80, // .

};

void smg_io_init()
{
    P1M0 |= 0xee;
    P1M1 &= ~0xee;
    P3M0 |= 0x31;
    P3M1 &= ~0x31;
    P5M0 |= 0x30;
    P5M1 &= ~0x30;

    SEG_A  = 0;
    SEG_B  = 0;
    SEG_C  = 0;
    SEG_D  = 0;
    SEG_E  = 0;
    SEG_F  = 0;
    SEG_G  = 0;
    SEG_DP = 0;  
}

char dppos = 0; // 默認(rèn)小數(shù)點位置在最后一位(百分位)
char displayBuffer[4] = {0}; // 存儲待顯示的數(shù)字,包括整數(shù)、小數(shù)點和兩位小數(shù)部分
char disx     =    0;
char AJ ;

void DisplayVoltage(double voltage) {
    unsigned int  sw,gw,x1, x2,number,xs;
    float abc;
    number   =   (int)voltage;
    abc = voltage - number;
    // 將電壓值轉(zhuǎn)換為整數(shù)和小數(shù)部分
    sw = number/10 ;
    gw = number%10 ;
    abc *= 100;
    x1 = (int)abc/10;
    x2 = (int)abc%10;
    xs = 10;

    // 設(shè)置顯示緩沖區(qū)
    if (voltage >= 10.00) {

        displayBuffer[0] = sw ;  // 十位數(shù)
        displayBuffer[1] = gw ;
        displayBuffer[3] = xs ;
        displayBuffer[2] = x1;//

        dppos=2;
    } else {
        displayBuffer[0] = gw ; // 個位數(shù)
        displayBuffer[3] = xs; // 個位數(shù)
        displayBuffer[1] = x1; // 個位數(shù)
        displayBuffer[2] = x2; // 小數(shù)點后一位

        dppos=1;
    }
}
int f;
extern x1;
unsigned int  digit  ;
void DisplayVoltage1() {

    unsigned char mask = 0x01;
     f++;  
    DIGIT1 = 1;
    DIGIT2 = 1;
    DIGIT3 = 1;

    // 根據(jù)digitIndex選中對應(yīng)的數(shù)碼管
    switch (disx) {
    case 0:
        DIGIT1 = 0;
        DIGIT2 = 1;
        DIGIT3 = 1;
        break;
    case 1:
        DIGIT1 = 1;
        DIGIT2 = 0;
        DIGIT3 = 1;
        break;
    case 2:
        DIGIT1 = 1;
        DIGIT2 = 1;
        DIGIT3 = 0;
        break;
    case 3:
        if(dppos ==  1) {
            DIGIT1 = 0;
            DIGIT2 = 1;
            DIGIT3 = 1;
        }
        else if(dppos ==  2) {
            DIGIT1 = 1;
            DIGIT2 = 0;
            DIGIT3 = 1;
        }  
        break;
    }
            digit =  displayBuffer[disx];

        switch (f-1) {

          case 0: SEG_A = (segmentCodes[digit] &   mask) ?      1 : 0; break;
          case 1: SEG_B = (segmentCodes[digit] & (mask << 1)) ? 1 : 0; break;
          case 2: SEG_C = (segmentCodes[digit] & (mask << 2)) ? 1 : 0; break;
          case 3: SEG_D = (segmentCodes[digit] & (mask << 3)) ? 1 : 0; break;
          case 4: SEG_E = (segmentCodes[digit] & (mask << 4)) ? 1 : 0; break;
          case 5: SEG_F = (segmentCodes[digit] & (mask << 5)) ? 1 : 0; break;
          case 6: SEG_G = (segmentCodes[digit] & (mask << 6)) ? 1 : 0; break;
          case 7: SEG_DP =(segmentCodes[digit] & (mask << 7)) ? 1 : 0; break;
        }

    if (f == 9) {
        disx++;
        if(disx > 3)           
           disx=0;      
    }

else if(f  >  9 )   f = 0;



}------------------------------------------------------------------------------
void Timer0_Init()                //100微秒@11.0592MHz
{   
    //定時器時鐘12T模式
    TMOD &= 0xf0;                        //設(shè)置定時器模式
    TMOD |= 0x01;
    TL0 = 0xCD;                                //設(shè)置定時初始值
    TH0 = 0xD4;                                                        //設(shè)置定時初始值
    TF0 = 0;                                //清除TF0標(biāo)志
    TR0 = 1;                                //定時器0開始計時
    ET0 = 1;
    EA  = 1;
}
void TM0_Isr() interrupt 1 //每隔兩毫秒
{      
    DisplayVoltage1();

    TL0 = 0xCD;                                //設(shè)置定時初始值
    TH0 = 0xD4;                                                //設(shè)置定時初始值
}

51hei圖片_20241224174546.jpg (747.83 KB, 下載次數(shù): 0)

51hei圖片_20241224174546.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1141252 發(fā)表于 2024-12-24 21:09 | 只看該作者
連接數(shù)碼管的IO口設(shè)置為強(qiáng)推模式了嗎
回復(fù)

使用道具 舉報

板凳
ID:1141252 發(fā)表于 2024-12-24 21:11 | 只看該作者
連接數(shù)碼管的IO口設(shè)置為強(qiáng)推模式了么
回復(fù)

使用道具 舉報

地板
ID:1133081 發(fā)表于 2024-12-24 21:13 | 只看該作者
把原理圖發(fā)上來
回復(fù)

使用道具 舉報

5#
ID:1109793 發(fā)表于 2024-12-25 07:48 | 只看該作者
一個8位機(jī),float,double都用上了。還用了乘
mask<<這里直角用0x01<<不行嗎?弄個變量會更快嗎?后面的?運算有意義嗎?
SEG是段碼,設(shè)計時不在同一組IO里面嗎?這么費勁。
白色阻焊不好,透明度不行。還是綠色好看。
回復(fù)

使用道具 舉報

6#
ID:1135888 發(fā)表于 2024-12-25 09:21 | 只看該作者
power-man 發(fā)表于 2024-12-24 21:09
連接數(shù)碼管的IO口設(shè)置為強(qiáng)推模式了嗎

設(shè)置了 推挽了
回復(fù)

使用道具 舉報

7#
ID:1135888 發(fā)表于 2024-12-25 09:33 | 只看該作者
WL0123 發(fā)表于 2024-12-24 21:13
把原理圖發(fā)上來

板子不是自己設(shè)計的 是給的測試   他的板子  有一個IO口 P12 跟數(shù)碼管 按鍵 還有一個燈同時復(fù)用了,有點沒想明白怎么做
回復(fù)

使用道具 舉報

8#
ID:1135888 發(fā)表于 2024-12-25 09:37 | 只看該作者
xiaobendan001 發(fā)表于 2024-12-25 07:48
一個8位機(jī),float,double都用上了。還用了乘
mask

,剛開始做這個好多地方不會,您說的這個 我后面都會注意 去改的,剛開始打 的是綠色的,測試的時候不小心燒了 ,后面打板的時候看見有白色的阻焊,就像試一下,打出來發(fā)現(xiàn),好看是挺好看的,但是透明度不行,線路不如綠色的清楚
回復(fù)

使用道具 舉報

9#
ID:1109793 發(fā)表于 2024-12-25 12:51 | 只看該作者
實在看不太懂,你這意思是每2MS調(diào)用一次顯示,每次顯示F++,然后只更新8段的一段,8個段更新完成后再更新一個位。為啥要這樣呢?八個段一次更新完了直接顯示不好嗎?為何要搞這么復(fù)雜?你是覺得2ms更新太快了?芯片大概是SSOP20的,應(yīng)該有一個完整的口給你用的啊。
況且在F==9的時候更新了位,此時直接F = 0;不行嗎?還要再等下一次才能F = 0;
回復(fù)

使用道具 舉報

10#
ID:1135888 發(fā)表于 2024-12-25 14:16 | 只看該作者
不是自己設(shè)計的板子 ,布置的% 這個P12 同時與 按鍵 數(shù)碼管 燈三方連接復(fù)用  按鍵與數(shù)碼管 用定時器分時復(fù)用解決了 但燈實在解決不來哦
回復(fù)

使用道具 舉報

11#
ID:1109793 發(fā)表于 2024-12-25 15:56 | 只看該作者
左語杰 發(fā)表于 2024-12-25 14:16
不是自己設(shè)計的板子 ,布置的% 這個P12 同時與 按鍵 數(shù)碼管 燈三方連接復(fù)用  按鍵與數(shù)碼管 用定時器分時復(fù) ...

還是先把原理圖弄出來吧
回復(fù)

使用道具 舉報

12#
ID:1135888 發(fā)表于 2024-12-25 16:00 | 只看該作者
xiaobendan001 發(fā)表于 2024-12-25 12:51
實在看不太懂,你這意思是每2MS調(diào)用一次顯示,每次顯示F++,然后只更新8段的一段,8個段更新完成后再更新一 ...

嗯吶,  注釋上是兩毫秒是之前的沒改 實際是 50us 進(jìn)一次中斷  ,就想設(shè)計每一段的掃描時間相同 保證 亮度一樣  , 最早的一版是 一次更新八個段 ,即一個段碼 ,但是亮度顯示不均勻   
回復(fù)

使用道具 舉報

13#
ID:1135888 發(fā)表于 2024-12-25 16:22 | 只看該作者
我上午發(fā)了原理圖 不知道 為什么 沒發(fā)出來      C:\Users\JS16\Desktop
回復(fù)

使用道具 舉報

14#
ID:1135888 發(fā)表于 2024-12-25 16:24 | 只看該作者
原理圖來了

51hei截圖_20241225092700.png (99.77 KB, 下載次數(shù): 0)

51hei截圖_20241225092700.png
回復(fù)

使用道具 舉報

15#
ID:1133081 發(fā)表于 2024-12-25 17:02 | 只看該作者
左語杰 發(fā)表于 2024-12-25 09:33
板子不是自己設(shè)計的 是給的測試   他的板子  有一個IO口 P12 跟數(shù)碼管 按鍵 還有一個燈同時復(fù)用了,有點 ...

板子不是你自己設(shè)計的,原理圖也還原不了,那你還寫什么程序?所有軟件都是基于硬件條件編寫的。stc8g1k17-20做個三位數(shù)碼管顯示的電壓表是輕而易舉的事。你那數(shù)碼管動態(tài)顯示代碼寫得實在不敢恭維。數(shù)碼管、按鍵、還有一個燈同時復(fù)用,沒有原理圖誰能搞得清你怎么接線的。
回復(fù)

使用道具 舉報

16#
ID:1109793 發(fā)表于 2024-12-25 18:28 | 只看該作者
左語杰 發(fā)表于 2024-12-25 16:00
嗯吶,  注釋上是兩毫秒是之前的沒改 實際是 50us 進(jìn)一次中斷  ,就想設(shè)計每一段的掃描時間相同 保證 亮 ...

你這樣才亮度不均勻吧,在更新段碼前要先消隱的。
回復(fù)

使用道具 舉報

17#
ID:1109793 發(fā)表于 2024-12-25 18:47 | 只看該作者
左語杰 發(fā)表于 2024-12-25 16:00
嗯吶,  注釋上是兩毫秒是之前的沒改 實際是 50us 進(jìn)一次中斷  ,就想設(shè)計每一段的掃描時間相同 保證 亮 ...

事實上只要時序弄對了,50US和2MS的關(guān)系不大,顯示效果也幾乎一樣的
回復(fù)

使用道具 舉報

18#
ID:1109793 發(fā)表于 2024-12-25 18:57 | 只看該作者

居然可以這樣搞,限流接在COM上面,目前的數(shù)碼管這樣其實亮度均勻性也還好,即便要分時均衡亮度,在每次更新段數(shù)據(jù)前要關(guān)閉所有段再打開應(yīng)該亮的吧。那個板子上大面積的空閑,不至于省這5顆電阻吧。板子看起來好像沒有什么大的耗電,還用一顆類似2575這么大的零件。我實際用一顆限流電阻驅(qū)動8個LED燈,同時點亮居然亮度都一樣的,基本上看不到亮度不一樣的。
回復(fù)

使用道具 舉報

19#
ID:1133081 發(fā)表于 2024-12-25 21:29 | 只看該作者

單就這個硬件設(shè)計就決定了數(shù)碼管筆段亮度不容易搞均勻。此電路如不是高手炫技就是初學(xué)者的習(xí)作。單片機(jī)引腳使用混亂無序,還搞些復(fù)用,18個I/O口不夠用?
回復(fù)

使用道具 舉報

20#
ID:161164 發(fā)表于 2024-12-25 23:11 | 只看該作者
你的代碼段位只有點亮,沒有熄滅啊
回復(fù)

使用道具 舉報

21#
ID:1135888 發(fā)表于 2024-12-26 09:50 | 只看該作者
WL0123 發(fā)表于 2024-12-25 21:29
單就這個硬件設(shè)計就決定了數(shù)碼管筆段亮度不容易搞均勻。此電路如不是高手炫技就是初學(xué)者的習(xí)作。單片機(jī)引 ...

他給的io口確實是不夠用的  4個獨立按鍵  11個數(shù)碼管   2個2ADC檢測  1個PCA 的pwm 還有一個io口用于某個元器件的使能腳
回復(fù)

使用道具 舉報

22#
ID:1135888 發(fā)表于 2024-12-26 09:54 | 只看該作者
lkc8210 發(fā)表于 2024-12-25 23:11
你的代碼段位只有點亮,沒有熄滅啊

是這個嗎   有熄滅位選 啊  case 0:
        DIGIT1 = 0;
        DIGIT2 = 1;
        DIGIT3 = 1;
        break;
    case 1:
        DIGIT1 = 1;
        DIGIT2 = 0;
        DIGIT3 = 1;
        break;
    case 2:
        DIGIT1 = 1;
        DIGIT2 = 1;
        DIGIT3 = 0;
        break;    只有選中的位選是亮的
回復(fù)

使用道具 舉報

23#
ID:1135888 發(fā)表于 2024-12-26 09:57 | 只看該作者
lkc8210 發(fā)表于 2024-12-25 23:11
你的代碼段位只有點亮,沒有熄滅啊

抱歉 我上一句理解錯了       是段選點亮了 到下一位的時候沒有熄滅
回復(fù)

使用道具 舉報

24#
ID:1109793 發(fā)表于 2024-12-26 11:24 | 只看該作者
左語杰 發(fā)表于 2024-12-26 09:54
是這個嗎   有熄滅位選 啊  case 0:
        DIGIT1 = 0;
        DIGIT2 = 1;

不是CASE0的問題。是每次更新段之前都先熄滅,更新完了再打開。
回復(fù)

使用道具 舉報

25#
ID:1133081 發(fā)表于 2024-12-26 11:32 | 只看該作者
左語杰 發(fā)表于 2024-12-26 09:50
他給的io口確實是不夠用的  4個獨立按鍵  11個數(shù)碼管   2個2ADC檢測  1個PCA 的pwm 還有一個io口用于某個 ...

IO口不夠用可以通過合理規(guī)劃IO口復(fù)用。比如驅(qū)動數(shù)碼管的8個段,3個位只有第一位有小數(shù)點,另兩位的小數(shù)點空閑,可以分時復(fù)用驅(qū)動兩個LED。4個按鍵可以與兩路ADC檢測分時復(fù)用(只要被檢模擬量動態(tài)范圍大于0小于VCC,按鍵分別接地和VCC即可準(zhǔn)確識別),也可以另開一路ADC同時檢測4個按鍵。這樣可以輕松節(jié)省4-5個IO口,既不影響數(shù)碼管和ADC功能,編程也不復(fù)雜。
回復(fù)

使用道具 舉報

26#
ID:1135888 發(fā)表于 2024-12-26 17:37 | 只看該作者
WL0123 發(fā)表于 2024-12-26 11:32
IO口不夠用可以通過合理規(guī)劃IO口復(fù)用。比如驅(qū)動數(shù)碼管的8個段,3個位只有第一位有小數(shù)點,另兩位的小數(shù)點 ...

好的 ,感謝 我重打一個板試一試 老師目前還沒有要求完全跟原版一樣 ,我試試您這個方案,這個板我也不放,繼續(xù)試一試 ,感謝
回復(fù)

使用道具 舉報

27#
ID:1109793 發(fā)表于 2024-12-26 19:25 | 只看該作者
左語杰 發(fā)表于 2024-12-26 17:37
好的 ,感謝 我重打一個板試一試 老師目前還沒有要求完全跟原版一樣 ,我試試您這個方案,這個板我也不放 ...

我覺得不如使用數(shù)碼管芯片比如TM1650這樣的,電路更簡潔,還能調(diào)整亮度,電阻也省了。還支持按鍵,省很多IO
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 欧美 日韩 在线 | 成人免费在线观看视频 | 午夜精品久久久 | 日韩欧美视频免费在线观看 | 午夜男人天堂 | 黄色男女网站 | 国产免费一区二区三区网站免费 | 色呦呦网站 | 日韩国产在线观看 | 久久国产精品久久久久久 | 午夜av免费| 国产区视频在线观看 | 中文精品视频 | 欧美中文在线 | 亚洲精品一区二区在线观看 | 国产区一区二区三区 | 欧美综合一区二区三区 | 小早川怜子xxxxaⅴ在线 | 97免费在线观看视频 | 青草青草久热精品视频在线观看 | 欧美一级小视频 | 久久亚洲天堂 | 久久久黄色 | 91久久爽久久爽爽久久片 | 国产999精品久久久久久 | 中文字幕在线精品 | 婷婷开心激情综合五月天 | 欧美一区永久视频免费观看 | 欧美日韩一区在线播放 | 一区二区三区四区不卡 | 黄色一级大片在线观看 | 国产高清精品一区二区三区 | 欧美影院| 国产农村妇女毛片精品久久麻豆 | 国产精品一区三区 | 蜜臀av日日欢夜夜爽一区 | 91色网站| 亚洲精品一区二三区不卡 | 女同videos另类| 一区二区三区欧美 | 日本成人在线免费视频 |