亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2305|回復: 18
打印 上一主題 下一主題
收起左側

51單片機proteus仿真中遇到的數碼管問題

[復制鏈接]
跳轉到指定樓層
樓主
本菜雞大三,目前在做單片機設計,三個課題,其中一個是實現路口紅綠燈,但是我遇到的問題是我的數碼管顯示不正常,現象是開始仿真后看不見數碼管顯示的數字,只有按下暫停才會顯示代碼我也沒找到問題,數碼管采用共陽極接法,在proteus中的型號名稱為7SEG-MPX8-CA,第一個圖片就可以看作是proteus開始仿真的實時效果,,第二個圖片是按下暫停時的效果,關于數碼管部分我想達到的效果是第三個圖里數字時鐘的那種顯示效果,關于數碼管顯示的代碼如下,求大佬指點一二,
#include <regx52.h>
#include <INTRINS.H>
#include "tim.h"
void delay(uchar xms);
void shumashow(uchar location,uchar number);
void display();
void displays(void);
uchar button=0;
uchar code shuma[10]={0x88,0xbb,0xc1,0x91,0xb2,0x94,0x04,0xb9,0x80,0x90};


void main(){

        while(1){
displays();
        }

}
/*
                數碼管顯示
*/
void displays(void){
                shumashow(1,1);delay(1);
                shumashow(2,2);delay(1);
                shumashow(3,3);delay(1);
                shumashow(4,4);delay(1);
                shumashow(5,5);delay(1);
                shumashow(6,6);delay(1);
                shumashow(7,7);delay(1);
                shumashow(8,8);delay(1);
}

void shumashow(uchar location,uchar number){
       
                switch(location){
                        case 1:        P1_0=0;        P1_1=0;P1_2=0;break;
                        case 2:        P1_0=0;        P1_1=0;P1_2=1;break;
                        case 3:        P1_0=0;        P1_1=1;P1_2=0;break;
                        case 4:        P1_0=0;        P1_1=1;P1_2=1;break;
                        case 5:        P1_0=1;        P1_1=0;P1_2=0;break;
                        case 6:        P1_0=1;        P1_1=0;P1_2=1;break;
                        case 7:        P1_0=1;        P1_1=1;P1_2=0;break;
                        case 8:        P1_0=1;        P1_1=1;P1_2=1;break;
                }
                P0=shuma[number];
               
}

void delay(uchar xms){
       
                uchar i,j;
                while(xms){
                                i=2;
                                j=239;
                                do{
                                                        while(--j);                               
                                }while(--i);
                                xms--;
                }       
}

屏幕截圖 2025-12-28 201548.png (108.35 KB, 下載次數: 0)

數碼管顯示部分的電路圖

數碼管顯示部分的電路圖

屏幕截圖 2025-12-28 202016.png (111.67 KB, 下載次數: 0)

仿真運行中按下暫停鍵

仿真運行中按下暫停鍵

屏幕截圖 2025-12-28 202101.png (55.38 KB, 下載次數: 0)

想達到的效果

想達到的效果
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

19#
ID:123289 發表于 2026-1-7 10:09 | 只看該作者
不要用delay延時,當你delay時,LED顯示就失控了。要用定時器做延時。
回復

使用道具 舉報

18#
ID:1114752 發表于 2025-12-31 13:08 | 只看該作者
謝謝各位佬的幫忙了,我最后發現問題不是138譯碼器,也不是程序的問題,最后查資料發現是74ls240芯片的電壓問題,更換成74hc240后就正常了,感謝各位的幫助,至于網絡標號我以后會注意的
回復

使用道具 舉報

17#
ID:1114752 發表于 2025-12-31 13:07 | 只看該作者
zhuls 發表于 2025-12-29 16:22
來自DEEPSEEK的:
關鍵參數:
‌MCU型號‌:89C52

謝謝佬的幫忙了,我最后發現問題不是138譯碼器,也不是程序的問題,最后查資料發現是74ls240芯片的電壓問題,更換成74hc240后就正常了
回復

使用道具 舉報

16#
ID:275826 發表于 2025-12-29 17:37 | 只看該作者
程序錯的,圖也錯的,仔細看74LS138的用法
回復

使用道具 舉報

15#
ID:69038 發表于 2025-12-29 16:22 | 只看該作者
YSY521 發表于 2025-12-29 16:10
嗯,我知道了,以后會注意的,這要是我沒怎么接觸過這個proteus軟件,只是上課需要,所以就學了學,但是 ...

來自DEEPSEEK的:
關鍵參數:
‌MCU型號‌:89C52
‌晶振頻率‌:12MHz
‌機器周期‌:12個時鐘周期(12MHz / 12 = 1MHz)
‌延時循環‌:i=2,j=239
計算過程:
‌內層循環‌:while(--j) 執行 239 次
‌外層循環‌:do{...}while(--i) 執行 2 次
‌每次 delay(1) 的總循環次數‌:239 * 2 = 478 次
‌每次循環的機器周期數‌:478 次循環 * 1 機器周期 = 478 機器周期
‌總延時時間‌:478 機器周期 * 1μs/機器周期 = 478μs
結論:
delay(1) 的延時時間為 ‌478μs‌(微秒)

每位0.5ms的延時,明顯不夠!
掃描顯示,至少一屏(8位)不超20ms,才能視覺不閃,每位顯示約2.5ms,時間越長,亮度越高,但可能會有閃爍感,時間越短,顯示亮度又可能上不去,你自己平衡一下。。
回復

使用道具 舉報

14#
ID:1114752 發表于 2025-12-29 16:10 | 只看該作者
zhuls 發表于 2025-12-29 15:35
這樣標也不是不行,就是原則上有點亂。。

