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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機74hc595數碼管顯示程序問題

[復制鏈接]
跳轉到指定樓層
樓主
各位大佬,2個595驅動八位數碼管動態顯示,為什么不加延時一樣可以正常顯示呢?用兩個573的時候每位之間應該是有5ms的延時,我理解是在程序執行移位等操作的時候消耗了一定時間,已經起到了延時的作用,這樣理解正確嗎?還是有其它的解釋?本人初學,小白都算不上,請各位指導,萬分感謝。



單片機源程序如下:

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選碼表
unsigned char code segbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位選碼表
unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};

sbit Dio=P1^0;
sbit Rclk=P1^1;
sbit Sclk=P1^2;
uint num;
uchar i;

//void delay(uchar z)
//{
//        uchar x,y;
//        for(x=114;x>0;x--)
//                for(y=z;y>0;y--);
//}
//發數據,段8位,位8位
void SendByte(uchar wei,uchar duan)
{
        uchar a,b;
        a=fseg[duan];
        b=segbit[wei-1];
        for(i=0;i<8;i++)
        {
                Sclk=0;
                if(a&0x80)
                        Dio=1;
                else
                        Dio=0;
                Sclk=1;
                a<<=1;
        }
        
        for(i=0;i<8;i++)
        {
                Sclk=0;
                if(b&0x80)
                        Dio=1;
                else
                        Dio=0;
                Sclk=1;
                b<<=1;
        }
        Rclk=0;
        Rclk=1;
}

void main ()
{
        while(1)
        {
                SendByte(1,1);
                SendByte(2,2);
                SendByte(3,3);
                SendByte(4,4);
                SendByte(5,5);
                SendByte(6,6);
                SendByte(7,7);
                SendByte(8,8);
        }
}


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

使用道具 舉報

沙發
ID:568565 發表于 2021-2-3 06:33 來自觸屏版 | 只看該作者
595數據手冊上面寫了數據保持時間最小只需要十幾ns,所以算下來也就是單片機再執行一條語句的時間,加上延時當然更好,不加的話也能響應的
回復

使用道具 舉報

板凳
ID:332444 發表于 2021-2-3 08:25 | 只看該作者
可以那樣理解
回復

使用道具 舉報

地板
ID:332444 發表于 2021-2-3 08:27 | 只看該作者
操作2片595可以直接寫在同一個循環內完成操作,這樣延時就會減少,可通過觀察引腳察看延時時間.
回復

使用道具 舉報

5#
ID:654028 發表于 2021-2-3 09:11 | 只看該作者
這東西不是延時越久顯示越不正常嗎?容易閃。我猜你這是一個函數運行時間可能長點。我自己做過,1ms延時去刷新數據管都閑慢,還會出現閃動
回復

使用道具 舉報

6#
ID:320306 發表于 2021-2-3 09:11 | 只看該作者
說明單片機的頻率比較低,執行一條語句的時間周期比較長,類似有延時的效果了。
回復

使用道具 舉報

7#
ID:844772 發表于 2021-2-3 09:23 | 只看該作者
你查595手冊啊,上面有最大頻率限制,一般都4MHz,你要是用12Mhz的晶體,你最快也就1MHz,當然用不著延時了。
回復

使用道具 舉報

8#
ID:879809 發表于 2021-2-3 13:06 | 只看該作者
你用的是8位單片機,如果用573鎖存段碼和位碼,一定不可能做到完全同步。①輸出段碼,②鎖存,③輸出位碼,④鎖存,可以看到段碼和位碼之間us級別的不同步,執行②之后,顯示的是上一段的位碼,是錯的!所以要用5ms穩定時間掩蓋1us(數量級對,具體時間不爭論)的錯誤輸出。5000倍的時間差異是看不出有什么問題的。

對于595來說,OE接地,移位的時候輸出毫無變化,都是在內部完成的,只有12腳RCLK給個脈沖才把內部移位的結果發送到輸出端,你的原理圖上兩個RCLK是并聯的,那么就是說段碼和位碼是同步輸出的,自然不用考慮掩蓋錯誤的問題,你唯一需要考慮的是,每一個段碼有效的時間必須一致,否則每個7段LED的輸出亮度會不一致。
回復

使用道具 舉報

9#
ID:635978 發表于 2021-2-3 15:53 | 只看該作者
chenyinhu 發表于 2021-2-3 06:33
595數據手冊上面寫了數據保持時間最小只需要十幾ns,所以算下來也就是單片機再執行一條語句的時間,加上延 ...

多謝指點
回復

使用道具 舉報

10#
ID:635978 發表于 2021-2-3 15:56 | 只看該作者
xianfajushi 發表于 2021-2-3 08:27
操作2片595可以直接寫在同一個循環內完成操作,這樣延時就會減少,可通過觀察引腳察看延時時間.

多謝指點
回復

使用道具 舉報

11#
ID:635978 發表于 2021-2-3 16:12 | 只看該作者
glinfei 發表于 2021-2-3 09:23
你查595手冊啊,上面有最大頻率限制,一般都4MHz,你要是用12Mhz的晶體,你最快也就1MHz,當然用不著延時了 ...

多謝指點,我認真看一下手冊
回復

使用道具 舉報

12#
ID:635978 發表于 2021-2-3 16:13 | 只看該作者
zsyzdx 發表于 2021-2-3 09:11
說明單片機的頻率比較低,執行一條語句的時間周期比較長,類似有延時的效果了。

多謝指點
回復

使用道具 舉報

13#
ID:390416 發表于 2021-2-3 21:17 | 只看該作者
你好,關于兩個595驅動數碼管  你可以看看 人人學會單片機的視頻教程,用的就是和你一樣的電路
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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