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

標題: 求助數碼管顯示問題 [打印本頁]

作者: 多情不自作    時間: 2025-7-5 14:30
標題: 求助數碼管顯示問題
用51單片機實現籃球計分器,有加1/2分、減1/2分、清零功能,分數范圍為00-99。實物已經連接出來并實現功能,但是仿真不知道為何兩個一位數碼管一直顯示88,按鍵按下可以正常加減數,但是松開按鍵又是88


#include <REGX52.H>
// 共陰數碼管段碼表(0-9)
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int count = 0; // 用unsigned int避免負數問題

// 延時消抖函數
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i=0; i<ms; i++)
        for(j=0; j<112; j++); // 12MHz晶振,約1ms
}

// 動態顯示函數
void display() {
    unsigned char shi, ge;
    shi = count / 10;    // 十位
    ge = count % 10;     // 個位
    // 十位顯示(P2口)
    P2 = table[shi];
    delay_ms(1);
    // 個位顯示(P0口)
    P0 = table[ge];
    delay_ms(1);
}

void main() {
    P0 = 0x00;
    P2 = 0x00;
    while(1) {
        display();

        // 加1(P1.0)
        if(P1_0 == 0) {
            delay_ms(10); // 消抖
            if(P1_0 == 0) {
                if(count < 99) count++;
                while(P1_0 == 0) display(); // 等待釋放時刷新顯示
            }
        }

        // 加2(P1.1)
        if(P1_1 == 0) {
            delay_ms(10);
            if(P1_1 == 0) {
                if(count <= 97) count += 2;
                                                                else if(count == 98) count = 99; // 兼容count=98時加2到99
                while(P1_1 == 0) display();
            }
        }

        // 減1(P1.2)
        if(P1_2 == 0) {
            delay_ms(10);
            if(P1_2 == 0) {
                if(count > 0) count--;
                while(P1_2 == 0) display();
            }
        }

        // 減2(P1.3)
        if(P1_3 == 0) {
            delay_ms(10);
            if(P1_3 == 0) {
                if(count >= 2) count -= 2;
                else if(count == 1) count = 0; // 兼容count=1時減2到0
                while(P1_3 == 0) display();
            }
        }

        // 清零(P1.4)
        if(P1_4 == 0) {
            delay_ms(10);
            if(P1_4 == 0) {
                count = 0;
                while(P1_4 == 0) display();
            }
        }
                                
    }
}


作者: xianfajushi    時間: 2025-7-5 16:59
這種情況通常是數碼管無消隱處理代碼導致。
作者: a825563619    時間: 2025-7-5 17:24
display() 里面先清0再賦值試試
作者: WL0123    時間: 2025-7-5 21:25

程序寫的不算好,但顯示沒有問題。



