| 
          [案例]ATtiny13驅動74HC595 | 
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
            
                       | 
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              「main.c」 #include <avr/io.h> #define F_CPU 1200000U #include <util/delay.h> #include "74HC595.h"
  unsigned char display = 0x00;
  int main(void) {     DDRB = PORTB = 0xff;     while (1)     {         HC595_SerIn(~display);         HC595_ParOut();         if (display % 2 == 0)             PORTB |= _BV(4);         else             PORTB &= ~_BV(4);         _delay_ms(500);         display++;     }     return 0; }              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              「74HC595.c」 #include <avr/io.h> #include "74HC595.h"
  void HC595_ParOut(void) {     HC595_STCK0;     HC595_STCK1; }
  void HC595_SerIn(unsigned char data) {     unsigned char i;     for (i = 0; i < 8; i++)     {         HC595_SHCK0; // CLOCK_MAX = 100MHz         if (data & _BV(7 - i))             HC595_SD1;         else             HC595_SD0;         HC595_SHCK1;     } }              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              「74HC595.h」 #define HC595_SHCK1 PORTB|=_BV(2) // PIN11 #define HC595_SHCK0 PORTB&=~_BV(2) #define HC595_STCK1 PORTB|=_BV(1) // PIN12 #define HC595_STCK0 PORTB&=~_BV(1) #define HC595_SD1 PORTB|=_BV(0) // PIN14 #define HC595_SD0 PORTB&=~_BV(0)
  void HC595_ParOut(void); void HC595_SerIn(unsigned char data);              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              「Makefile」 # make main.hex: main.c 74HC595.c     avr-gcc -mmcu=attiny13 -Wall -Os main.c 74HC595.c -o main.o     avr-objcopy -j .text -j .data -O ihex main.o main.hex
  # make run     run: main.hex     sudo avrdude -p t13 -c usbasp -e -U flash:w:main.hex              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              執行make run編譯並燒寫程序。              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              #define HC595_SHCK1 PORTB|=_BV(2) // PIN11 #define HC595_SHCK0 PORTB&=~_BV(2) #define HC595_STCK1 PORTB|=_BV(1) // PIN12 #define HC595_STCK0 PORTB&=~_BV(1) #define HC595_SD1 PORTB|=_BV(0) // PIN14 #define HC595_SD0 PORTB&=~_BV(0)
  代碼說明: 74HC595的第11腳連接ATtiny的PB2口 第12腳連接ATtiny的PB1口 第14腳連接ATtiny的PB0口              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              右下角黃LED的正極連接到單片機的PB4口上。              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
             
              單片機熔絲位的設定:E:FF, H:FF, L:2A 晶振採用默認的內部9.6MHz晶振,開啟8分頻。              
             | 
|
        
                
          
            
                         一派掌门 二十级              | 
          
            
            
            
             | 
|