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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+兩個74hc595驅動LED程序實在搞不懂了 求大神幫忙

[復制鏈接]
跳轉到指定樓層
樓主
      兩個74hc595串聯的不是就有16個輸出腳了嗎?想讓它輸出10個0和6個1也就是0000000000111111我的程序如下,但是是錯的求大神指正。

單片機源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define  NOP() _nop_()  /* 定義空指令 */

  4. //SPI IO
  5. sbit MOSIO =P3^4;
  6. sbit R_CLK =P3^5;
  7. sbit S_CLK =P3^6;
  8. void HC595SendData(unsigned char SendVal);//向595發送數據

  9. main()
  10. {
  11. HC595SendData(0x00);//初始化595使他為高電平 讓LED處于熄滅狀態  
  12.   HC595SendData(0xfc00);//1111110000000000  
  13. }

  14. void HC595SendData(unsigned char SendVal)
  15. {  
  16.   unsigned char i;               
  17.   for(i=0;i<8;i++)
  18.    {
  19.         if((SendVal<<i)&0x80) MOSIO=1;
  20.         else MOSIO=0;                                   

  21.         S_CLK=0;
  22.         NOP();        
  23.         NOP();
  24.         S_CLK=1;        
  25.    }
  26.         
  27.   R_CLK=0;
  28.   NOP();   
  29.   NOP();
  30.   R_CLK=1;

  31. }
復制代碼

像代碼中的藍字我把8改成16過,把80改成800和8080過都不起作用,請問要怎么改呢才能輸出本文開頭提的問題呢?注:這個程序在一片595中使用是可以的。



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

使用道具 舉報

沙發
ID:718523 發表于 2021-3-22 15:01 | 只看該作者
我嘗試著接在8段3位的數碼管上
A-DP=Qa-Qh
DIG1-DIG3=Qb-Qd
程序改成
  1. HC595SendData(0x08); //00001000
  2. HC595SendData(0xf9);//11111001
復制代碼

我覺得它應該是DIG3這一個管里右邊顯示1,結果它顯示111(DIG1-DIG3都是右邊的1)
回復

使用道具 舉報

板凳
ID:844772 發表于 2021-3-22 15:39 | 只看該作者
unsigned char SendVal,char不是只有8位嗎?你傳16位給它是什么意思啊?
回復

使用道具 舉報

地板
ID:332444 發表于 2021-3-22 15:51 | 只看該作者
串聯的595送2次8位數據即可.
回復

使用道具 舉報

5#
ID:275826 發表于 2021-3-22 15:59 | 只看該作者
把if((SendVal<<1)&0x80) MOSIO=1;
回復

使用道具 舉報

6#
ID:718523 發表于 2021-3-22 16:29 | 只看該作者

沒看懂什么意思
回復

使用道具 舉報

7#
ID:718523 發表于 2021-3-22 16:31 | 只看該作者
glinfei 發表于 2021-3-22 15:39
unsigned char SendVal,char不是只有8位嗎?你傳16位給它是什么意思啊?

請問這個應該怎么寫呢?
回復

使用道具 舉報

8#
ID:275826 發表于 2021-3-22 16:34 | 只看該作者

要仔細看,跟原來的差別
回復

使用道具 舉報

9#
ID:123289 發表于 2021-3-22 16:46 | 只看該作者
與硬件的接法有關:
1、兩個595串接,即一個DATA輸入,則用16個CLK,達成目的,這時DATA端當以序輸入10個0、6個1。
1、兩個595并接,即有兩個DATA輸入,DATA1、DATA2,則用8個CLK,達成目的,這時DATA1端當以序輸入8個0,DATA2端當以序輸入兩個0、及6個1。
回復

使用道具 舉報

10#
ID:718523 發表于 2021-3-22 16:58 | 只看該作者
yzwzfyz 發表于 2021-3-22 16:46
與硬件的接法有關:
1、兩個595串接,即一個DATA輸入,則用16個CLK,達成目的,這時DATA端當以序輸入10個0 ...

是串連的請問我的程序需要改哪里呢?
回復

使用道具 舉報

11#
ID:213173 發表于 2021-3-22 17:01 | 只看該作者
forest415 發表于 2021-3-22 16:31
請問這個應該怎么寫呢?

