本帖最后由 清風兌酒 于 2019-3-27 10:36 編輯
32顆燈搖搖棒(PCB+制作資料+元件清單+源程序+上位機)
一、說明:8個IO驅動32顆高亮發光二極管,程序對上一版本有做改進,顯示效果更好,自適應的更好。另外增加了上位機改字的功能,從而大大減少了改動源程序的麻煩。也使得改字很方便,上位機功能可支持輸入文字,大小任意,只要在32*64這個區域內就行。支持畫圖,導入BMP格式圖片及保存圖片,一共可以配置8張圖片,每個圖片獨立,軟件自帶各種圖案,也可從Word里導出圖案,顯示圖案在范圍內隨便定義大小。 二、所有資料截圖
TIM截圖20190327101630.png (26.48 KB, 下載次數: 113)
下載附件
2019-3-27 10:30 上傳
三、原理圖
TIM截圖20190327101401.png (72.98 KB, 下載次數: 93)
下載附件
2019-3-27 10:27 上傳
四、PCB截圖
TIM截圖20190327101441.png (45.76 KB, 下載次數: 100)
下載附件
2019-3-27 10:28 上傳
TIM截圖20190327101330.png (132.79 KB, 下載次數: 111)
下載附件
2019-3-27 10:28 上傳
五、上位機軟件說明請看:“64x32搖搖棒取模軟件幫助文檔” 下載波特率:2400 8-N-1 下載字幕數據: 請正確連接4P下載線,如下圖:
圖片1.png (326.08 KB, 下載次數: 97)
下載附件
2019-3-27 10:24 上傳
下載時請這樣放置,讓搖搖棒豎著放,意在不讓滾珠開關導通,這樣會導致下載不了。上電后有些LED會亮,指示可以下載字幕數據,如果不亮請重新上電。
圖片2.png (257.25 KB, 下載次數: 114)
下載附件
2019-3-27 10:24 上傳
軟件配置:生成方式配置
圖片3.png (13.82 KB, 下載次數: 97)
下載附件
2019-3-27 10:24 上傳
串口設置中:請務必選擇2400波特率,串口選擇對應的串口號。或者從設備管理器COM管理看對應串口號。一般軟件會自動搜索,前提是先插了USB轉串口再打開軟件。
圖片4.png (21.3 KB, 下載次數: 89)
下載附件
2019-3-27 10:24 上傳
六、程序 #include <NEW_8051.H> #include <task.h> //緩存 #define uchar unsigned char
#define uint unsigned int //宏定義
#define KEY P3^0 //定義畫面切換按鍵
uchar KY; //KY作用在后面說明
uchar disp=0; //顯示漢字指針,該參數+1的話,顯示的字符多4個,同時要給要顯示的漢字取模加到漢字數組中。
uchar pic=0,num=0; //pic為按鍵次數;num為中斷次數
uchar code xinjiaxin[]={
0x00,0x0E,0x11,0x21,0x42,0x84,0x42,0x21,0x11,0x0E,0x00,0x08,0x08,0x3E,0x08,0x08, 0x00,0x00,0x0E,0x1E,0x3C,0x78,0x3C,0x1E,0x0E,0x00,0x14,0x14,0x14,0x14,0x00,0x0E, 0x1F,0x3F,0x7E,0xFC,0x7E,0x3F,0x1F,0x0E,/*"xinjiaxin*/
};
unsigned char code miss[] = {
0x00,0x00,0x00,0x81,0xFF,0x81,0x00,0x00,0x00,0x00,0x04,0x7C,0x04,0x7C,0x04,0x7C, 0x00,0x7D,0x00,0x5C,0x54,0x54,0x74,0x00,0x5C,0x54,0x54,0x74,0x00,0x00,0x00,0x7F, 0x80,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,/*I miss U*/
};
/*****函數聲明*****/
void display2(void);
void display5(void);
/*****n(單位us微秒)延時子程序*****/
void DelayUs(uint N)
{
uint x;
for(x=0; x<=N;x++);
}
/*****主函數*****/
void main(void)
{
IT0=1;
EX0=1;
EA=1; //開中斷,下降沿中斷
KY=0;
while(1) //主程序中只檢測按鍵
{
if(KEY==0) //圖案切換鍵按下
{
DelayUs(20000); //去除按鍵抖動
if(KEY==0);
{
pic++;
disp=0;
num=0;
} //endif
} //endif
} //endwhile
} //endmain
/*****中斷服務程序*****/
void intersvr0(void) interrupt 0 using 1
{
KY=~KY; //每個搖動來回水銀開關會在擺幅兩端分別產生下降沿中斷,只提取其中一次(從左向右搖才顯示)
if(KY==0)
{
if(pic>1)pic=0;//總共有6個圖案
num++; //計算中斷次數
switch(pic) //選擇顯示圖案
{
case 1:{display2();}break;
case 2:{display5();}break;
default:{display2();}
}
}
}
/*****顯示子程序3(漢字)*****/
void display2(void)
{
uchar i;
DelayUs(5000);
for(i=0;i<40;i++)
{
P1=~miss[i*1];
DelayUs(75); }
}
/*****顯示子程序6(漢字)*****/
void display5(void)
{ uchar i;
DelayUs(5000);
for(i=0;i<40;i++)
{
P1=~xinjiaxin[i*1];
DelayUs(65);
}
}
/*****END*****/
|