強迫癥們對于數碼管,一般段驅以SEG_0~SEG_7,或SEG_A~SEG_H ...

嗯,我知道了,以后會注意的,這要是我沒怎么接觸過這個proteus軟件,只是上課需要,所以就學了學,但是這不是我問的重點啊,我的數碼管就是不正常,把延時時間拉長就會變成雷系流水燈的效果,并不是想要的動態顯示,在標網絡標號的之前我都測試過沒問題,每一位都能正常顯示,邏輯也沒有問題,但是加上循環顯示之后就變成上面我所說的情況了
回復

使用道具 舉報

13#
ID:69038 發表于 2025-12-29 15:35 | 只看該作者
YSY521 發表于 2025-12-29 13:39
我解釋一下我的網絡標號為什么要這樣標,首先我沒想著要和單片機的引腳對應,我先標的是數碼管的段和電阻 ...

這樣標也不是不行,就是原則上有點亂。。

強迫癥們對于數碼管,一般段驅以SEG_0~SEG_7,或SEG_A~SEG_H,位驅以DIG1_DIG8,。。。
對于IO,一般是以其實際標號,如P10,P23,之類的直接標上,或以功能如Dat0,ROM_SCK、FLASH_SDA_IN, SPI1_CS,==.
這樣,圖和代碼的可讀性無形間提高了好幾檔。。
====以上純屬個人觀點====



回復

使用道具 舉報

12#
ID:1114752 發表于 2025-12-29 13:39 | 只看該作者
hhdsdy 發表于 2025-12-29 12:33
看樣子是簡單的復制,否則也不會把P1.0等標成P31等了

我解釋一下我的網絡標號為什么要這樣標,首先我沒想著要和單片機的引腳對應,我先標的是數碼管的段和電阻,所以我就標了p1-8,然后標的電阻左邊和p0引腳,然后我就標稱了p11-18,當時真沒想過這么多
回復

使用道具 舉報

11#
ID:1114752 發表于 2025-12-29 13:35 | 只看該作者
hhdsdy 發表于 2025-12-29 12:33
看樣子是簡單的復制,否則也不會把P1.0等標成P31等了

啊,不是的,從電路到代碼都是我自己獨立完成的,真的,我是有單片機基礎的,大一就學C語言51,32單片機,只是這學期上課才學的proteus,至于這個網絡標號我標的時候真沒想這么多,只想著對應起來就夠了
回復

使用道具 舉報

10#
ID:88256 發表于 2025-12-29 12:33 | 只看該作者
zhuls 發表于 2025-12-29 11:55
都說寫代碼的有強迫癥,但我在你的代碼和圖中看不出半點,反而很隨意。。
代碼中,段驅是P0,偏偏網標是P1 ...

看樣子是簡單的復制,否則也不會把P1.0等標成P31等了
回復

使用道具 舉報

9#
ID:327265 發表于 2025-12-29 12:29 | 只看該作者
他仿真版本封裝有一點影響,切換位顯示時候縮短時間
回復

使用道具 舉報

8#
ID:1114752 發表于 2025-12-29 12:25 | 只看該作者
zhuls 發表于 2025-12-29 11:55
都說寫代碼的有強迫癥,但我在你的代碼和圖中看不出半點,反而很隨意。。
代碼中,段驅是P0,偏偏網標是P1 ...

哈哈哈哈,抱歉了佬,我畫電路圖的時候沒想過這能和代碼有什么關系,我就是先把電路圖畫對,邏輯沒問題,單獨寫代碼測試沒問題,然后我網絡標號我就隨意標了,直接寫代碼了,可能是因為本身這個proetus軟件我也不怎么用,只是學單片機的時候簡單的學過,佬說的問題我以后一定會注意的,
回復

使用道具 舉報

7#
ID:349276 發表于 2025-12-29 12:04 | 只看該作者
zhuls 發表于 2025-12-29 11:55
都說寫代碼的有強迫癥,但我在你的代碼和圖中看不出半點,反而很隨意。。
代碼中,段驅是P0,偏偏網標是P1 ...

我嫩是沒看懂那連線和代碼之間有啥關系。
回復

使用道具 舉報

6#
ID:69038 發表于 2025-12-29 11:55 | 只看該作者
都說寫代碼的有強迫癥,但我在你的代碼和圖中看不出半點,反而很隨意。。
代碼中,段驅是P0,偏偏網標是P10~P17,過個電阻又變成P1~P8,
位驅是P1,偏偏網標是P31~P33,過個譯碼器,又變成P21~P28了。。頭疼!

delay(1)是1毫秒嗎?那也太小了。
回復

使用道具 舉報

5#
ID:1114752 發表于 2025-12-29 10:31 來自觸屏版 | 只看該作者
devcang 發表于 2025-12-29 08:35
顯示每一位,在后面添加適當延時。

我在代碼里已經加了,在displays函數中,每次顯示都加了delay(1),但是沒用,我除非是把這個delay時間拉長,但是這樣就會看著一閃一閃的,并不能算是動態顯示了
回復

使用道具 舉報

地板
ID:277550 發表于 2025-12-29 08:35 | 只看該作者
顯示每一位,在后面添加適當延時。
回復

使用道具 舉報

板凳
ID:1114752 發表于 2025-12-28 20:36 | 只看該作者
為什么我再24小時必答區找不到我的這個帖子呢?
回復

使用道具 舉報

沙發
ID:1114752 發表于 2025-12-28 20:29 | 只看該作者
求大佬,讓我康康大佬在哪里
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表