『壹』 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;
}
}