单片机8*8点阵程序

我买了一个单片机试验板!但是教程里没有关于8*8LED点亮的方法!!希望大侠能够帮我写一个c程序!!

第1个回答  2013-03-15
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的程序也是这个原则吗?

第2个回答  推荐于2016-07-07
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、希望你早日调试出一条斜线。追问

嗯!谢谢。我去试试。

本回答被网友采纳

用51单片机驱动8*8点阵 的代码
{ for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}} for(j=0;j<3;j++) \/\/FROM top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}} for(j=0;j<3;j++) \/\/FROM bottom to top 3 time ...

求个高手写个单片机控制8*8点阵的代码
{ while(1) \/\/无限循环以下程序 { uchar H = 0x01;int i,j;for(j=0;j<8;j++){ for(i=0;i<8;i++){ Delayms(1);P1=0x00; \/\/复位、防止虚亮 P0=~H;P1 = (b[i+1]<<j)|(b[i+1]>>8-j);H=H<<1;} delayms(50);} } } ...

怎么控制单片机8*8点阵每个点亮或不亮,每个点对应的十六进制是多少...
用单片机控制8×8点阵的每个LED的亮灭,要采用扫描方式实现。如下图的8×8点阵,用8系列线和8线条行线控制。在8条列线加高电平,逐条行线加低电平,就会逐行点亮。

用51单片机以及8*8点阵显示英文字母或者数字(最好是全部数字和字母都说...
{ for(i=0;i<8;i++){ Ser_IN(a[i]);\/\/8X8点阵列扫描 Ser_IN(b[i]);\/\/8X8点阵行扫描 Par_OUT();\/\/74HC595输出显示 } i=0;} } 程序里面还要包含"74HC595.H"把它放在工程文件夹里面就可以了。"74HC595.H"具体程序如下:ifndef __74HC595_H__define __74HC595_H__sbit SD = ...

我的单片机处理控制8×8LED点阵屏的显示。由于仅采用一个8×8LED点阵...
\/\/输出口 while(1){ for(i=0;i<8;i++){ PORTB=0x00; \/\/消隐 PORTD=0xff; \/\/消隐 PORTB=table1[i+t]; \/\/高低平有效 PORTD=table[i]; \/\/\/低电平扫描 time(1);} bb++;if(bb==200){ bb=0;t++;if(t==100){ t=0;} } } } ...

单片机 在8X8LED点阵显示数字
我想你会显示数码管吧。那你就行写一个程序把8位数码管的8个数据接点阵的行或列,位选接8个公共端。取数建议你用2维数组,X〔10(10个数)〕〔8(位数码管8行的数据)〕在加个键盘判断if(input){A ;if(A>9)A=0;} P1=X[A][?行(这里是扫描行数的变量)]参考资料:如果您的回答是...

利用单片机,在一个8*8的点阵显示屏上显示一个“大”字,怎样编程啊...
1.首先用字模提取软件提取“大”字的字模。软件网上很多,用“字模提取”关键字可以搜到。也可以用EXCEL在8x8上方框上自己写一个“大字”,然后有标记的为1,没标记的为0,那么一行下来有8位既一个节,总共8行,共8个字节。2.把这8个字节做成数组。放在FLASH里比较好。3.使用时,数组第一个元素送...

急需:求单片机80S51实训(带汇编程序) 题目要求:8乘8点阵显示 需原理图...
;显示一个8*8点阵字子程序,字型码放在显示缓冲区XBUFF DISP1:PUSHDPL PUSHDPH MOVR6,#8;计数器,8列依次被扫描 MOVR2,#7FH;FEH;列输出值 REPEAT:MOVP2,#HIGH(LINE)MOVR0,#LOW(LINE)MOVA,R2 MOVX@R0,A;列输出 CLRA MOVCA,@A+DPTR INCDPTR ACALLADJUST;调整A,将A中二进制数旋转180度 ...

求一个8*8LED点阵汉字显示C语言程序(C52)
unsigned char w,i;while(1){ \/\/显示0 w=0x01; \/\/行变量为第一行 for(i=0;i<8;i++){ P1=w;\/\/行数据送P1口 P0=led0[i];delayms(1);\/\/列数据送P0口 w<<=1;\/\/向下移动一行 } } } void delay1ms(unsigned int ms){ unsigned int i,j;for(i=0;i<ms;i++)for(j=0...

单片机8*8点阵 利用中断控制显示0-3; 但是我只能显示一个“0” 不知道...
void timer0() interrupt 1 { TH0=0x0FC;TL0=0xe8;i++;if(i==8){i=0;} DataPortA=wei[i];sn=1; \/\/使能端 sn=0;DataPortA=0xff;DataPortA=duan0[i+ShowNumber*8];delay(50);} void timer1() interrupt 3 { TH1=(65536-50000)\/256;TL1=(65536-50000)%256;num++;} ...

相似回答