导航:首页 > 操作系统 > 初学者单片机点阵显示器爱心代码

初学者单片机点阵显示器爱心代码

发布时间:2022-05-27 16:20:32

‘壹’ 51单片机配合流水灯实现25个点阵显示心形图案

用10个io口组成5*5阵列类似矩阵键盘

‘贰’ C51单片机如何通过按钮进行切换,例如一开始点阵上显示心形,按一下按钮变为星型,用程序应当如何实现

方法很简单,
sbit k=P1^0;//选取一个I/O端口连接一个按键
unsigned char r;//设置一个计数变量
void delay(uchar p)//12MHz@p微秒延时函数
{
unsigned char i,j;
for(i=0;i<p;i++){
for(j=0;j<50;j++)
{;}}
}
void key()//按键函数
{
if (k==0)//查询按键是否按下
{
delay(20); //等待按键连接稳定
if(k==0) //如果按键仍然是连接状态
{
r++;//标志+1
if(r>1){r=0;}//可以任意多种选择,这里只设定0、1两种状态
while(!k);//等待按键抬起
}
}
}
void set_out()//设置输出方式函数
{
key();//查询按键值
if(r==0){***心形显示***}
if(r==1){***星形显示***}
//if(r==?){***?形显示***}
}

‘叁’ 关于51单片机点阵心形显示问题

首先你要搞清楚点阵显示原理。
8*8点阵要显示一个画面,通常采用扫描的形式。点阵内部发光阵列每一行的阴极连在一起,引出一条共阴线;每一纵向阳极连在一起,引出一条共阳线。这样8*8点阵就共有8条共阴线和8条共阳线。具体请参考点阵内部结构示意图!
扫描的过程:例如将共阳线作为扫描线,即每次给其中一条阳线供电,其它阳线断电。这样,在该条阳线上的LED点亮与否就取决于8条阴线的电平高低了。快速地扫描阳线,并且每扫描一条就给阴线变化相应的电平,就实现了一组图像的显示。
在你给的程序中,很明显的 tabP2是用来形成扫描输出的。你自己分析一下这些值每次是不是只发生了0这个值的移位。这是采用查表法来得到扫描功能的,每次让IO口(一组)输出这表中的一个值,最终就形成了扫描动作。至于tabP0就是对应于每一个扫描线输出的心形数据表了。每次扫描IO输出 tabP2的一个值,对应数据IO输出tabP0的一个值。
至于你说的“还有8X8点阵图中接口P23,P25,LP04,LP06,其中的LP04,LP06是不是指单片机的P04和P06接口啊?”我个人认为你应该自己有能力对这等电路进行分析了,不要一味只是单纯复制制作。只有自己尝试了解,以后才能做出更具特色的东西而不会仅仅停留在心形显示。

‘肆’ 如何用单片机程序控制8x16点阵LED显示出LOVE 谢谢

如果是想一起显示四个字母,把所有的LED共阴共阳,用单片机做个简单的程序,控制其通断就可以了。如果是想单个显示,则需要把你想显示的单体字母共阴共阳,不过这个程序麻烦点,要控制好几个字母电源通断的时序。当然,如果你c语言过关的话,可以变更复杂的程序,变幻一下闪烁的顺序和频率,效果会更好!
题外话:用来追MM不错~

‘伍’ 我想用单片机给女朋友做一个礼物,用单片机控制LED点阵:然后显示“XXX I LOVE YOU,我是一个单片机初学者

首先问你一下,你用过stc89c51没?或说你用过单片机没?
如果没有用过单片机只是有一块stc89c单片机,请你绕行就别往下看了
如果你会单片机,知道怎么往stc89c51里面写程序以及有一定的电路基础,请往下看!

给你一些建议:
我不知道你问什么想用单片机控制这几个字,想动态显示吗?如果只是静态显示这几个字你仅需焊几个led等,布局成你想要的字的字样即可。如果用想象大街上灯箱一闪一闪的,你用555块即可实现。
用单片机实现会高档一些,控制上花样会多一些,不过麻烦也会多一些。比如显示“XXX”汉字比较不好用led布局,你算一下要用多少led啊。

