找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5115|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的輝光鐘開源資料(pcb+外殼CAD+程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
IN14輝光鐘 PCB文件及程序源碼說明(轉(zhuǎn)自舸輪綜合船舶)

版本V1.1

除了右邊有一個(gè)8550外,PCB中幾乎所有的三極管型號(hào)均為13001

7805最好加一個(gè)微型的散熱器,實(shí)測(cè)發(fā)熱較大

NE555只是拿來閃爍冒號(hào)的,不是升壓的,需另外配升壓板

NE555右上方那個(gè)R 500k阻值具體是多少需要試,這個(gè)阻值決定了冒號(hào)的閃爍頻率

閃爍的冒號(hào)(氖泡)從板子左下角的兩個(gè)2pin分別接入,切記不可并聯(lián)后接入

PowerRealy是一個(gè)繼電器,是用來控制升壓模塊通斷的,封裝是典型黃色的HK信號(hào)繼電器

繼電器左邊的兩個(gè)接口,標(biāo)有- S +的是紅外熱釋探頭的接入口,實(shí)現(xiàn)人來自動(dòng)開,可在-和S之間再并聯(lián)一個(gè)自鎖開關(guān)可實(shí)現(xiàn)手動(dòng)開關(guān),另一個(gè)是-IN+是電源輸入,參考電壓12v,電流約0.2A

單片機(jī)左邊的2pin接口是升壓模塊電源接口

調(diào)時(shí)按鈕是KEY1 KEY2

R4 R2 R7 R1是四個(gè)8路排阻,排阻有小白點(diǎn)的一端對(duì)準(zhǔn)焊盤正方形的一端

板子下方中間的+HV-是升壓模塊輸出接入點(diǎn)

其左邊的Out+分別接4個(gè)輝光管的陽極

為了節(jié)省板子(偷懶)沒有采用常規(guī)的74HC573鎖存器一組一組掃描著輸出,而是采用每個(gè)引腳專門控制一位,但引腳剛好又差了一個(gè),無奈就加了一個(gè)573,把變化最小的第一位數(shù)字和調(diào)時(shí)按鈕接在上面
左上角的2032BAT是接紐扣電池的,能夠?qū)崿F(xiàn)掉電走時(shí),但我不知為何沒成功
現(xiàn)在程序還不是很完善,有一些bug,已知的有:在整點(diǎn)時(shí)小時(shí)位會(huì)延時(shí)1分鐘,比如從20:59到21:00時(shí)會(huì)先跳到20:00然后一分鐘后才會(huì)變?yōu)?1:01,調(diào)時(shí)時(shí)有時(shí)候小時(shí)那邊會(huì)一直在十內(nèi)循環(huán),不管他直接多按幾輪一般能出來,調(diào)分時(shí)有時(shí)會(huì)只有個(gè)位動(dòng),好像這時(shí)候只能重啟了。

焊接時(shí)一定要注意三極管引腳之間別短路了!
焊接時(shí)一定要注意三極管引腳之間別短路了!
焊接時(shí)一定要注意三極管引腳之間別短路了!

即使看著沒短路也要用萬用表打一下以防萬一,Protel自帶的三極管封裝為什么引腳焊盤之間距離如此感人我也不知道

