单片机8*8点阵程序

我买了一个单片机试验板!但是教程里没有关于8*8LED点亮的方法!!希望大侠能够帮我写一个c程序!!... 我买了一个单片机试验板!但是教程里没有关于8*8LED点亮的方法!!希望大侠能够帮我写一个c程序!! 展开
 我来答
w05717011
2013-03-15 · TA获得超过295个赞
知道小有建树答主
回答量:255
采纳率:83%
帮助的人:111万
展开全部
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);
}
}
}
追问
谢谢!单片机c51的程序也是这个原则吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seuzhouww
推荐于2016-07-07 · TA获得超过1386个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:308万
展开全部
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、希望你早日调试出一条斜线。
追问
嗯!谢谢。我去试试。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式