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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

3片74HC595級聯,中間的一片無法存入數據 附單片機程序電路

[復制鏈接]
跳轉到指定樓層
樓主
代碼如下:
#include "reg51.h"               
#include "intrins.h"

typedef unsigned int u16;         
typedef unsigned char u8;

sbit sRCLK=P0^0;
sbit rCLK=P0^1;
sbit sER=P0^2;

void delay(u16 i)
{
        while(i--);        
}

void Hc595(u8 dat0,dat1,dat2)  
{
        u8 a;
        for(a=0;a<8;a++)               
        {
                sER = dat2 >> 7;               
                dat2 <<= 1;
                sRCLK = 0;                        
                delay(20);
                sRCLK = 1;        
                delay(20);
        }
                for(a=0;a<8;a++)               
        {
                sER = dat1 >> 7;               
                dat1 <<= 1;
                sRCLK = 0;                        
                delay(20);
                sRCLK = 1;        
                delay(20);
        }
        for(a=0;a<8;a++)               
        {
                sER = dat0 >> 7;               
                dat0 <<= 1;
                sRCLK = 0;                        
                delay(20);
                sRCLK = 1;
                delay(20);
        }
        
        rCLK = 0;
        delay(20);
        rCLK = 1;
        delay(20);
}


void main()
{        
        while(1)
        {
                        Hc595(0,0,0);
                   Hc595(0x6d,0xdb,0x00);//應讓最左側5個RGB亮起
                        delay(1000);
        }
}




1.png (79.37 KB, 下載次數: 114)

protues仿真效果

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

使用道具 舉報

沙發
ID:332444 發表于 2023-5-2 10:03 | 只看該作者
看我帖子的辦法是發送1個芯片數據,3個級聯的話分3次發送。
回復

使用道具 舉報

板凳
ID:1016811 發表于 2023-5-2 12:00 | 只看該作者
xianfajushi 發表于 2023-5-2 10:03
看我帖子的辦法是發送1個芯片數據,3個級聯的話分3次發送。

void main()
{       
        while(1)
        {
                        Hc595(0,0,0);
                   Hc595(0x6d,0x00,0x00);
                   Hc595(0x00,0xdb,0x00);
                   Hc595(0x00,0x00,0x00);
                        delay_ms(500);
        }
}
前輩你好,是這樣分成3次發送嗎?但是仿真的效果還是一樣,我看protues的仿真電路的各個IO電平時發現,只有第一片的595是符合我的數據輸入,剩下兩片的數據是亂的,

回復

使用道具 舉報

地板
ID:1016811 發表于 2023-5-2 12:16 | 只看該作者
xianfajushi 發表于 2023-5-2 10:03
看我帖子的辦法是發送1個芯片數據,3個級聯的話分3次發送。

#include "reg51.h"               
#include "intrins.h"


typedef unsigned int u16;          
typedef unsigned char u8;

sbit sRCLK=P3^6;
sbit rCLK=P3^5;
sbit sER=P3^4;


void delay_10us(u16 ten_us)
{
        while(ten_us--);       
}

void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--)
                for(j=110;j>0;j--);
}

void Hc595(u8 dat)  
{
        u8 a;

        for(a=0;a<8;a++)               
        {
                sER = dat >> 7;               
                dat <<= 1;
                sRCLK = 0;                       
                delay_10us(1);
                sRCLK = 1;       
                delay_10us(1);
        }
       
        rCLK = 0;
        delay_10us(1);
        rCLK = 1;
        delay_10us(1);
}


void main()
{       

        while(1)
        {
                        Hc595(0);
                   Hc595(0x0f);
                   Hc595(0xff);       
                   Hc595(0xfe);
                delay_ms(500);
               
                        Hc595(0);
                   Hc595(0x00);
                   Hc595(0xdb);       
                   Hc595(0x6d);
                delay_ms(500);

        }
}
前輩你好,我把代碼改成您帖子這樣單次發送的就可以顯示我想要的效果了,但是我還是不理解,為什么不能一次性將數據傳到3片級聯的595中,它的級聯原理不是將新輸入的數據代替舊輸入數據的595嗎?將舊數據向前推送,單次發送的原理和一起發送的原理似乎是一樣的吧?但是一次性發送中間那片595就是亂嗎了
回復

使用道具 舉報

5#
ID:1034262 發表于 2023-5-2 14:29 | 只看該作者
樓主你的用法不建議,我們都是串聯在一起的,DATA覺第一片14腳(DS),9腳接下一片的14腳,一直級聯下去,最經典的就是LED點陣屏,一般一個單元屏(32*16)有8片595串聯(或者分2組,每組4片串聯)。
回復

使用道具 舉報

6#
ID:213173 發表于 2023-5-2 14:31 | 只看該作者
HC595驅動16位數碼管萬年歷.rar (145.66 KB, 下載次數: 18)
回復

使用道具 舉報

7#
ID:384109 發表于 2023-5-2 15:26 | 只看該作者
樓主對595的理解有錯誤,按樓主的做法應該只有最后一個發送數據的595是正確的,其他兩個都是不定的,595要用級聯的方法
回復

使用道具 舉報

8#
ID:1016811 發表于 2023-5-2 21:42 | 只看該作者

謝謝您,我回去學習一下
回復

使用道具 舉報

9#
ID:1016811 發表于 2023-5-2 21:45 | 只看該作者
人中狼 發表于 2023-5-2 15:26
樓主對595的理解有錯誤,按樓主的做法應該只有最后一個發送數據的595是正確的,其他兩個都是不定的,595要 ...

你好,我在protues仿真里用的就是級聯方式呀,第一片595的9號腳連接到第二片的14號腳(DS),以此類推。
回復

