方式一:
//PC0接數(shù)據(jù)口SI 74HC595 第14腳
//PC1接SCK 74HC595第11腳
//PC2接RCK 74HC595第12腳
//74HC595 第13腳(/G)使能 接低電平
//74HC595 第10腳(/SCLR)清零 接高電平
#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; //七段數(shù)碼管(共陽)
void delay_nms(unsigned int time) //毫秒級延時
{ unsigned char i;
for(;time;time--)
for(i=1;i<570;i++);
}
void led_on() //點亮LED
{ unsigned char i,k,led;
for(k=0;k<10;k++) //循環(huán)顯示10個數(shù)字
{led=table[k]; //更新要顯示的數(shù)字
PORTC&=~(1<
{PORTC&=~(1<
PORTC|=(1<
PORTC|=(1<
}
}
void main()
{ PORTB=0XFF;
DDRB=0XFF;
PORTC=0XFF;
DDRC=0XFF;
PORTD=0XFF;
DDRD=0XFF;
MCUCR=0X80;
while(1)
{led_on();}
}
方式二:
用AVR的SPI串行發(fā)送
/*ATmega8的PB5是SPI時鐘輸出,
接74HC595/74HC165的移位時鐘輸入端,
PB3是SPI的MOSI數(shù)據(jù)輸出,接74HC595的串行數(shù)據(jù)輸入端SER;
PB0接74HC595/74HC165的鎖存時鐘輸入端。
*/
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; //0~9 十六進制顯示字符
void delay_nms(unsigned int time) //微秒級延時
{ unsigned char i;
for(;time;time--)
for(i=1;i<570;i++);
}
void write595() //寫595及更新LED顯示
{ unsigned char i;
for(i=0;i<10;i++)
{PORTB&=~(1< SPDR=table[i]; //SPI串行數(shù)據(jù)發(fā)送 while(!(SPSR&(1< PORTB|=(1< delay_nms(5000);} //為了看清數(shù)字的變化 延時5S } void main() { PORTB=0X01; DDRB=0XFF; PORTC=0XFF; DDRC=0XFF; PORTD=0XFF; DDRD=0XFF; SPCR=0X52; while(1) {write595();} }