你的想法比较好,为女朋友创新一些,但是实现起来,对你来说是有些困难的

给你一些建议,你可以制作一个音乐盒,送你女朋友!

‘陆’ 设计一个用于51单片机的8x8的单色点阵LED驱动程序使,显示一个心形,在Proteus上仿真 求大神

#include<reg52.h>
unsigned char code taba[]={0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7};
unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay1(void)
{
unsigned char i,j,k;

for(k=8;k>0;k--)
for(i=10;i>0;i--)
for(j=15;j>0;j--);

}
main()
{
unsigned int i;
while(1)
{
for(i=0;i<8;i++)
{
P2=taba[i];
P0=tabb[i];
delay1();}
}

}

‘柒’ 跪求51单片机16*16点阵代码显示“老爸您辛苦了我爱您”,非常感谢

可以用proteus仿真显示16×16点阵汉字,需要用4块8×8LED点阵模块拼成,再用4片74HC573锁存器驱动点阵屏。仿真图如下所示。

‘捌’ 单片机点阵显示心形代码,急!!求大神。。。

把点阵图形的代码存于表格中,一次取一个数,反复显示即可。

‘玖’ 为什么我的51单片机点阵数码管显示爱心图形,而是全亮

仿真LED点阵屏,别用三极管,这不是实物,不用考虑驱动问题。关键是接三极管后,仿真图变得复杂,反倒出错。看你第二个图的点阵屏,上面引脚全为红点,都是高电平,而下面的引脚全是蓝点,都是低电平,所以全亮。并没有实现按列(或按行)扫描。就是仿真图画得太复杂了,又用了总线加标网络标号,而网络标号又不对。下图,虽然是16*16的点阵,但主要说明,点阵屏的行,列引脚都直接与锁存器连接,不要三极管,不要电阻,越简单越好。不要用实物的驱动想法画仿真图,反倒出错。

‘拾’ 单片机程序8x8led点阵显示心形并实现左移右移的程序

你用取模软件先点个心形,然后用字节左右移来实现就可以了
我有16*16点阵的各种动态效果程序
给你看下总共有12种动态效果,你改成8*8就可以了
/*************呈现各种显示效果的函数集****************/
void flash_(uchar *flash_word,uchar flash_heard,uchar number,uchar s,uchar state)//百叶窗效果
{register uchar i,j,k,l;
for(i=0;i<number;i++)
{
for(j=0;j<16;j++)
{
for(l=0;l<8;l++)
{
if(j<8)
{
dispram[l*4+1]=dispram[l*4+1]&0xff<<j|(flash_word[(flash_heard+i)*32+l*4]>>(7-j));
dispram[l*4+2]=dispram[l*4+2]&0xff>>j|(flash_word[(flash_heard+i)*32+l*4+3]<<(7-j)&0x10);
}
else
{
dispram[l*4] =dispram[l*4]&0xff<<(j-7)|flash_word[(flash_heard+i)*32+l*4]>>(15-j);
dispram[l*4+1]=flash_word[(flash_heard+i)*32+l*4]<<(j-7)|(flash_word[(flash_heard+i)*32+l*4+1]>>(15-j));
dispram[l*4+2]=flash_word[(flash_heard+i)*32+l*4+2]<<(15-j)|(flash_word[(flash_heard+i)*32+l*4+3]>>(j-7));
dispram[l*4+3]=(dispram[l*4+3]&0xff>>(j-7))|flash_word[(flash_heard+i)*32+l*4+3]<<(15-j);
}
}
delay(s*SPEED);
}
delay(state*SPEED);
}
}

/*******************霓虹灯效果************************/
void flash(uchar *flash_word,uchar flash_heard,uchar number,uchar s,uchar state)
{register uchar i,j,k,l;
for(i=0;i<number;i++)
{
for(j=0;j<=16;j++)
{
for(k=17;k>j;k--)
{
for(l=0;l<16;l++)
{
if(j>8)
{
dispram[l*2] =1<<(8-k+j)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));
dispram[l*2+1]=flash_word[(flash_heard+i)*32+l*2+1];
}
else
{
dispram[l*2]=1<<(8-k+j);
dispram[l*2+1]=1<<(16-k+j)|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j));
}
}
delay(s*SPEED);
}
for(k=17;k>j;k--)
{
for(l=0;l<16;l++)
{
if(j>8)
{
dispram[l*2]=1<<(k-8)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));
}
else
{
dispram[l*2]=1<<(k-8);
dispram[l*2+1]=1<<k|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j));
}
}
delay(s*SPEED);
}
}
delay(state*SPEED);
}
}