使用道具 舉報

10#
ID:1016811 發表于 2023-5-2 21:46 | 只看該作者
coody_sz 發表于 2023-5-2 14:29
樓主你的用法不建議,我們都是串聯在一起的,DATA覺第一片14腳(DS),9腳接下一片的14腳,一直級聯下去, ...

是的啊,你可以仔細看一下我發出來的仿真圖,就是級聯的方式啊
回復

使用道具 舉報

11#
ID:332444 發表于 2023-5-3 07:22 | 只看該作者
嘻嘻哈哈東 發表于 2023-5-2 12:16
#include "reg51.h"               
#include "intrins.h"

OE低電平時,移位后的信號從Q0-Q7八個腳并行輸出,同時這八個腳上的信號也以串行的方式從Q7S腳依次輸出。該腳輸出的信號可作為下一個595的輸入信號,理論上講,可實現無限級聯。
回復

使用道具 舉報

12#
ID:332444 發表于 2023-5-3 07:25 | 只看該作者
嘻嘻哈哈東 發表于 2023-5-2 12:16
#include "reg51.h"               
#include "intrins.h"

雖然也可以一次性寫3個循環語句,不過我喜歡簡潔,通常把重復代碼寫為一個,包括數碼管驅動,其他芯片驅動都提煉為模塊。
回復

使用道具 舉報

13#
ID:78835 發表于 2023-5-3 08:18 | 只看該作者
感覺接線有點問題呀,改成這樣試試。

參考下這個級聯驅動程序:
void HC595_Master_COM1_WR_NByte(uint8_t Len, uint8_t *GPIOValue)
{
        uint8_t i=0,Byte=0;

        HC595_Master_COM1_STCP_RESET();
        while(Len--)
        {
                  Byte=*GPIOValue;
                for(i=0;i<8;i++)
                {               
                        HC595_Master_COM1_SHCP_RESET();
                        if(Byte & 0x80)
                        {
                                HC595_Master_COM1_DS_SET();
                        }
                        else
                        {
                                HC595_Master_COM1_DS_RESET();
                        }
                        HC595_Master_COM1_SHCP_SET();
                        Byte <<= 1;
                }       
                GPIOValue++;
        }
    HC595_Master_COM1_STCP_SET();
}

回復

使用道具 舉報

14#
ID:384109 發表于 2023-5-3 08:28 | 只看該作者
嘻嘻哈哈東 發表于 2023-5-2 21:45
你好,我在protues仿真里用的就是級聯方式呀,第一片595的9號腳連接到第二片的14號腳(DS),以此類推。

抱歉,看錯了,下面是我的做法,參考一下
void HC595_SEND_DATA(void)
{
        u8 i, j, row_value;
       
//        HC595_OUTPUT_ENABLE = 1;
        HC595_STORAGE_CLOCK = 0;
        HC595_SHIFT_CLOCK = 0;
       
        for(j=0; j<8; j++)
        {
                row_value = ~row_data[j];
               
                for(i=0;i<8;i++)
                {
                        if(row_value & 0X80) HC595_SERIAL_DATA = 1;        //ROW_HC595_SERIAL_DATA_ON();
                        else HC595_SERIAL_DATA = 0;                        //ROW_HC595_SERIAL_DATA_OFF();
               
                        row_value = row_value << 1;
                        HC595_SHIFT_CLOCK = 1;
                        HC595_SHIFT_CLOCK = 0;
                }
        }

        HC595_STORAGE_CLOCK = 1;
        HC595_STORAGE_CLOCK = 0;
        HC595_OUTPUT_ENABLE = 0;
}
兩個時鐘引腳的操作我和你的不同
回復

使用道具 舉報

15#
ID:1083221 發表于 2023-6-10 17:02 | 只看該作者
把void hc595(u8 dat0,dat1,dat2)改成void hc595(u8 dat0,u8 dat1,u8 dat2)  傳數據 延時改成_nop_()
回復

使用道具 舉報

16#
ID:824490 發表于 2023-6-10 17:35 | 只看該作者
void Hc595(u8 dat0,dat1,dat2)  這個函數可以優化一下。一個發送8bit的函數調用3次就可以了,沒必要發3個字節就直接寫了3次的8bit發送發代碼。
595的10腳可以直接接VDD,沒必要接開關來復位。無非就是在第一次發真正數據前,先發送3個空的數據。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲精品在线观看 | 欧美一级免费看 | 亚洲一区二区视频 | 久久久久久久久99精品 | 亚洲va欧美va人人爽午夜 | 亚洲精品久久久蜜桃 | 欧美视频二区 | 精品国产91 | 精品啪啪 | 国产成人久久 | 国产ts人妖系列高潮 | 国产高清视频一区 | 成人h视频在线观看 | 99福利视频 | 91精品国产综合久久国产大片 | 欧美午夜在线 | 国产精品美女久久久久aⅴ国产馆 | 国精产品一区二区三区 | 国产精品久久久久久妇女6080 | 国产精品日韩欧美一区二区三区 | 免费一区二区三区 | 日韩精品在线一区 | 91av视频在线观看 | 在线成人免费视频 | 韩日一区| 五月婷婷激情 | 欧美一区二区三区久久精品视 | 在线观看精品视频网站 | 欧美激情综合网 | 欧美aaaaaa| 成人夜晚看av| 成人黄在线观看 | 妹子干综合| 国产免费人成xvideos视频 | 91久久精品一区二区二区 | 免费看黄视频网站 | 欧美日韩最新 | 日韩亚洲欧美综合 | 一级毛片免费视频 | 国产精品国产三级国产aⅴ原创 | 五月天综合网 |