0
我試圖讓沒有庫的64x64 LED矩陣工作。開始用STM32F103C8T6芯片驅動它找出問題並嘗試使用ATmega328,但沒有任何改變。LED矩陣(HUB-75型)
問題是,當我試圖點亮指定地址上的LED時,它實際上亮起的亮度幾乎爲0,但直接在其下面的LED(在下一個地址上)亮起,亮度全亮。
我將代碼降到最低。
#define CLK 0
#define LAT 1
#define R1 2
uint16_t data [64][4];
void shiftOutLed (void);
int main() {
data [0][0] = 0x0001;
data [0][2] = 0x1800;
DDRC |= 0x0F; //pin 0 - A, pin 1 - B, pin 2 - C, pin3 - D
DDRB |= 0x03; // pin 0 - CLK, pin 1 - LAT
DDRD |= 0x04; // pin 2 - R1
while (1){
shiftOutLed();
}
}
void shiftOutLed (void){
for (uint8_t _addr = 0; _addr < 16; _addr++){
PORTC &= 0xF0;
PORTC |= _addr;
for (uint8_t _byte = 0; _byte < 4; _byte++){
for (uint8_t _bit = 0; _bit < 16; _bit++){
if (data[_addr][_byte] & (1 << _bit)) PORTD |= (1 << R1);
else PORTD &= ~(1 << R1);
PORTB |= (1 << CLK);
PORTB &= ~(1 << CLK);
}
}
PORTB |= (1 << LAT);
PORTB &= ~(1 << LAT);
PORTD &= ~(1 << R1);
}
}
當我修改代碼引入延遲,同時時鐘和鎖存每個位LED亮起右行。
的順序應該是:1)時鐘出了第2行)領帶OE到Vcc 3)集地址4)鎖存選通5)將OE綁定到gnd – Questdoino