作者: 622323wjl    時間: 2025-7-6 00:22
### 問題分析   籃球計分器在按鍵操作時能正常計數,但松開后數碼管顯示固定為“88”,這是動態顯示刷新機制不足導致的典型問題。在仿真環境中,由于缺乏實際硬件的電荷保持特性(如電容濾波、余暉效應),若動態掃描頻率不足,數碼管會因無法持續獲取正確數據而顯示異常。當前代碼中`display()`函數僅在按鍵處理時被調用,主循環未實現高頻掃描,導致非按鍵狀態下數碼管輸出默認異常值。  ### 解決方案   修改后的代碼通過優化動態顯示邏輯與按鍵處理流程,確保數碼管高頻刷新:   在動態顯示部分,增加靜態變量`position`實現十位與個位的交替掃描,通過`P0=0x00; P2=0x00;`進行消隱處理以避免殘影,并縮短單次顯示延時來提升掃描頻率。按鍵處理上,將檢測邏輯封裝為獨立函數`key_scan()`,通過`key_pressed`標志位標記按鍵狀態,在按鍵釋放循環中持續調用`display()`以實時同步計數變化。主循環采用“先顯示后按鍵”的結構,確保每輪循環都強制刷新數碼管,避免因按鍵處理阻塞顯示更新。  ### 關鍵改進說明   優化后的顯示機制通過`position`變量實現分時掃描,配合消隱操作消除鬼影,使十位(P2口)與個位(P0口)的段碼輸出更穩定。針對仿真環境無硬件保持特性的特點,通過軟件高頻刷新確保`count`變量的實時值同步到數碼管。若數碼管仍顯示異常,需檢查仿真配置(如數碼管是否為共陰類型、端口連接是否正確),或降低仿真速度以匹配軟件掃描頻率。該方案通過動態掃描頻率優化,有效解決了仿真環境下的顯示同步問題。
作者: 622323wjl    時間: 2025-7-6 00:23
### 問題分析   籃球計分器在按鍵操作時能正常計數,但松開后數碼管顯示固定為“88”,這是動態顯示刷新機制不足導致的典型問題。在仿真環境中,由于缺乏實際硬件的電荷保持特性(如電容濾波、余暉效應),若動態掃描頻率不足,數碼管會因無法持續獲取正確數據而顯示異常。當前代碼中`display()`函數僅在按鍵處理時被調用,主循環未實現高頻掃描,導致非按鍵狀態下數碼管輸出默認異常值。  ### 解決方案   修改后的代碼通過優化動態顯示邏輯與按鍵處理流程,確保數碼管高頻刷新:   在動態顯示部分,增加靜態變量`position`實現十位與個位的交替掃描,通過`P0=0x00; P2=0x00;`進行消隱處理以避免殘影,并縮短單次顯示延時來提升掃描頻率。按鍵處理上,將檢測邏輯封裝為獨立函數`key_scan()`,通過`key_pressed`標志位標記按鍵狀態,在按鍵釋放循環中持續調用`display()`以實時同步計數變化。主循環采用“先顯示后按鍵”的結構,確保每輪循環都強制刷新數碼管,避免因按鍵處理阻塞顯示更新。  ### 關鍵改進說明   優化后的顯示機制通過`position`變量實現分時掃描,配合消隱操作消除鬼影,使十位(P2口)與個位(P0口)的段碼輸出更穩定。針對仿真環境無硬件保持特性的特點,通過軟件高頻刷新確保`count`變量的實時值同步到數碼管。若數碼管仍顯示異常,需檢查仿真配置(如數碼管是否為共陰類型、端口連接是否正確),或降低仿真速度以匹配軟件掃描頻率。該方案通過動態掃描頻率優化,有效解決了仿真環境下的顯示同步問題。
作者: 多情不自作    時間: 2025-7-6 12:31
xianfajushi 發表于 2025-7-5 16:59
這種情況通常是數碼管無消隱處理代碼導致。

好像是的,謝謝大佬
作者: 多情不自作    時間: 2025-7-6 12:33
WL0123 發表于 2025-7-5 21:25
程序寫的不算好,但顯示沒有問題。

可能是我別的地方有問題,你這個為什么不用搭最小系統嗎
作者: WL0123    時間: 2025-7-6 15:51
多情不自作 發表于 2025-7-6 12:33
可能是我別的地方有問題,你這個為什么不用搭最小系統嗎

只要在MCU屬性里設置晶振頻率即可,VCC和RST都是系統默認的,不需要畫出來。
作者: 單片機重購    時間: 2025-7-11 13:39
還不如整一個二位一體的數碼該管。這樣兩個單在一起的數碼管在一起確實是不太好寫,而且書寫籃球比賽計分器的同時我們是需要往更高級的方向進行描述的。我們也是需要向往更高級的代碼進行分析的,而且你這點錯誤如果解決不了的話我們確實是可以自己去網上尋找點AI的幫助的哦這樣確實是可以對你代碼進行分析的哦。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产高清视频一区 | 国产a区 | 成人免费网站在线观看 | 日韩欧美视频 | 免费午夜视频 | 国产一级片视频 | 成人黄色在线观看 | www.九色 | 亚洲综合视频在线 | 久久九九免费视频 | www99热| 国产伦理一区 | 欧美又大又硬又粗bbbbb | 亚洲视频在线一区 | 国产区在线| 色爽| 黄色av免费看 | 六月丁香综合 | 国产小视频在线 | 日韩欧美在线播放 | www.爱爱| 欧洲精品一区 | 免费黄色一级 | 欧美综合在线视频 | 深夜免费福利 | 麻豆国产一区二区三区四区 | 人人澡人人爽 | 欧美国产一区二区 | 五月天色综合 | 久久av红桃一区二区小说 | 亚洲a视频| 丁香综合网| 国产资源在线观看 | 亚洲aaaaaa| 久久久国产一区二区三区 | 欧美视频免费 | 久久青草视频 | 91精品在线免费观看 | 精品日韩一区 | 国产成人免费在线 | 蜜臀久久99精品久久久久久宅男 |