/*******************跳动的米奇*********************/
void miqi_jump(void)
{uchar jump_i;
while((receive[1]&0x0f)<2)
{
switch (abc/7280)//(receive[0]&0x0f)%9
{
case 0:for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2] = Bmp1[14][jump_i*2]<<1|Bmp1[14][jump_i*2+1]>>7;
dispram[jump_i*2+1] = Bmp1[14][jump_i*2+1]<<1;//左移
}break;
case 1:for(jump_i=0;jump_i<15;jump_i++)
{dispram[0] = 0;
dispram[1] = 0;
dispram[jump_i*2+2] = Bmp1[14][jump_i*2];
dispram[jump_i*2+3] = Bmp1[14][jump_i*2+1];}
break;//下移
case 2:for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2+1] = Bmp1[14][jump_i*2+1]>>1|Bmp1[14][jump_i*2]<<7;
dispram[jump_i*2] = Bmp1[14][jump_i*2]>>1;
}break;//右移
case 3:for(jump_i=0;jump_i<15;jump_i++)
{dispram[30] = 0;
dispram[31] = 0;
dispram[jump_i*2] = Bmp1[14][jump_i*2+2];
dispram[jump_i*2+1] = Bmp1[14][jump_i*2+3];}
break;//上移
case 4: for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2+2] = Bmp1[14][jump_i*2]<<1|Bmp1[14][jump_i*2+1]>>7;
dispram[jump_i*2+3] = Bmp1[14][jump_i*2+1]<<1;//左移
dispram[0] = 0;
dispram[1] = 0;
} break;//下移
case 5: for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2+1] = Bmp1[14][jump_i*2+3]>>1|Bmp1[14][jump_i*2+2]<<7;
dispram[jump_i*2] = Bmp1[14][jump_i*2+2]>>1;
dispram[30] = 0;
dispram[31] = 0;
} break;//上移
case 6: for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2+3] = Bmp1[14][jump_i*2+1]>>1|Bmp1[14][jump_i*2]<<7;
dispram[jump_i*2+2] = Bmp1[14][jump_i*2]>>1;
dispram[0] = 0;
dispram[1] = 0;
}
break;
case 7: for(jump_i=0;jump_i<16;jump_i++)
{
dispram[jump_i*2] = Bmp1[14][jump_i*2+2]<<1|Bmp1[14][jump_i*2+3]>>7;
dispram[jump_i*2+1] = Bmp1[14][jump_i*2+3]<<1;//左移
dispram[30] = 0;
dispram[31] = 0;
} break;
case 8:for(jump_i=0;jump_i<32;jump_i++)
dispram[jump_i] = Bmp1[14][jump_i];break;
}
}
}
/********从wordsp的第OpenDheard个字开始开门效果显示number个字**********/
//开门效果
void Open_door(uchar wordsp[][32],uchar OpenDheard,uchar number,uchar s,uchar state)
{register uchar i,j,w;
for(w=0;w<number;w++)
{
for(j=1;j<9;j++)
{
for(i=0;i<16;i++)
{
dispram[i*2]=dispram[i*2]&0xff<<j|wordsp[OpenDheard+w][2*i]&0xff>>(8-j);
dispram[i*2+1]=dispram[i*2+1]&0xff>>j|wordsp[OpenDheard+w][1+2*i]&0xff<<(8-j);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/********从wordsp的第CloseDheard个字开始关门效果显示number个字**********/
//关门效果
void Close_door(uchar wordsp[][32],uchar CloseDheard,uchar number,uchar s,uchar state)
{register uchar i,j,w;
for(w=0;w<number;w++)
{
for(j=1;j<9;j++)
{
for(i=0;i<16;i++)
{
dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[CloseDheard+w][2*i]&0xff<<(8-j);
dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[CloseDheard+w][1+2*i]&0xff>>(8-j);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/********从wordsp的第Far_Awayheard个字开始两边拉开显示number个字**********/
//两边拉开
void Far_Away(uchar wordsp[][32],uchar Far_Awayheard,uchar number,uchar s,uchar state)
{register uchar i,j,w;
for(w=0;w<number;w++)
{
for(j=1;j<9;j++)
{
for(i=0;i<16;i++)
{
dispram[i*2]=dispram[i*2]<<j|wordsp[Far_Awayheard+w][2*i]&0xff>>(8-j);
dispram[i*2+1]=dispram[i*2+1]>>j|wordsp[Far_Awayheard+w][1+2*i]&0xff<<(8-j);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/********从wordsp的第Close_Toheard个字开始两边合拢显示number个字**********/
//两边合拢
void Close_To(uchar wordsp[][32],uchar Close_Toheard,uchar number,uchar s,uchar state)
{register uchar i,j,w;
for(w=0;w<number;w++)
{
for(j=1;j<9;j++)
{
for(i=0;i<16;i++)
{
dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[Close_Toheard+w][2*i]<<(8-j);
dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[Close_Toheard+w][1+2*i]>>(8-j);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/****************卷帘出显示number个字***************/
//卷帘出显示
void M_Words(uchar *wordsp,uchar MWheard,uchar number,uchar s,uchar state)
{register uchar i,w;
for(w=0;w<number;w++)
{
for(i=0;i<32;i++)
{
dispram[i]=wordsp[(MWheard+w)*32+i];
if(i%2)
delay(s*SPEED);
}
delay(state*TIME);
}
}

/************从UP_Pullp的第UP_Pullheard个字向上拉出number个字***************/
//向上拉出
void UP_Pull_Word(uchar UP_Pullp[][32],uchar UP_Pullheard,uchar number,uchar s,uchar state)
{register uchar i,j,k;
for(i=0;i<number;i++)
{
for(j=0;j<16;j++)
{
for(k=0;k<15-j;k++)
{
dispram[k*2]=dispram[(k+1)*2];
dispram[k*2+1]=dispram[(k+1)*2+1];
}

dispram[30-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2];
dispram[31-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2+1];

delay(s*SPEED);
}
delay(state*TIME);
}
}
/*********从UPp的第UPheard个字向上滚屏number个字***************/
//向上滚屏
void UP_Run_Word(uchar UPp[][32],uchar UPheard,uchar number,uchar s,uchar state)
{register uchar i,j,k;
for(i=0;i<number;i++)
{
for(j=0;j<16;j++)
{
for(k=0;k<15;k++)
{
dispram[k*2]=dispram[(k+1)*2];
dispram[k*2+1]=dispram[(k+1)*2+1];
}
dispram[30]=UPp[UPheard+i][j*2];
dispram[31]=UPp[UPheard+i][j*2+1];
delay(s*SPEED);
}
delay(state*TIME);
}
}

/*********从Down_Pullp的第Down_Pullheard个字向下拉出number个字***************/
//向下拉出
void Down_Pull_Word(uchar Down_Pullp[][32],uchar Down_Pullheard,uchar number,uchar s,uchar state)
{register uchar i,j,k;
for(i=0;i<number;i++)
{
for(j=0;j<16;j++)
{
for(k=15;k>j;k--)
{
dispram[k*2]=dispram[(k-1)*2];
dispram[k*2+1]=dispram[(k-1)*2+1];
}
dispram[2*j]=Down_Pullp[Down_Pullheard+i][2*j];
dispram[2*j+1]=Down_Pullp[Down_Pullheard+i][2*j+1];
delay(s*SPEED);
}
delay(state*TIME);
}
}
/*********从Downp的第UPheard个字向下滚屏number个字***************/
//向下滚屏
void Down_Run_Word(uchar *Downp,uchar UPheard,uchar number,uchar s,uchar state)
{register uchar i,j,k;
for(i=0;i<number;i++)
{
for(j=0;j<16;j++)
{
for(k=15;k>0;k--)
{
dispram[k*2]=dispram[(k-1)*2];
dispram[k*2+1]=dispram[(k-1)*2+1];
}
dispram[0]=Downp[(UPheard+i)*32+(15-j)*2];
dispram[1]=Downp[(UPheard+i)*32+(15-j)*2+1];
delay(s*SPEED);
}
delay(state*TIME);
}
}

/**********从LRp的第LRheard个字左移出显示number个字************/
//用左移出显示
void L_Removeout_Word(uchar *LRp,uchar LRheard,uchar number,uchar s,uchar state)
{register uchar i,j,k,l;
for(i=0;i<number;i++)
{
for(j=0;j<2;j++)
for(k=0;k<8;k++)
{
for(l=0;l<16;l++)
{
dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;
dispram[l*2+1]=dispram[l*2+1]<<1|LRp[(i+LRheard)*32+l*2+j]>>(7-k);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/**********从L_Pullp的第L_Pullheard个字左拉出显示number个字************/
//左拉出显示
void L_Pull_Word(uchar *L_Pullp,uchar L_Pullheard,uchar number,uchar s,uchar state)
{register uchar i,j,k,l;
for(i=0;i<number;i++)
{
for(j=0;j<2;j++)
for(k=0;k<8;k++)
{
for(l=0;l<16;l++)
{
if(j==0)
{
dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;
dispram[l*2+1]=(dispram[l*2+1]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l*2+1]&0xff>>(7-k);
}
else
{
dispram[l*2]=(dispram[l*2]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l*2]&0xff>>(7-k);
dispram[l*2+1]=L_Pullp[(i+L_Pullheard)*32+l*2+1];
}
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/****************卷帘出黑屏***************/
void M_Black(void)
{register uchar i;
for(i=0;i<32;i++)
{
dispram[i]=0x00;
if(i%2)
delay(5*SPEED);
}
}
/**********从RRp的第RRheard个字右移出显示number个字************/
//右移出显示
void R_Removeout_Word(uchar *RRp,uchar RRheard,uchar number,uchar s,uchar state)
{register uchar i,j,k,l;
for(i=0;i<number;i++)
{
for(j=2;j>0;j--)
for(k=0;k<8;k++)
{
for(l=0;l<16;l++)
{
dispram[l*2+1]=dispram[l*2+1]>>1|dispram[l*2]<<7;
dispram[l*2]=dispram[l*2]>>1|RRp[(i+RRheard)*32+l*2+j-1]<<(7-k);
}
delay(s*SPEED);
}
delay(state*TIME);
}
}

/**************随机跑动函数**************/
void radom_flash(uchar *Radom_p,uchar Radom_heard,uchar number,uchar s,uchar state)
{

switch ((receive[1]&0x0f)+(receive[0]&0x70)/16)
{
case 0: Open_door(Radom_p,Radom_heard,number,s,state);M_Black();break;//开门
case 1: Close_door(Radom_p,Radom_heard,number,s,state);M_Black();break;//关门
case 2: Far_Away(Radom_p,Radom_heard,number,s,state);M_Black();break;//分开
case 3: Close_To(Radom_p,Radom_heard,number,s,state);M_Black();break;//合拢
case 4: miqi_jump();
case 5: M_Words(Radom_p,Radom_heard,number,s,state);M_Black(); break;//卷帘
case 6: UP_Pull_Word(Radom_p,Radom_heard,number,s,state);break;//上拉出
case 7: UP_Run_Word(Radom_p,Radom_heard,number,s,state);break;//上滚屏
case 8: Down_Pull_Word(Radom_p,Radom_heard,number,s,state);break;//下拉出
case 9: Down_Run_Word(Radom_p,Radom_heard,number,s,state);break;
case 10: L_Removeout_Word(Radom_p,Radom_heard,number,s,state);break;//左滚屏
case 11: L_Pull_Word(Radom_p,Radom_heard,number,s,state);break;//左拉出
case 12: R_Removeout_Word(Radom_p,Radom_heard,number,s,state);break;//右滚屏
case 13: flash(Radom_p,Radom_heard,number,3,state);break;
case 14: flash_(Radom_p,Radom_heard,number,s,state);break;
}
}

阅读全文

与初学者单片机点阵显示器爱心代码相关的资料

热点内容
wpe最新源码 浏览:857
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:29
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288