1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > avr 74hc595驱动数码管动态显示c语言例程 ATmega8驱动74HC595程序

avr 74hc595驱动数码管动态显示c语言例程 ATmega8驱动74HC595程序

时间:2020-05-28 23:47:34

相关推荐

avr 74hc595驱动数码管动态显示c语言例程 ATmega8驱动74HC595程序

原标题:ATmega8驱动74HC595程序

方式一:

//PC0接数据口SI 74HC第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}; //七段数码管(共阳)

void delay_nms(unsigned int time) //毫秒级延时

{ unsigned char i;

for(;time;time--)

for(i=1;i<570;i++);

}

void _on() //点亮

{ unsigned char i,k,led;

for(k=0;k<10;k++) //循环显示10个数字

{led=table[k]; //更新要显示的数字

PORTC&=~(1<

for(i=0;i<8;i++) //送出8位数据

{PORTC&=~(1<

if((led&0x80)!=0)PORTC|=(1<

else PORTC&=~(1<

led=led<<1; //字符向左移一位

PORTC|=(1<

}

PORTC|=(1<

delay_nms(10000); //为了看清楚数字,每显示一个数字延时10S

}

}

void main()

{ PORTB=0XFF;

DDRB=0XFF;

PORTC=0XFF;

DDRC=0XFF;

PORTD=0XFF;

DDRD=0XFF;

MCUCR=0X80;

while(1)

{led_on();}

}

方式二:

用AVR的SPI串行发送

/*的PB5是SPI时钟输出,

接74HC595/74HC165的移位时钟输入端,

PB3是SPI的MOSI数据输出,接74HC595的串行数据输入端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串行数据发送

while(!(SPSR&(1<

PORTB|=(1<

delay_nms(5000);} //为了看清数字的变化 延时5S

}

void main()

{

PORTB=0X01;

DDRB=0XFF;

PORTC=0XFF;

DDRC=0XFF;

PORTD=0XFF;

DDRD=0XFF;

SPCR=0X52;

while(1)

{write595();}

}

责任编辑:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。