#include #include #include #define NOP() asm("nop") #define BIT(x) (1<<(x)) #define cbi(PORT,x) (PORT &= ~(1 << x)) #define sbi(PORT,x) (PORT |= (1 << x)) #define SN74HC595_PORT PORTB #define SN74HC595_DATA PINB3 //数据-------SN74HC595 14# #define ST PINB2 //锁存时钟---SN74HC595 12# #define SH PINB5 //移位时钟---SN74HC595 11# #define SN74HC595_OE_PORT PORTD #define OE PIND3 #define set_oe() sbi(SN74HC595_OE_PORT,OE) #define clr_oe() cbi(SN74HC595_OE_PORT,OE) volatile unsigned char dat = 0; //volatile unsigned char temp_buf[8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //volatile unsigned char led_buf[8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; volatile unsigned char led_data[64] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; volatile unsigned char disp_data[8] = {0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; void wdt_off(void) { MCUSR = 0x00; WDTCSR = (1 < 0;j--) { for(i = 0;i < 64;i++) { led_data[i]++; } delay_ms(5); } } } return(0); } void process(unsigned char p_bit) { unsigned char i = 0; unsigned char j = 0; unsigned char temp1 = 0; unsigned char temp2 = 0; unsigned char temp_buf[8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; temp2 = (unsigned char)(0x01 << p_bit); for(j = 0;j < 8;j++) { for(i = 0;i < 8;i++) { temp_buf[j] <<= 1; temp1 = 8 * j + i; if((led_data[temp1] & temp2) == temp2) { temp_buf[j] |= 0x01; } } } spi_write(temp_buf); } ISR(TIMER2_OVF_vect) { static unsigned char duty = 128; static unsigned char jie = 7; OCR2B = duty; process(jie); switch (duty) { case 128: duty = 192; jie = 6; break; case 192: duty = 224; jie = 5; break; case 224: duty = 240; jie = 4; break; case 240: duty = 248; jie = 3; break; case 248: duty = 252; jie = 2; break; case 252: duty = 254; jie = 1; break; case 254: duty = 255; jie = 0; break; case 255: duty = 128; jie = 7; break; default: duty = 128; jie = 7; break; } }