喜歡研究點(diǎn)陣的朋友可以看下
DIY 16*64雙色點(diǎn)陣,采用3.75MM的雙色點(diǎn)陣模塊設(shè)計,模塊與模塊的距離合適,間隔不大,不會影響顯示效果,PCB做工好,長303MM,寬75MM。 提供多種學(xué)習(xí)程序,足夠玩轉(zhuǎn)16*64雙色點(diǎn)陣,從初級到中級到高級程序設(shè)計學(xué)習(xí)。從設(shè)計到整理完資料,幾個人花了一個多月的時間,認(rèn)真做好教程,絕非網(wǎng)上亂抄襲,都是經(jīng)過我們測試好,注釋好以及說明好接口讓每一位愛好者都能輕松學(xué)習(xí)控制點(diǎn)陣,從中學(xué)到知識。
整套材料有: 下面介紹制作過程中的順序以及常見問題分析: 焊接順序 一.先焊接PCB背面的輸入 輸出雙列8P排針,不然焊了點(diǎn)陣模塊,排針就不好焊接了。背面的1K*4電阻4個無需焊接。如果需要上螺絲也在此時放螺絲。 二.然后放置8*8雙色點(diǎn)陣模塊,如下圖這樣放置,有字的朝下,或者看中間的缺口,突出的朝下。這模塊不是很容易放置,注意每個管腳都不要彎曲,且管腳的距離要合適,這樣放置起來不會這么吃力。 三.焊接PCB正面的芯片了,這個比較容易,雖然是貼片的,但是管腳間距都比較大,容易焊接,初學(xué)者都不必?fù)?dān)心,另外板上的電容也不需要焊接。焊接上去就是電源濾波 芯片工作穩(wěn)定一點(diǎn)。芯片的第一腳注意就可以了,芯片上有個點(diǎn)的就是第一個腳,焊盤上也是如此,焊接時看清楚,芯片都朝一個方向,比較容易看出。 四.東西都焊接好后,檢查下芯片有無虛焊,點(diǎn)陣管腳有無虛焊,這個錯誤很容易犯。也可用測試程序看出來。PCB上的元件名稱都標(biāo)的非常清楚,很容易對號入座。 常見問題分析 1.焊接完成后,與控制卡連接,或者用自己的單片機(jī)實(shí)驗(yàn)板,連接方法見程序說明。每個程序都有接口說明,方便大家學(xué)習(xí)測試用。 2.如果發(fā)現(xiàn)哪行不亮 或者列 不亮 一般是芯片虛焊,芯片焊接正常一般不會有問題。 恭喜制作成功后,好好玩轉(zhuǎn)提供的源程序吧,里面的程序注視比較多,我們花了很多心血去整理調(diào)試加注視的,相信對你學(xué)習(xí)控制點(diǎn)陣有幫助,如果有能力整理出來可以做一個商業(yè)化的程序了。 最后祝大家制作成功,享受DIY帶來的樂趣。  
點(diǎn)陣屏的單片機(jī)源程序如下:
- /***************************************************************
- 16*64 雙色點(diǎn)陣 移動顯示時間+靜態(tài)切換時間 程序
- /***************************************************************
- 如果有控制卡,下載此程序插上排線即可測試
- 如果沒有控制卡,自己根據(jù)下面的接口用杜邦線與點(diǎn)陣連接即可測試
- 單片機(jī):STC12C5A32S2 或者其他12系列型號都可以
- 晶振18.432M
- 功能簡介:上電顯示“精品制”
- 然后切換顯示時間 星期 月日 年 再移動顯示時間信息
- 4個按鍵 分別進(jìn)行調(diào)時設(shè)置
- 程序用中斷掃描法 驅(qū)動點(diǎn)陣 程序參考價值較好!
- /*
- 點(diǎn)陣屏管腳定義
- 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 //定義空格數(shù)
- #define RI 10 //定義日數(shù)
- #define JI 25 //定義節(jié)數(shù)
- #define GT 163 //定! 數(shù)
- #define XI 109 //定★ 數(shù)
- /*******鍵盤***********************************************************************/
- 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; //屏紅數(shù)據(jù)
- sbit G1 =P0^5; //屏綠數(shù)據(jù)
- 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 //定義陽歷節(jié)日數(shù)(0----68)
- uchar disp_mode=0xFF;
- /************************************************************
- //DS1302時鐘定義全局變量
- /**********公歷年,月,日,星期,小時,分鐘,秒********************************/
- uchar xdata yy, mo, dd, week, hh, mm, ss;
- /*************農(nóng)歷年, 月, 日,*************************************/
- uchar xdata year_moon,month_moon,day_moon;
- /*************************************************************************************/
- /*涵數(shù)聲明****************************************************************************/
- void LEDinit(); /*************************************清屏*/
- void DELAY_US(int num); /*************************************延時函數(shù)*/
- void Beep_key(void); /*************************************喇叭函數(shù)*/
- void DS1302_TimeStop(bit flag); /*************************************喇叭函數(shù)*/
- 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]; /**************************************顯示緩沖區(qū)*/
- //*********************************************************************************
- 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}; //(游動的字)時段設(shè)置
- Uxdata ShowDAT[6]; //固定顯示
- //Uxdata SHENGRI_DATA[18]; //六組生日數(shù)據(jù)
- Uxdata shengRi; //生日
- //***************************************
- uint xdata HalfCount; //半秒記數(shù)
- uint xdata b; //閃爍控制
- uint xdata Light; //亮度
- uchar disrow=0 ; //當(dāng)前掃描行
- uchar e; //操作變量
- uchar ADJ; //按鍵變量
- uchar switc; //畫面切換變量
- uchar windw; //顯示允許變量
- uchar flow; //邊框流動變量
- uchar menu; //當(dāng)前菜單0自動1調(diào)年月日2調(diào)時分秒星期
- uchar LED_X,LED_Y; //LED橫豎坐標(biāo)變量(用于顛倒顯示)
- uchar Menmu; //顯示控制
- //***************************************
- BIT LEDup_dow; //LED顛倒顯示標(biāo)記1正顯示0倒顯示
- BIT twinkle; //調(diào)整閃爍標(biāo)記
- BIT Run_flay; //潤年標(biāo)記
- BIT IR_OK=0; //紅外線接收標(biāo)記
- BIT Set_bit=0; //設(shè)置時間標(biāo)記
- BIT GUn_bit=0; //滾動標(biāo)記
- BIT CKTIME_1=0; //校時標(biāo)記
- BIT jieqi_bit=0; //有無節(jié)氣標(biāo)記
- BIT NO_flow; // 取消邊框
- bit stop_bit=0; // (流動停止標(biāo)志)
- /**********自定義頭文件*****************************/
- #include "LED_drive.h" //加載LED掃描驅(qū)動
- #include "ASCII.h" //加載自定義字模
- #include "DS1302.h" //加載DS1302驅(qū)動
- //#include "DHT11.h" //溫濕度傳感器
- //#include "nongli.h" //加載農(nóng)歷計算程序
- #include "LED_display.h" //加載顯示控制程序
- #include "NEC+RC5_IR.h" //遙控頭文件(HT6621或TC9012)
- #include "key_adjust.h" //加載按鍵輸入調(diào)節(jié)程序
- //***********************************************************************
- void write_sec(void)
- {
- uchar aa;
- read_clockS();//讀出DS1302所有時間數(shù)據(jù)
- 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顯示農(nóng)歷
- // 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字符小時個位
- // }
- }
- }
- /*********************************************************************************************
- 函數(shù)名:intmcu()
- 調(diào) 用:定時和外中斷初始化涵數(shù)
- 參 數(shù):無
- 返回值:無
- 結(jié) 果:
- 備 注:
- /**********************************************************************************************/
- void intmcu()
- {
- TH1=TH; //16位計數(shù)寄存器T1高8位定時器T1初值
- TL1=TL; //16位計數(shù)寄存器T1低8位定時器T1初值
- //**************************************
- //IP-x x pt2 ps pt1 px1 pt0 px0*/
- IP =B(00000011); //外中斷0優(yōu)先用于紅外遙控
- //**************************************
- //TCON-TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0*/
- TCON=B(01010001);//IT0下降沿觸發(fā)INT0.(IT0=0為低電平觸發(fā))TR1掃描點(diǎn)陣
- //**************************************
- //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;//農(nóng)歷
- }
- write_sec ();//----------------------------------顯示切換和秒更新
- //flow_frame();//----------------------------------流水邊框
- }
- void Play_INT(void) {
- LED_rectangle_erasure(1,1,64,16,0);//空白填充矩形框
- intmcu ();//初始化單片機(jī)中斷和定時器中斷初始化
- 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進(jìn)入頻譜=========================
- /*-----頻譜顯示--------*/
- // NYRLoad (); //漢字加載今天是2012年01月08日星期三
- //Hz_LeftDispla(1); //漢字左移動程序
- //Picture16X64(Pic64X16Y3IN); //--------------------------圖片
-
- LEDinit ();//***************************************內(nèi)存清屏
- }
- /**********************************************************************************************/
- void main(void)
- {
- DS1302_Initial ();//1302初始化
- //Read_temperature();//讀溫度
- read_clockS ();//讀1302時間
- Beep_set ();//測試?yán)?br />
- Beep_key ();//測試?yán)?br />
- intmcu();
- LEDinit ();//開中斷前先清屏防止亂顯
- Play_INT ();//初始化數(shù)據(jù)
- //Lintmcu(); Lintmcu2();
- while(1)
- {
- TimeCHck (); //--------------------------------時間補(bǔ)償
- KEY_Process (); //--------------------------------按鍵操作
- KEY_Manage (); //--------------------------------按鍵執(zhí)行
- if(menu==0)
- Play_show();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼 包含以下源碼與資料:
16X64點(diǎn)陣屏與控制卡原理圖
PC2002取模軟件
中級--16x64點(diǎn)陣萬年歷c
中級--點(diǎn)陣多種移動模式
初級--匯編 點(diǎn)陣16X(16-32-64-128-256)asm
初級--靜態(tài)顯示程序
測試--左移測試程序
測試--逐行點(diǎn)亮測試
高級--16分頻與64分頻16X64雙色點(diǎn)陣頻譜程序
高級--點(diǎn)陣上位機(jī)軟件與下位機(jī)程序
高級--點(diǎn)陣多模式顯示時間程序
高級-移動顯示時間+靜態(tài)切換顯示時間
16X64雙色點(diǎn)陣制作說明V1.0.doc
芯片資料
所有資料51hei提供下載:
16X64點(diǎn)陣資料.rar
(7.95 MB, 下載次數(shù): 711)
2018-2-20 17:10 上傳
點(diǎn)擊文件名下載附件
|