51单片机矩阵LED显示编程

51单片机矩阵LED显示编程,第1张

我之前用PIC单片机来做16×16LED点阵时,直接用IO口来驱动,能正常显示一个静态的任何图形、文字、字母等符号;我学完静态显示之后想着自己研究下动态显示来显示移动的文字,就像大街上看到的那些LED广告牌一样,但是我发现如果直接用IO口驱动LED点阵没法完成,点阵屏一直闪烁,亮度不够。

后来,我通过其他一些方法来做点阵,发现用74HC595芯片来驱动点阵效果相当好,它是串入并出或者串入串出并带有锁存功能的TTL型的芯片,可与单片机直接相连,这个做出来的动态显示LED点阵就完全没问题了,可以按自己的想法做任何显示。

希望我的回答能帮助到你。

建议你用C编程。

我有例程一份,C语言的,调试通过,不过是驱动数码管的,4*4矩阵键盘扫描,16个按键按下哪个数码管就显示相应的按键编号,稍微改一改就可以用在你那里。

#include <avr/io.h>

#include <avr/delay.h>

const int i[10]={0x3f,0x06,0x05b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}/*数码字模*/

char key_value=0 //键值全局变量

/*--------------------------------------------显示程序-----------------------------------------------*/

void display(int k)

{int b,d[4]={0,0,0,0}

d[3]=k%10

d[2]=k/10%10

d[1]=k/100%10

d[0]=k/1000

for(b=0b<4b++)

{PORTA=0x00

PORTB=i[d[b]]

PORTA|=(1<<b)

_delay_ms(2)

PORTA=0x00

}

}

/*--------------------------------------------扫描程序------------------------------------------------*/

char key_scan()

{

char i,j,key

DDRC=0X0F

PORTC=0XF0

if((PINC&0XF0)==0XF0)return key_value

else

{

_delay_ms(5)

if((PINC&0XF0)==0XF0)return key_value

else

{

for(i=0i<4i++)

{

PORTC=~(1<<i)|0XF0

for(j=4j<8j++)

{

if((PINC&(1<<j))==0)

key=i*4+j-3

}

}

return key

}

}

}

/*---------------------------------------------主程序--------------------------------------------------------*/

int main()

{

char a

DDRA=0XFF

DDRB=0XFF

while(1)

{

key_value=key_scan()

display(key_value)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8106194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存