IN14輝光鐘 PCB文件及程序源碼說明(轉自舸輪綜合船舶)
版本V1.1
除了右邊有一個8550外,PCB中幾乎所有的三極管型號均為13001
7805最好加一個微型的散熱器,實測發熱較大
NE555只是拿來閃爍冒號的,不是升壓的,需另外配升壓板
NE555右上方那個R 500k阻值具體是多少需要試,這個阻值決定了冒號的閃爍頻率
閃爍的冒號(氖泡)從板子左下角的兩個2pin分別接入,切記不可并聯后接入
PowerRealy是一個繼電器,是用來控制升壓模塊通斷的,封裝是典型黃色的HK信號繼電器
繼電器左邊的兩個接口,標有- S +的是紅外熱釋探頭的接入口,實現人來自動開,可在-和S之間再并聯一個自鎖開關可實現手動開關,另一個是-IN+是電源輸入,參考電壓12v,電流約0.2A
單片機左邊的2pin接口是升壓模塊電源接口
調時按鈕是KEY1 KEY2
R4 R2 R7 R1是四個8路排阻,排阻有小白點的一端對準焊盤正方形的一端
板子下方中間的+HV-是升壓模塊輸出接入點
其左邊的Out+分別接4個輝光管的陽極
為了節省板子(偷懶)沒有采用常規的74HC573鎖存器一組一組掃描著輸出,而是采用每個引腳專門控制一位,但引腳剛好又差了一個,無奈就加了一個573,把變化最小的第一位數字和調時按鈕接在上面
左上角的2032BAT是接紐扣電池的,能夠實現掉電走時,但我不知為何沒成功
現在程序還不是很完善,有一些bug,已知的有:在整點時小時位會延時1分鐘,比如從20:59到21:00時會先跳到20:00然后一分鐘后才會變為21:01,調時時有時候小時那邊會一直在十內循環,不管他直接多按幾輪一般能出來,調分時有時會只有個位動,好像這時候只能重啟了。
焊接時一定要注意三極管引腳之間別短路了!
焊接時一定要注意三極管引腳之間別短路了!
焊接時一定要注意三極管引腳之間別短路了!
即使看著沒短路也要用萬用表打一下以防萬一,Protel自帶的三極管封裝為什么引腳焊盤之間距離如此感人我也不知道
四組Out-(注意最右邊那三個是一組,最左邊從Q25和Q26中間引腳引出的兩個引腳也是一組)各自接什么參照網上的51單片機引腳定義再對照下表:(左邊第一位代表從左往右第幾個輝光管,第二位表示此輝光管對應引腳的數字,右邊表示單片機的對應引腳)
11 P22
12 P23
20 P34
21 P06
22 P07
23 P21
24 P20
25 P17
26 P30
27 P31
28 P32
29 P33
30 P03
31 P04
32 P02
33 P01
34 P05
35 P00
40 P16
41 P35
42 P36
43 P37
44 P10
45 P11
46 P12
47 P13
48 P14
49 P15
成品內構照片.JPG (1.44 MB, 下載次數: 55)
下載附件
2019-3-14 10:33 上傳
成品照片1.JPG (1.19 MB, 下載次數: 56)
下載附件
2019-3-14 10:33 上傳
成品照片2.JPG (1.07 MB, 下載次數: 56)
下載附件
2019-3-14 10:33 上傳
輝光管引腳(看清方向).jpg (90.72 KB, 下載次數: 65)
下載附件
2019-3-14 10:33 上傳
裝盒前電路.jpg (1.72 MB, 下載次數: 54)
下載附件
2019-3-14 10:33 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (56.2 KB, 下載次數: 56)
下載附件
2019-3-14 15:47 上傳
0.png (11.27 KB, 下載次數: 60)
下載附件
2019-3-14 15:48 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DS1302_CLK = P2^4;
- sbit DS1302_IO = P2^5;
- sbit DS1302_RST = P2^6;
- sbit dSW=P2^7;
- sbit mode=P2^2;
- sbit inc=P2^3;
- sbit d11=P2^2;
- sbit d12=P2^3;
- sbit d20=P3^4;
- sbit d21=P0^6;
- sbit d22=P0^7;
- sbit d23=P2^1;
- sbit d24=P2^0;
- sbit d25=P1^7;
- sbit d26=P3^0;
- sbit d27=P3^1;
- sbit d28=P3^2;
- sbit d29=P3^3;
- sbit d30=P0^3;
- sbit d31=P0^4;
- sbit d32=P0^2;
- sbit d33=P0^1;
- sbit d34=P0^5;
- sbit d35=P0^0;
- sbit d40=P1^6;
- sbit d41=P3^7;
- sbit d42=P3^6;
- sbit d43=P3^5;
- sbit d44=P1^0;
- sbit d45=P1^1;
- sbit d46=P1^2;
- sbit d47=P1^3;
- sbit d48=P1^4;
- sbit d49=P1^5;
- sbit ACC0 = ACC^0;
- sbit ACC7 = ACC^7;
- uchar temp,date,hour,minute,second,position;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=112;y>0;y--);
- }
- void DS1302InputByte(unsigned char d)
- {
- unsigned char i;
- ACC = d;
- for(i=8; i>0; i--)
- {
- DS1302_IO = ACC0;
- DS1302_CLK = 1;
- DS1302_CLK = 0;
- ACC = ACC >> 1;
- }
- }
- unsigned char DS1302OutputByte(void)
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- ACC = ACC >>1;
- ACC7 = DS1302_IO;
- DS1302_CLK = 1;
- DS1302_CLK = 0;
- }
- return(ACC);
- }
- void Write1302(unsigned char ucAddr, unsigned char ucDa)
- {
- DS1302_RST = 0;
- DS1302_CLK = 0;
- DS1302_RST = 1;
- DS1302InputByte(ucAddr);
- DS1302InputByte(ucDa);
- DS1302_CLK = 1;
- DS1302_RST = 0;
- }
- unsigned char Read1302(unsigned char ucAddr)
- {
- unsigned char ucData;
- DS1302_RST = 0;
- DS1302_CLK = 0;
- DS1302_RST = 1;
- DS1302InputByte(ucAddr|0x01);
- ucData = DS1302OutputByte();
- DS1302_CLK = 1;
- DS1302_RST = 0;
- return(ucData);
- }
- void DS1302_init()
- {
- if(Read1302(0xc1) != 0xf0)
- {
- Write1302(0x8e,0x00) ;
- Write1302(0xc0,0xf0) ;
- Write1302(0x8c,0x10) ;
- Write1302(0x88,0x04) ;
- Write1302(0x86,0x06) ;
- Write1302(0x84,0x23) ;
- Write1302(0x82,0x59) ;
- Write1302(0x80,0x55) ;
- Write1302(0x90,0xa4) ;
- Write1302(0x8e,0x80) ;
- }
- }
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char ly_dis[4];
- unsigned int i=0;
- float tt;
- int ltemp;
- void display()
- {
- uchar D1,D2,D3,D4;
- D1=hour/16;
- D2=hour%16;
- D3=minute/16;
- D4=minute%16;
- if (D1==0)
- {dSW=1;d11=0;d12=0;dSW=0;delay(1);d11=1;d12=1;}
- else if (D1==1)
- {dSW=1;d11=1;d12=0;dSW=0;delay(1);d11=1;d12=1;}
- else if (D1==2)
- {dSW=1;d11=0;d12=1;dSW=0;delay(1);d11=1;d12=1;}
- if (D2==0)
- {d20=1;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==1)
- {d20=0;d21=1;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==2)
- {d20=0;d21=0;d22=1;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==3)
- {d20=0;d21=0;d22=0;d23=1;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==4)
- {d20=0;d21=0;d22=0;d23=0;d24=1;d25=0;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==5)
- {d20=0;d21=0;d22=0;d23=0;d24=0;d25=1;d26=0;d27=0;d28=0;d29=0;}
- else if (D2==6)
- {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=1;d27=0;d28=0;d29=0;}
- else if (D2==7)
- {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=1;d28=0;d29=0;}
- else if (D2==8)
- {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=1;d29=0;}
- else if (D2==9)
- {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=1;}
- if (D3==0)
- {d30=1;d31=0;d32=0;d33=0;d34=0;d35=0;}
- else if (D3==1)
- {d30=0;d31=1;d32=0;d33=0;d34=0;d35=0;}
- else if (D3==2)
- {d30=0;d31=0;d32=1;d33=0;d34=0;d35=0;}
- else if (D3==3)
- {d30=0;d31=0;d32=0;d33=1;d34=0;d35=0;}
- else if (D3==4)
- {d30=0;d31=0;d32=0;d33=0;d34=1;d35=0;}
- else if (D3==5)
- {d30=0;d31=0;d32=0;d33=0;d34=0;d35=1;}
- if (D4==0)
- {d40=1;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==1)
- {d40=0;d41=1;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==2)
- {d40=0;d41=0;d42=1;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==3)
- {d40=0;d41=0;d42=0;d43=1;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==4)
- {d40=0;d41=0;d42=0;d43=0;d44=1;d45=0;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==5)
- {d40=0;d41=0;d42=0;d43=0;d44=0;d45=1;d46=0;d47=0;d48=0;d49=0;}
- else if (D4==6)
- {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=1;d47=0;d48=0;d49=0;}
- else if (D4==7)
- {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=1;d48=0;d49=0;}
- else if (D4==8)
- {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=1;d49=0;}
- else if (D4==9)
- {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=1;}
-
- }
- void set()
- {
-
- if(mode==0)
- {
- delay(5);
- if(mode==0)
- {
- while(!mode);
- hour=Read1302(0x85);
- minute=Read1302(0x83);
- while(1)
- {
- if(inc==0)
- { delay(5);
- if(inc==0)
- {
- while(!inc);
-
- hour=(hour/16)*10+hour%16;
- hour++;
- if(hour==24) hour=0;
- hour=(hour/10)*16+hour%10;
-
- }
- }
- if(mode==0)
- {
- while(!mode);
- while(1)
- {
- if(inc==0)
- { delay(5);
- if(inc==0)
- {
- while(!inc);
- minute=(minute/16)*10+minute%16;
- minute++;
- if(minute==60) minute=0;
- minute=(minute/10)*16+minute%10;
- display();
- }
- }
- if(mode==0)
- {
- while(!mode);
-
-
- Write1302(0x8e,0x00) ;
- Write1302(0x84,hour) ;
- Write1302(0x8e,0x80) ;
- hour=Read1302(0x85);
-
- Write1302(0x8e,0x00) ;
- Write1302(0x82,minute) ;
- Write1302(0x8e,0x80) ;
- minute=Read1302(0x83);
- display();
- return;
-
- }
- }
- }
- display();
- }
- }
- }
- }
- void main()
- {
- delay(10);
- DS1302_init();
- delay(80);
- while(1)
- {
- date=Read1302(0x87);
- hour=Read1302(0x85);
- minute=Read1302(0x83);
- second=Read1302(0x81);
- if (hour==0x23&&minute==0x59&&second==0x59)
- {
- delay(100);
- Write1302(0x8e,0x00) ;
- Write1302(0x84,0x00) ;
- hour=0;
- second=0;
- Write1302(0x80,0x00) ;
- Write1302(0x82,0x00) ;
- Write1302(0x8e,0x80) ;
- minute=0;
- }
-
- display();
- set();
- }
- }
復制代碼
0.png (3.95 KB, 下載次數: 68)
下載附件
2019-3-14 15:48 上傳
所有資料51hei提供下載:
程序.zip
(40.73 KB, 下載次數: 38)
2019-3-14 10:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
外殼.zip
(403.55 KB, 下載次數: 34)
2019-3-14 10:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
PCB文件.zip
(781.37 KB, 下載次數: 42)
2019-3-14 10:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|