喜歡研究點陣的朋友可以看下
DIY 16*64雙色點陣,采用3.75MM的雙色點陣模塊設計,模塊與模塊的距離合適,間隔不大,不會影響顯示效果,PCB做工好,長303MM,寬75MM。 提供多種學習程序,足夠玩轉16*64雙色點陣,從初級到中級到高級程序設計學習。從設計到整理完資料,幾個人花了一個多月的時間,認真做好教程,絕非網上亂抄襲,都是經過我們測試好,注釋好以及說明好接口讓每一位愛好者都能輕松學習控制點陣,從中學到知識。

16X64點陣屏與控制卡的電路原理圖:
0.jpg (102.68 KB, 下載次數: 122)
下載附件
2018-2-20 16:07 上傳
壓縮包里面有清晰大圖(ad格式):
0.png (8.49 KB, 下載次數: 120)
下載附件
2018-2-20 16:08 上傳
整套材料有: 下面介紹制作過程中的順序以及常見問題分析: 焊接順序 一.先焊接PCB背面的輸入 輸出雙列8P排針,不然焊了點陣模塊,排針就不好焊接了。背面的1K*4電阻4個無需焊接。如果需要上螺絲也在此時放螺絲。 二.然后放置8*8雙色點陣模塊,如下圖這樣放置,有字的朝下,或者看中間的缺口,突出的朝下。這模塊不是很容易放置,注意每個管腳都不要彎曲,且管腳的距離要合適,這樣放置起來不會這么吃力。 三.焊接PCB正面的芯片了,這個比較容易,雖然是貼片的,但是管腳間距都比較大,容易焊接,初學者都不必擔心,另外板上的電容也不需要焊接。焊接上去就是電源濾波 芯片工作穩定一點。芯片的第一腳注意就可以了,芯片上有個點的就是第一個腳,焊盤上也是如此,焊接時看清楚,芯片都朝一個方向,比較容易看出。 四.東西都焊接好后,檢查下芯片有無虛焊,點陣管腳有無虛焊,這個錯誤很容易犯。也可用測試程序看出來。PCB上的元件名稱都標的非常清楚,很容易對號入座。 常見問題分析 1.焊接完成后,與控制卡連接,或者用自己的單片機實驗板,連接方法見程序說明。每個程序都有接口說明,方便大家學習測試用。 2.如果發現哪行不亮 或者列 不亮 一般是芯片虛焊,芯片焊接正常一般不會有問題。 恭喜制作成功后,好好玩轉提供的源程序吧,里面的程序注視比較多,我們花了很多心血去整理調試加注視的,相信對你學習控制點陣有幫助,如果有能力整理出來可以做一個商業化的程序了。 最后祝大家制作成功,享受DIY帶來的樂趣。  
點陣屏的單片機源程序如下:
- /***************************************************************
- 16*64 雙色點陣 移動顯示時間+靜態切換時間 程序
- /***************************************************************
- 如果有控制卡,下載此程序插上排線即可測試
- 如果沒有控制卡,自己根據下面的接口用杜邦線與點陣連接即可測試
- 單片機:STC12C5A32S2 或者其他12系列型號都可以
- 晶振18.432M
- 功能簡介:上電顯示“精品制”
- 然后切換顯示時間 星期 月日 年 再移動顯示時間信息
- 4個按鍵 分別進行調時設置
- 程序用中斷掃描法 驅動點陣 程序參考價值較好!
- /*
- 點陣屏管腳定義
- SHCP GND
- STCP GND
- R1 GND
- G1 GND
- VCC GND
- A GND
- B GND
- C D
- */
- /*
- 控制卡
- P0.0~P0.3 A B C D
- P16 SCK
- P17 STR
- R1 P04
- G1 P05
- R2 P06
- G2 P07
- ********************************************************/
- #include "Type.H"
- #define KG 0 //定義空格數
- #define RI 10 //定義日數
- #define JI 25 //定義節數
- #define GT 163 //定! 數
- #define XI 109 //定★ 數
- /*******鍵盤***********************************************************************/
- sbit KEY1 = P2^0;
- sbit KEY2 = P2^1;
- sbit KEY3 = P2^2;
- sbit KEY4 = P2^3;
- sbit ADCIO =P1^5; //AD
- /*************************************************************************************/
- #define H_PORT P0 //行138信號 scan
- sbit CK =P1^6; //時鐘OUT
- sbit STR =P1^7; //鎖存上升沿輸出鎖存
- sbit R1 =P0^4; //屏紅數據
- sbit G1 =P0^5; //屏綠數據
- sbit OE =P1^0; //全屏使能
- sbit IA =P0^0; //行控制線A
- sbit IB =P0^1; //行控制線B
- sbit IC =P0^2; //行控制線C
- sbit ID =P0^3; //行控制線D
- /*********************************************************************************/
- #define scan0 {IA=0;IB=0;IC=0;ID=0;}
- #define scan1 {IA=1;IB=0;IC=0;ID=0;}
- #define scan2 {IA=0;IB=1;IC=0;ID=0;}
- #define scan3 {IA=1;IB=1;IC=0;ID=0;}
- #define scan4 {IA=0;IB=0;IC=1;ID=0;}
- #define scan5 {IA=1;IB=0;IC=1;ID=0;}
- #define scan6 {IA=0;IB=1;IC=1;ID=0;}
- #define scan7 {IA=1;IB=1;IC=1;ID=0;}
- #define scan8 {IA=0;IB=0;IC=0;ID=1;}
- #define scan9 {IA=1;IB=0;IC=0;ID=1;}
- #define scan10 {IA=0;IB=1;IC=0;ID=1;}
- #define scan11 {IA=1;IB=1;IC=0;ID=1;}
- #define scan12 {IA=0;IB=0;IC=1;ID=1;}
- #define scan13 {IA=1;IB=0;IC=1;ID=1;}
- #define scan14 {IA=0;IB=1;IC=1;ID=1;}
- #define scan15 {IA=1;IB=1;IC=1;ID=1;}
- /*定義接口****************************************************************************/
- #define HC595_LOCK_H {STR =1;}
- #define HC595_LOCK_L {STR =0;}
- #define HC595_CLK_H {CK =1;}
- #define HC595_CLK_L {CK =0;}
- #define LS138_A_H {IA =1;}
- #define LS138_A_L {IA =0;}
- #define LS138_B_H {IB =1;}
- #define LS138_B_L {IB =0;}
- #define LS138_C_H {IC =1;}
- #define LS138_C_L {IC =0;}
- #define LS138_D_H {ID =1;}
- #define LS138_D_L {ID =0;}
- #define LS138_OE_H {OE =1;}
- #define LS138_OE_L {OE =0;}
- #define HC595_G_H {G1 =1;}
- #define HC595_G_L {G1 =0;}
- #define HC595_R_H {R1 =1;}
- #define HC595_R_L {R1 =0;}
- #define FESTIVAL_MAX 69 //定義陽歷節日數(0----68)
- uchar disp_mode=0xFF;
- /************************************************************
- //DS1302時鐘定義全局變量
- /**********公歷年,月,日,星期,小時,分鐘,秒********************************/
- uchar xdata yy, mo, dd, week, hh, mm, ss;
- /*************農歷年, 月, 日,*************************************/
- uchar xdata year_moon,month_moon,day_moon;
- /*************************************************************************************/
- /*涵數聲明****************************************************************************/
- void LEDinit(); /*************************************清屏*/
- void DELAY_US(int num); /*************************************延時函數*/
- void Beep_key(void); /*************************************喇叭函數*/
- void DS1302_TimeStop(bit flag); /*************************************喇叭函數*/
- void PWM_LIGHT(uint p); /*************************************亮度控制*/
- void intmcu( ); /*************************************中斷和定時器初始化*/
- //void Lintmcu(void); /*************************************廣告一*/
- //void Lintmcu2(void); /*************************************廣告一*/
- void LED16X64_write(uchar *str,uchar yanse,bit color);/*******************直寫漢字*/
- void LED_rectangle_erasure(uchar x1,uchar y1,uchar x2,uchar y2,uchar model);/*搽除距形*/
- void Conver_week(void); /***************************************星計算*/
- //void Conversion(void); /******************************************歷計算*/
- BYTE ManageButton(BYTE Vale); /**************************************按鍵處理*/
- uchar xdata LED_RAM[LED_byte]; /**************************************顯示緩沖區*/
- //*********************************************************************************
- INxdata naozhongtime; //鬧鐘記時
- Uxdata MOVingDAT[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,12,12,12}; //(游動的字)時段設置
- Uxdata ShowDAT[6]; //固定顯示
- //Uxdata SHENGRI_DATA[18]; //六組生日數據
- Uxdata shengRi; //生日
- //***************************************
- uint xdata HalfCount; //半秒記數
- uint xdata b; //閃爍控制
- uint xdata Light; //亮度
- uchar disrow=0 ; //當前掃描行
- uchar e; //操作變量
- uchar ADJ; //按鍵變量
- uchar switc; //畫面切換變量
- uchar windw; //顯示允許變量
- uchar flow; //邊框流動變量
- uchar menu; //當前菜單0自動1調年月日2調時分秒星期
- uchar LED_X,LED_Y; //LED橫豎坐標變量(用于顛倒顯示)
- uchar Menmu; //顯示控制
- //***************************************
- BIT LEDup_dow; //LED顛倒顯示標記1正顯示0倒顯示
- BIT twinkle; //調整閃爍標記
- BIT Run_flay; //潤年標記
- BIT IR_OK=0; //紅外線接收標記
- BIT Set_bit=0; //設置時間標記
- BIT GUn_bit=0; //滾動標記
- BIT CKTIME_1=0; //校時標記
- BIT jieqi_bit=0; //有無節氣標記
- BIT NO_flow; // 取消邊框
- bit stop_bit=0; // (流動停止標志)
- /**********自定義頭文件*****************************/
- #include "LED_drive.h" //加載LED掃描驅動
- #include "ASCII.h" //加載自定義字模
- #include "DS1302.h" //加載DS1302驅動
- //#include "DHT11.h" //溫濕度傳感器
- //#include "nongli.h" //加載農歷計算程序
- #include "LED_display.h" //加載顯示控制程序
- #include "NEC+RC5_IR.h" //遙控頭文件(HT6621或TC9012)
- #include "key_adjust.h" //加載按鍵輸入調節程序
- //***********************************************************************
- void write_sec(void)
- {
- uchar aa;
- read_clockS();//讀出DS1302所有時間數據
- if((Menmu>= 0)&&(Menmu<= 50))
- switc=0; //0-50顯示//年月
- if((Menmu>= 50)&&(Menmu<= 60))
- switc=1; //50-60顯示月日
- if((Menmu>= 60)&&(Menmu<= 70))
- switc=2; //60-70顯示時分秒
- if((Menmu>= 70)&&(Menmu<= 100))
- switc=3; //70-80顯示星期
- // if((Menmu>= 80)&&(Menmu<= 90))
- // switc=4; //40-59顯示農歷
- // if((Menmu>= 90)&&(Menmu<=100))
- // switc=5; //40-59顯示生宵
- // if((Menmu>=110)&&(Menmu<=120))
- // switc=6; //40-59顯示溫度
- // if((Menmu>=120)&&(Menmu<=130))
- // switc=7; //40-59顯示濕度
- // if((Menmu>=130)&&(Menmu<=140))
- // switc=8; //40-59顯示生日滾動
- // if((Menmu>=140)&&(Menmu<=160))
- // switc=9; //40-59顯示//溫度
- if((aa!=ss)&&(switc==0))//在時分秒星期界面時每秒顯示刷新一次秒值
- {
- aa=ss;
- // if(LEDup_dow) //***************************正向顯示
- // {
- LED_8X16_write(17,16,ss/10+48,Red,1);//刷新秒十位顯示
- LED_8X16_write( 9,16,ss%10+48,Red,1);//刷新秒個位顯示
- LED_write_english_string(47,16,":" ,Red,Noml);//寫8X16字符冒號
- LED_write_english_string(24,16,":", Red,Noml);//寫8X16字符冒號
- // }
- // else
- // {
- // LED_8X16_write(47,1,ss/10+48,Orgen,1);//刷新秒十位顯示
- // LED_8X16_write(55,1,ss%10+48,Orgen,1);//刷新秒個位顯示
- // }
- }
- if((ss=59)&&(switc==0))//在時分秒星期界面時每秒顯示刷新一次秒值
- {
- // if(LEDup_dow)
- //{
- LED_8X16_write(40,16,mm/10+48, Red,Noml);//寫8X16字符分鐘十位
- LED_8X16_write(32,16,mm%10+48, Red,Noml);//寫8X16字符分鐘個位
- LED_8X16_write(63,16,hh/10+48, Red,Noml);//寫8X16字符小時十位
- LED_8X16_write(55,16,hh%10+48, Red,Noml);//寫8X16字符小時個位
- // }
- // else
- // {
- // LED_8X16_write(24,1,mm/10+48, Green,Noml);//寫8X16字符分鐘十位
- // LED_8X16_write(32,1,mm%10+48, Green,Noml);//寫8X16字符分鐘個位
- // LED_8X16_write(1, 1,hh/10+48, Red,Noml);//寫8X16字符小時十位
- // LED_8X16_write(9, 1,hh%10+48, Red,Noml);//寫8X16字符小時個位
- // }
- }
- }
- /*********************************************************************************************
- 函數名:intmcu()
- 調 用:定時和外中斷初始化涵數
- 參 數:無
- 返回值:無
- 結 果:
- 備 注:
- /**********************************************************************************************/
- void intmcu()
- {
- TH1=TH; //16位計數寄存器T1高8位定時器T1初值
- TL1=TL; //16位計數寄存器T1低8位定時器T1初值
- //**************************************
- //IP-x x pt2 ps pt1 px1 pt0 px0*/
- IP =B(00000011); //外中斷0優先用于紅外遙控
- //**************************************
- //TCON-TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0*/
- TCON=B(01010001);//IT0下降沿觸發INT0.(IT0=0為低電平觸發)TR1掃描點陣
- //**************************************
- //TMOD-GATE1 C/T M1 M0 GATE0 C/T M1 M0
- TMOD=B(00010010);//定時器01模式1(16位)
- //**************************************
- //IE-EA X ET2 ES ET1 EX1 ET0 EX0
- IE =B(10001011); //總中斷定時中斷01和外中斷0
- //**************************************
- }
- void Play_show(void) {
- switch(switc) {
- case 0:if(windw==0)four_min_sec ();windw=1;break;//時分秒
- case 1:if(windw==1)year_month ();windw=2;break;//年月
- case 2:if(windw==2)month_day ();windw=3;break;//月日
- case 3:if(windw==3){LEDinit ();NYRLoad();Hz_LeftDispla(0);}windw=0;break; //漢字左移動程序w//星期
- // case 4:if(windw==4)nongli_display();windw=5;break;//農歷
- }
- write_sec ();//----------------------------------顯示切換和秒更新
- //flow_frame();//----------------------------------流水邊框
- }
- void Play_INT(void) {
- LED_rectangle_erasure(1,1,64,16,0);//空白填充矩形框
- intmcu ();//初始化單片機中斷和定時器中斷初始化
- Light=BCD2DEC(read_clock(10,TempCH_NumLIGHT))*13;
- if(Light<80)
- write_1302clock(TempCH_NumLIGHT,15);
- Light=BCD2DEC(read_clock(10,TempCH_NumLIGHT))*13;
- typewrite ();//打字效果"精品制作“
- //任意按鍵跳過LOGO進入頻譜=========================
- /*-----頻譜顯示--------*/
- // NYRLoad (); //漢字加載今天是2012年01月08日星期三
- //Hz_LeftDispla(1); //漢字左移動程序
- //Picture16X64(Pic64X16Y3IN); //--------------------------圖片
-
- LEDinit ();//***************************************內存清屏
- }
- /**********************************************************************************************/
- void main(void)
- {
- DS1302_Initial ();//1302初始化
- //Read_temperature();//讀溫度
- read_clockS ();//讀1302時間
- Beep_set ();//測試喇叭
- Beep_key ();//測試喇叭
- intmcu();
- LEDinit ();//開中斷前先清屏防止亂顯
- Play_INT ();//初始化數據
- //Lintmcu(); Lintmcu2();
- while(1)
- {
- TimeCHck (); //--------------------------------時間補償
- KEY_Process (); //--------------------------------按鍵操作
- KEY_Manage (); //--------------------------------按鍵執行
- if(menu==0)
- Play_show();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼 包含以下源碼與資料:
16X64點陣屏與控制卡原理圖
PC2002取模軟件
中級--16x64點陣萬年歷c
中級--點陣多種移動模式
初級--匯編 點陣16X(16-32-64-128-256)asm
初級--靜態顯示程序
測試--左移測試程序
測試--逐行點亮測試
高級--16分頻與64分頻16X64雙色點陣頻譜程序
高級--點陣上位機軟件與下位機程序
高級--點陣多模式顯示時間程序
高級-移動顯示時間+靜態切換顯示時間
16X64雙色點陣制作說明V1.0.doc
芯片資料
0.png (56.01 KB, 下載次數: 123)
下載附件
2018-2-20 16:11 上傳
所有資料51hei提供下載:
16X64點陣資料.rar
(7.95 MB, 下載次數: 711)
2018-2-20 17:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|