數據類型unsigned int
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define  NOP() _nop_()  /* 定義空指令 */

  4. //SPI IO
  5. sbit MOSIO =P3^4;
  6. sbit R_CLK =P3^5;
  7. sbit S_CLK =P3^6;
  8. void HC595SendData(unsigned int SendVal);//向595發送數據

  9. main()
  10. {
  11. //        HC595SendData(0x00);//初始化595使他為高電平 讓LED處于熄滅狀態  
  12.         HC595SendData(0x003f);//0000000000111111  
  13.         while(1);
  14. }

  15. void HC595SendData(unsigned int SendVal)
  16. {  
  17.   unsigned char i;               
  18.   for(i=0;i<16;i++)
  19.    {
  20.         if((SendVal<<i)&0x8000) MOSIO=1;//由高位到低位傳送
  21.         else MOSIO=0;                                   

  22.         S_CLK=0;
  23.         NOP();        
  24.         NOP();
  25.         S_CLK=1;        
  26.    }
  27.         
  28.   R_CLK=0;
  29.   NOP();   
  30.   NOP();
  31.   R_CLK=1;
  32. }
復制代碼
回復

使用道具 舉報

12#
ID:718523 發表于 2021-3-22 17:23 | 只看該作者
wulin 發表于 2021-3-22 17:01
數據類型unsigned int

這個程序第二片595全部都是高電平
回復

使用道具 舉報

13#
ID:213173 發表于 2021-3-22 19:08 | 只看該作者
forest415 發表于 2021-3-22 17:23
這個程序第二片595全部都是高電平


回復

使用道具 舉報

14#
ID:68800 發表于 2021-3-22 22:15 | 只看該作者
#include<reg52.h>
#include <intrins.h>
#define  NOP() _nop_()  /* 定義空指令 */

//SPI IO
sbit MOSIO =P3^4;
sbit R_CLK =P3^5;
sbit S_CLK =P3^6;
void HC595SendData(unsigned char SendVal);//向595發送數據

main()
{HC595SendData(0xfc);//11111100先發第二片的從左往右移 入 左邊第一位在第二片的q7
  HC595SendData(0x00);//00000000  第一片的數據
}

void HC595SendData(unsigned char SendVal)
{  
  unsigned char i;               
  for(i=0;i<8;i++)
   {
        if((SendVal<<i)&0x80) MOSIO=1;
        else MOSIO=0;                                   

        S_CLK=0;
        NOP();        
        NOP();
        S_CLK=1;        
   }
        
  R_CLK=0;
  NOP();   
  NOP();
  R_CLK=1;

}
回復

使用道具 舉報

15#
ID:332444 發表于 2021-3-23 10:02 | 只看該作者
發送2次8位數據,可看到下面的數據往上移動.
回復

使用道具 舉報

16#
ID:126591 發表于 2021-3-23 18:06 | 只看該作者
unsigned char SendVal這個怎么不是unsigned short呢
回復

使用道具 舉報

17#
ID:884042 發表于 2021-3-24 19:15 | 只看該作者
forest415 發表于 2021-3-22 16:31
請問這個應該怎么寫呢?

unsigned char SendVal把它改成int型也就是unsigned int SendVal
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产丝袜一区二区三区免费视频 | 亚洲九九| 有码在线 | 精品视频在线免费观看 | 久久国产欧美日韩精品 | 日本精品一区二区三区四区 | 日本一区二区在线视频 | 欧美午夜一区 | www.日韩欧美 | 国产精品福利视频 | 国产日韩欧美二区 | 成人免费区一区二区三区 | 祝你幸福电影在线观看 | 国产精品99久久久精品免费观看 | 亚洲一区二区在线电影 | 亚洲乱码国产乱码精品精的特点 | 久久久久久国产精品免费免费 | 成人免费一区二区三区牛牛 | 亚洲成av人片在线观看无码 | 夜夜艹 | 激情网站在线观看 | 欧美一区二区三区久久精品视 | 一区二区三区四区在线 | 国产精品精品 | 精品三级在线观看 | 手机在线一区二区三区 | 国产一区三区在线 | 二区中文字幕 | 日韩三级免费观看 | 国产精品久久精品 | 91超碰在线 | 国产男人的天堂 | 欧美成人一区二区三区 | 91精品一区 | 特黄毛片视频 | www成人免费视频 | 天天干天天操 | 日韩手机视频 | 国产成人在线视频 | 国产成人精品久久二区二区91 | 美国一级毛片a |