四組Out-(注意最右邊那三個(gè)是一組,最左邊從Q25和Q26中間引腳引出的兩個(gè)引腳也是一組)各自接什么參照網(wǎng)上的51單片機(jī)引腳定義再對(duì)照下表:(左邊第一位代表從左往右第幾個(gè)輝光管,第二位表示此輝光管對(duì)應(yīng)引腳的數(shù)字,右邊表示單片機(jī)的對(duì)應(yīng)引腳)
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







Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit  DS1302_CLK = P2^4;        
  5. sbit  DS1302_IO  = P2^5;                     
  6. sbit  DS1302_RST = P2^6;            
  7. sbit dSW=P2^7;
  8. sbit mode=P2^2;
  9. sbit inc=P2^3;
  10. sbit d11=P2^2;
  11. sbit d12=P2^3;
  12. sbit d20=P3^4;
  13. sbit d21=P0^6;
  14. sbit d22=P0^7;
  15. sbit d23=P2^1;
  16. sbit d24=P2^0;
  17. sbit d25=P1^7;
  18. sbit d26=P3^0;
  19. sbit d27=P3^1;
  20. sbit d28=P3^2;
  21. sbit d29=P3^3;
  22. sbit d30=P0^3;
  23. sbit d31=P0^4;
  24. sbit d32=P0^2;
  25. sbit d33=P0^1;
  26. sbit d34=P0^5;
  27. sbit d35=P0^0;
  28. sbit d40=P1^6;
  29. sbit d41=P3^7;
  30. sbit d42=P3^6;
  31. sbit d43=P3^5;
  32. sbit d44=P1^0;
  33. sbit d45=P1^1;
  34. sbit d46=P1^2;
  35. sbit d47=P1^3;
  36. sbit d48=P1^4;
  37. sbit d49=P1^5;
  38. sbit  ACC0 = ACC^0;  
  39. sbit  ACC7 = ACC^7;
  40. uchar temp,date,hour,minute,second,position;
  41. void delay(uint z)
  42. {
  43. uint x,y;
  44. for(x=z;x>0;x--)
  45.   for(y=112;y>0;y--);
  46. }
  47. void DS1302InputByte(unsigned char d)
  48. {
  49.     unsigned char i;
  50.     ACC = d;
  51.     for(i=8; i>0; i--)
  52.     {
  53.         DS1302_IO = ACC0;            
  54.         DS1302_CLK = 1;
  55.         DS1302_CLK = 0;
  56.         ACC = ACC >> 1;
  57.     }
  58. }
  59. unsigned char DS1302OutputByte(void)
  60. {
  61.     unsigned char i;
  62.     for(i=8; i>0; i--)
  63.     {
  64.         ACC = ACC >>1;            
  65.         ACC7 = DS1302_IO;
  66.         DS1302_CLK = 1;
  67.         DS1302_CLK = 0;
  68.     }
  69.     return(ACC);
  70. }
  71. void Write1302(unsigned char ucAddr, unsigned char ucDa)
  72. {
  73.     DS1302_RST = 0;
  74.     DS1302_CLK = 0;
  75.     DS1302_RST = 1;
  76.     DS1302InputByte(ucAddr);      
  77.     DS1302InputByte(ucDa);     
  78.     DS1302_CLK = 1;
  79.     DS1302_RST = 0;
  80. }

  81. unsigned char Read1302(unsigned char ucAddr)
  82. {
  83.     unsigned char ucData;
  84.     DS1302_RST = 0;
  85.     DS1302_CLK = 0;
  86.     DS1302_RST = 1;
  87.     DS1302InputByte(ucAddr|0x01);      
  88.     ucData = DS1302OutputByte();      
  89.     DS1302_CLK = 1;
  90.     DS1302_RST = 0;
  91.     return(ucData);
  92. }
  93. void DS1302_init()
  94. {
  95.   if(Read1302(0xc1) != 0xf0)
  96.   {
  97.    Write1302(0x8e,0x00) ;
  98.    Write1302(0xc0,0xf0) ;
  99.    Write1302(0x8c,0x10) ;
  100.    Write1302(0x88,0x04) ;
  101.    Write1302(0x86,0x06) ;
  102.    Write1302(0x84,0x23) ;
  103.    Write1302(0x82,0x59) ;
  104.    Write1302(0x80,0x55) ;
  105.    Write1302(0x90,0xa4) ;      
  106.    Write1302(0x8e,0x80) ;  
  107.   }
  108. }
  109. #define uchar unsigned char
  110. #define uint unsigned int
  111. unsigned char ly_dis[4];
  112.         unsigned int i=0;
  113.         float tt;
  114.         int ltemp;
  115. void display()
  116. {
  117. uchar D1,D2,D3,D4;
  118. D1=hour/16;
  119. D2=hour%16;
  120. D3=minute/16;
  121. D4=minute%16;
  122. if (D1==0)
  123.         {dSW=1;d11=0;d12=0;dSW=0;delay(1);d11=1;d12=1;}
  124. else if (D1==1)
  125.         {dSW=1;d11=1;d12=0;dSW=0;delay(1);d11=1;d12=1;}
  126. else if (D1==2)
  127.         {dSW=1;d11=0;d12=1;dSW=0;delay(1);d11=1;d12=1;}
  128. if (D2==0)
  129.         {d20=1;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
  130. else if (D2==1)
  131.         {d20=0;d21=1;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
  132. else if (D2==2)
  133.         {d20=0;d21=0;d22=1;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
  134. else if (D2==3)
  135.         {d20=0;d21=0;d22=0;d23=1;d24=0;d25=0;d26=0;d27=0;d28=0;d29=0;}
  136. else if (D2==4)
  137.         {d20=0;d21=0;d22=0;d23=0;d24=1;d25=0;d26=0;d27=0;d28=0;d29=0;}
  138. else if (D2==5)
  139.         {d20=0;d21=0;d22=0;d23=0;d24=0;d25=1;d26=0;d27=0;d28=0;d29=0;}
  140. else if (D2==6)
  141.         {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=1;d27=0;d28=0;d29=0;}
  142. else if (D2==7)
  143.         {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=1;d28=0;d29=0;}
  144. else if (D2==8)
  145.         {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=1;d29=0;}       
  146. else if (D2==9)
  147.         {d20=0;d21=0;d22=0;d23=0;d24=0;d25=0;d26=0;d27=0;d28=0;d29=1;}

  148. if (D3==0)
  149.         {d30=1;d31=0;d32=0;d33=0;d34=0;d35=0;}
  150. else if (D3==1)
  151.         {d30=0;d31=1;d32=0;d33=0;d34=0;d35=0;}
  152. else if (D3==2)
  153.         {d30=0;d31=0;d32=1;d33=0;d34=0;d35=0;}
  154. else if (D3==3)
  155.         {d30=0;d31=0;d32=0;d33=1;d34=0;d35=0;}
  156. else if (D3==4)
  157.         {d30=0;d31=0;d32=0;d33=0;d34=1;d35=0;}
  158. else if (D3==5)
  159.         {d30=0;d31=0;d32=0;d33=0;d34=0;d35=1;}

  160. if (D4==0)
  161.         {d40=1;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
  162. else if (D4==1)
  163.         {d40=0;d41=1;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
  164. else if (D4==2)
  165.         {d40=0;d41=0;d42=1;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
  166. else if (D4==3)
  167.         {d40=0;d41=0;d42=0;d43=1;d44=0;d45=0;d46=0;d47=0;d48=0;d49=0;}
  168. else if (D4==4)
  169.         {d40=0;d41=0;d42=0;d43=0;d44=1;d45=0;d46=0;d47=0;d48=0;d49=0;}
  170. else if (D4==5)
  171.         {d40=0;d41=0;d42=0;d43=0;d44=0;d45=1;d46=0;d47=0;d48=0;d49=0;}
  172. else if (D4==6)
  173.         {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=1;d47=0;d48=0;d49=0;}
  174. else if (D4==7)
  175.         {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=1;d48=0;d49=0;}
  176. else if (D4==8)
  177.         {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=1;d49=0;}       
  178. else if (D4==9)
  179.         {d40=0;d41=0;d42=0;d43=0;d44=0;d45=0;d46=0;d47=0;d48=0;d49=1;}
  180.        
  181. }
  182. void set()
  183. {
  184.        
  185.   if(mode==0)
  186.     {
  187.     delay(5);
  188.     if(mode==0)
  189.       {
  190.                                  while(!mode);
  191.                                 hour=Read1302(0x85);
  192.                                 minute=Read1302(0x83);
  193.                                 while(1)
  194.                                 {
  195.                                                         if(inc==0)
  196.                                                         { delay(5);
  197.                                                                 if(inc==0)
  198.                                                          {
  199.                                                                  while(!inc);
  200.                                                                        
  201.                                                                         hour=(hour/16)*10+hour%16;
  202.                                                                         hour++;
  203.                                                                  if(hour==24) hour=0;
  204.                                                                  hour=(hour/10)*16+hour%10;
  205.                                                        
  206.                                                                 }  
  207.                                                         }
  208.                                                          if(mode==0)
  209.                                                          {
  210.                                                                  while(!mode);
  211.                                                                  while(1)
  212.                                                                         {
  213.                                                                               if(inc==0)
  214.                                                                                                 { delay(5);
  215.                                                                                                         if(inc==0)
  216.                                                                                                          {
  217.                                                                                                                  while(!inc);
  218.                                                                                                         minute=(minute/16)*10+minute%16;
  219.                                                                                                         minute++;
  220.                                                                                                         if(minute==60) minute=0;
  221.                                                                                                                  minute=(minute/10)*16+minute%10;
  222.                                                                                                                 display();  
  223.                                                                                                                 }  
  224.                                                                                                 }
  225.                                                                                                 if(mode==0)
  226.                                                                                                 {
  227.                                                                                                         while(!mode);
  228.                                                                                                        
  229.                                                                                                        
  230.                                                                                                          Write1302(0x8e,0x00) ;
  231.                                                                                                          Write1302(0x84,hour) ;
  232.                                                                                                                 Write1302(0x8e,0x80) ;
  233.                                                                                                                 hour=Read1302(0x85);
  234.                                                                                                                        
  235.                                                                                                                  Write1302(0x8e,0x00) ;
  236.                                                                                                                  Write1302(0x82,minute) ;
  237.                                                                                                                         Write1302(0x8e,0x80) ;
  238.                                                                                                                  minute=Read1302(0x83);
  239.                                                                                                         display();
  240.                                                                                                         return;
  241.                                                                                                        
  242.                                                                                                 }
  243.                                                                         }
  244.                                                         }
  245.                                                         display();  
  246.                                 }
  247.       }
  248.      }  
  249. }
  250. void main()
  251. {
  252.         delay(10);
  253. DS1302_init();
  254.         delay(80);
  255. while(1)
  256. {
  257.   date=Read1302(0x87);
  258.   hour=Read1302(0x85);
  259.   minute=Read1302(0x83);
  260.   second=Read1302(0x81);
  261.         if  (hour==0x23&&minute==0x59&&second==0x59)
  262.         {
  263.                 delay(100);
  264.                 Write1302(0x8e,0x00) ;
  265.          Write1302(0x84,0x00) ;
  266.         hour=0;
  267. second=0;       
  268.                 Write1302(0x80,0x00) ;               
  269.          Write1302(0x82,0x00) ;
  270.                 Write1302(0x8e,0x80) ;
  271.          minute=0;
  272.         }
  273.                
  274.   display();  
  275.                         set();
  276.         }

  277. }
復(fù)制代碼

所有資料51hei提供下載:
程序.zip (40.73 KB, 下載次數(shù): 38)
外殼.zip (403.55 KB, 下載次數(shù): 34)
PCB文件.zip (781.37 KB, 下載次數(shù): 42)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表