单片机8*8点阵程序
我买了一个单片机试验板!但是教程里没有关于8*8LED点亮的方法!!希望大侠能够帮我写一个c程序!!...
我买了一个单片机试验板!但是教程里没有关于8*8LED点亮的方法!!希望大侠能够帮我写一个c程序!!
展开
2个回答
展开全部
avr的静态点阵
#include <iom16v.h>
unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //控制低电平
unsigned char b[]={0xff,0x18,0x18,0xff,0x18,0x18,0x18,0xff}; //控制高电平
void delay(unsigned int cnt)
{
while(--cnt);
}
void main(void)
{
int i=0,n=0;
DDRA=0xFF;
DDRB=0xFF;
while(1)
{
for (i=0;i<8;i++)
{
PORTA=a[i];
PORTB=b[i];
delay(300);
}
}
}
AVR的动态点阵
#include <iom16v.h>
unsigned char a[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //列高电平控制端
unsigned char b[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //行低电平控制端
0x7e,0x76,0x76,0x00,0x00,0x76,0x76,0x7e,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void delay(unsigned int cnt)
{
while(--cnt);
}
void main(void)
{
int i=0,n=0,k=0;
DDRA=0xFF;
DDRB=0xFF;
while(1)
{
for(k=0;k<16;k++)
{
for(n=0;n<50;n++)
{
for (i=0;i<8;i++) //i循环8次进去下个语句
{
PORTA=a[i];
PORTB=b[i+k];
delay(50);
}
}
}
#include <iom16v.h>
unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //控制低电平
unsigned char b[]={0xff,0x18,0x18,0xff,0x18,0x18,0x18,0xff}; //控制高电平
void delay(unsigned int cnt)
{
while(--cnt);
}
void main(void)
{
int i=0,n=0;
DDRA=0xFF;
DDRB=0xFF;
while(1)
{
for (i=0;i<8;i++)
{
PORTA=a[i];
PORTB=b[i];
delay(300);
}
}
}
AVR的动态点阵
#include <iom16v.h>
unsigned char a[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //列高电平控制端
unsigned char b[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //行低电平控制端
0x7e,0x76,0x76,0x00,0x00,0x76,0x76,0x7e,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void delay(unsigned int cnt)
{
while(--cnt);
}
void main(void)
{
int i=0,n=0,k=0;
DDRA=0xFF;
DDRB=0xFF;
while(1)
{
for(k=0;k<16;k++)
{
for(n=0;n<50;n++)
{
for (i=0;i<8;i++) //i循环8次进去下个语句
{
PORTA=a[i];
PORTB=b[i+k];
delay(50);
}
}
}
追问
谢谢!单片机c51的程序也是这个原则吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、基本原理一般是逐行扫描。即将要显示的一帧画面用8个元素的数组a[8]存放,自上而下8行,每行1个字节。每次只让第i行点亮固定时间,依次送上a[i]到列线上。
2、具体代码要明确硬件电路。开发板设计8*8,通常是用两片并行锁存器如373分别与8行线、8列线相连。根据电路可以获知,如何送上行选值,如何送上列值。行列值的共阴共阳问题也和点阵硬件结构密切相关。
3、以下是参考
unsigned char i,j,k;
unsigned char a[8]={1,2,4,8,16,32,64,128};//斜线。
……
while(1)
{
for(i=0,j=1;j!=0;j<<=1,i++)
{
XBYTE[行锁存地址]=~j;//送行值。可能需取反=j。具体送的办法取决于硬件。
XBYTE[列锁存地址]=a[i];//送列信息。可能需取反=~a[i]。具体送的办法取决于硬件。
for(k=0;k<250;k++);
}
}
4、希望你早日调试出一条斜线。
2、具体代码要明确硬件电路。开发板设计8*8,通常是用两片并行锁存器如373分别与8行线、8列线相连。根据电路可以获知,如何送上行选值,如何送上列值。行列值的共阴共阳问题也和点阵硬件结构密切相关。
3、以下是参考
unsigned char i,j,k;
unsigned char a[8]={1,2,4,8,16,32,64,128};//斜线。
……
while(1)
{
for(i=0,j=1;j!=0;j<<=1,i++)
{
XBYTE[行锁存地址]=~j;//送行值。可能需取反=j。具体送的办法取决于硬件。
XBYTE[列锁存地址]=a[i];//送列信息。可能需取反=~a[i]。具体送的办法取决于硬件。
for(k=0;k<250;k++);
}
}
4、希望你早日调试出一条斜线。
追问
嗯!谢谢。我去试试。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询