Harrychou 发表于 2013-7-14 00:15:44

使用74HC595的奇怪現象

本帖最后由 Harrychou 于 2013-7-14 00:15 编辑

目前想用可變電阻調整LED排燈的亮燈數量,搭配上74HC595來用
但LED排燈的亮燈數量沒辦法如預期的一樣增減數量,反而會亂跑
例如可變電阻調到某刻度時,反而會變成跑馬燈,不然就是全暗或全亮
翻了書本和網頁,找不出問題點
底下是目前寫的程式,想問看看問題出在哪邊
//74HC595腳位
const byte dataPin=2;
const byte latchPin=3;
const byte clockPin=4;
//可變電阻輸入腳位
const byte potPin=A1;
int val;
byte oil;
//LED燈開關陣列
byte LEDs={
B00000000,
B00000001,
B00000011,
B00000111,
B00001111,
B00011111,
B00111111,
B01111111,
B11111111};

void setup(){
pinMode(dataPin,OUTPUT);
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
Serial.begin(9600);
}
void loop(){
//可變電阻輸入值,分成10等分
val=analogRead(potPin);
if(val<=1023 && val>=922){
    oil=9;}
    else if(val<=921 && val>=819){
      oil=8;}
      else if(val<=818 && val>=717){
      oil=7;}
      else if(val<=716 && val>=614){
          oil=6;}
          else if(val<=613 && val>=512){
            oil=5;}
            else if(val<=511 && val>=410){
            oil=4;}
            else if(val<=409 && val>=307){
                oil=3;}
                else if(val<=306 && val>=205){
                  oil=2;}
                  else if(val<=204 && val>=102){
                  oil=1;}
                  else{
                      oil=0;}
delay(250);
//74HC595輸出
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,LEDs);
digitalWrite(latchPin,HIGH);
Serial.println(oil);
}

mopikode 发表于 2013-7-14 08:33:39

請你提供線路圖以便看看硬體有沒有問題。

Harrychou 发表于 2013-7-14 14:13:07

用Fritzing作的接線圖

ro0t 发表于 2013-7-15 07:49:28

灯都亮的时候电源电压是不是下来了???

供电够不够??

Harrychou 发表于 2013-7-16 01:16:18

把可變電阻拆下,讓74HC595直接和LED連接,數值改成序列視窗輸入二進位碼,但發生這樣的情形
輸入B11111111+MSBFIRST->Q0~Q6腳位高電位,Q7腳位變成低電位 ???
輸入B111111110+MSBFIRST->正常,應該是要8位數才是正確的吧?
輸入B11111111+LSBFIRST->Q0~Q7皆低電位
輸入B111111110+LSBFIRST->同上
結果跟書上寫的完全不同
換了兩顆74HC595都一樣,該不會是ST出的有問題吧?
页: [1]
查看完整版本: 使用74HC595的奇怪現象