欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

骨牌時(shí)鐘制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94097 發(fā)表于 2015-10-30 16:01 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
視頻1——簡(jiǎn)介:http://v.youku.com/v_show/id_XNDA5NTg4MjA4.html

視頻2——工作介紹:http://v.youku.com/v_show/id_XNDA5NTk1MTg0.html
視頻3——原理解說:http://v.youku.com/v_show/id_XNDA5NjI1MTIw.html
視頻里會(huì)發(fā)現(xiàn)燈珠有閃動(dòng),那是程序掃描頻率問題,用肉眼直接看是很完美的,不會(huì)閃動(dòng)!
原理圖:




程序等資料包: 骨牌時(shí)鐘.zip (75.47 KB, 下載次數(shù): 14)
2
年前,無意中進(jìn)了51hei網(wǎng)站里面的東西給我留下了深刻的印象,那時(shí)候才開始學(xué)習(xí)單片機(jī),看到里面的立方體之后,震撼之余,也想自己什么時(shí)候可以發(fā)個(gè)作品在這個(gè)網(wǎng)站里。可惜自己學(xué)藝不精,2年來只能是看網(wǎng)站里的作品,后來,終于覺得自己在專業(yè)課上有了點(diǎn)進(jìn)步,做了個(gè)led金字塔。聯(lián)系到站長(zhǎng)之后,站長(zhǎng)很樂意上傳這些原創(chuàng)性的作品,也給我了很多鼓勵(lì)。
因?yàn)槊媾R畢業(yè)、參加各種比賽,這次上傳作品距離上次做金字塔間隔很久了,不過我沒有偷懶,一直在擠時(shí)間設(shè)計(jì)屬于自己的立方體(之前也做過,金字塔就是改版),但這個(gè)立方體我想做成終極版的,即便是不懂單片機(jī)編程的朋友,都可以編輯動(dòng)畫,現(xiàn)在也已經(jīng)有了很大的進(jìn)展,估計(jì)在6月底,就可以和大家見面了!
這次的作品骨牌時(shí)鐘,靈感源于愛折騰網(wǎng)站,里面有個(gè)國(guó)外的骨牌時(shí)鐘,我那時(shí)候看了覺得很有意思,自己和工作室的朋友折騰了幾天,也搞了出來。下面,我就毫無保留的把制作過程、程序、原理圖拿出來供大家參考,希望讀者能指出不足之處,
在開始之前,我想說,希望各位讀者尊重原創(chuàng),我所做的原創(chuàng)性、開源性的作品會(huì)上傳到愛折騰網(wǎng),因?yàn)槲矣X得這個(gè)網(wǎng)站干凈,不帶廣告,非常適合做大家DIY交流的平臺(tái)。如果您覺得我的作品好,覺得這個(gè)網(wǎng)站好,請(qǐng)把連接發(fā)給您的朋友,讓更多的人欣賞里面妙趣橫生的作品,但請(qǐng)不要不道德的轉(zhuǎn)載,希望轉(zhuǎn)載的讀者,注明首發(fā)網(wǎng)站及作者。
作為單片機(jī)的初學(xué)者,最大的困難就是找資料,網(wǎng)絡(luò)上很多資料都是不完整的,特別是程序。我們工作室,立志做開源設(shè)計(jì),毫無保留,我相信,我們工作室第一個(gè)做開源,會(huì)吸引更多的人一起來開源,大家會(huì)共同進(jìn)步!希望在大家共同的努力下,愛折騰網(wǎng)站上會(huì)出現(xiàn)更多有趣、開源資料的作品!
骨牌時(shí)鐘圖片效果:



當(dāng)前顯示的時(shí)間為  1229



顯示時(shí)間為   626








顯示時(shí)間為  333



顯示時(shí)間為  222
這個(gè)家伙可是我們工作室的人純手工制作的,這也是重慶市盛群杯單片機(jī)設(shè)計(jì)競(jìng)賽的復(fù)賽作品,雖然在最終的評(píng)審后沒有取得獎(jiǎng)項(xiàng),但是得到了其他高校的贊賞和認(rèn)可,算是有個(gè)安慰獎(jiǎng)吧!
個(gè)人對(duì)DIY的理解:我覺得DIY就是一種折騰,折騰我們生活中一切可以折騰的東西。我呢,因?yàn)槭菍W(xué)過單片機(jī)的,也喜歡動(dòng)手制作,就把單片機(jī)技術(shù)和DIY結(jié)合起來,讓單片機(jī)學(xué)習(xí)不在變的枯燥、呆板,而是讓它改善我們的生活,就像愛折騰網(wǎng)站里說的那樣:“讓生活因折騰而與眾不同”,如果你愛生活,就請(qǐng)和我一起來折騰這個(gè)時(shí)鐘吧!
我這里粗略的說一下這個(gè)時(shí)鐘的顯示原理,和外殼設(shè)計(jì)方法,詳細(xì)請(qǐng)結(jié)合視頻。
大家在視頻里看到的骨牌,其實(shí)就是用ABS板圍成的,再蓋上玻璃板或者塑料板(透明就可以啦)。至于這個(gè)顏色,就是木紋紙了,建材市場(chǎng)很多賣的,十幾塊一大張,各種顏色、紋理都有的,大家根據(jù)自己的喜好自行選擇,現(xiàn)在圖片和視頻里白色的邊框那是ABS板的顏色,朋友們也可以把這部分貼上木紋紙,個(gè)人覺得,和骨牌面一樣的顏色比較好。
驅(qū)動(dòng)部分:



原理圖中我是用的ls245,我建議大家用HC系列的,視頻演示的時(shí)候,我就全換成了HC系列的245HC系列發(fā)熱小,功耗小,價(jià)格便宜,只不過一定要記得在輸入上加上拉電阻10K,這樣才能和TTL兼容,有朋友和我說hc系列的不穩(wěn)定,我針對(duì)這個(gè)也是做了實(shí)驗(yàn)的,結(jié)論就是加了上拉電阻后,效果和ls系列完全一樣!24519腳(使能端)就作為位碼的選通腳,所有輸入(段碼)都是并聯(lián)在一起的。原理圖我畫的比較詳細(xì)了,請(qǐng)用proteus7.5以上版本打開。
DS1302部分:
這個(gè)我想,接觸過一段時(shí)間單片機(jī)的朋友都會(huì)有所了解,DS1302是最常見的時(shí)鐘芯片之一,其工作原理圖我是畫好了的,這里要說一下,為了保證1302可以穩(wěn)定的工作,567腳一定要加10K上拉電阻,最好把晶振的金屬殼部分接地。這樣才能保證DS1302工作的持久穩(wěn)定。希望大家不要在這個(gè)環(huán)節(jié)偷懶。
三顯示原理:
骨牌時(shí)鐘顯示小時(shí)和分鐘,最左邊的顯示小時(shí)(12小時(shí)制),中間的顯示分鐘的十位(0——5,其中0時(shí)不顯示),右邊的顯示分鐘的各位(0——9,其中0時(shí)不顯示)。每個(gè)骨牌由上下兩部分組成,上下兩部分原理相同(參考原理圖),只是查表的標(biāo)值不一樣,不管是左中右那個(gè)骨牌,都是先選中上面,再選中下面進(jìn)行查表顯示,等于是一個(gè)6位數(shù)碼管,具體的看程序IO設(shè)置就可以了。大家看了原理圖就知道,其實(shí)也是個(gè)數(shù)碼管,只不過形狀和傳統(tǒng)的不一樣,這也意味著表值不一樣的,我已經(jīng)做好了表值在程序里,大家自行參考。
發(fā)光器材選擇
現(xiàn)在我選用的是8MM的高亮發(fā)光二極管,因?yàn)樽龅谋容^大。現(xiàn)在都強(qiáng)調(diào)低碳嘛,我希望大家做小的,這樣就用一般的5MM二極管就可以了,根據(jù)實(shí)際情況縮放比例,我這有個(gè)做好的,就是試驗(yàn)版本,用的就是5mm發(fā)光二極管,現(xiàn)在把圖拍下來,給大家做個(gè)參考:

這個(gè)我是沒做外殼的,只有顯示電路,主要是用來測(cè)試程序和硬件的。大家可以根據(jù)這個(gè)尺寸來設(shè)計(jì)自己的。細(xì)心的朋友可以發(fā)現(xiàn),中間的顯示部分不需要焊接那么多的燈珠






,但是考慮到以后可能需要顯示日期、溫度等擴(kuò)展功能,就在大的制作上把所有燈珠就焊接了,各位朋友可以根據(jù)自己的實(shí)際功能情況選擇燈珠的數(shù)量。
底板選擇
視頻和圖片里的呢,都是真材實(shí)料做的,底板用的是木板,尺寸為80cmX60cm。之所以看不到線,是因?yàn)槲覀冊(cè)诿總(gè)骨牌后面都是挖了線槽的(沒電鋸的朋友就苦惱了),線就像我們家里裝修一樣,走的都是內(nèi)線,這個(gè)還是很費(fèi)時(shí)間和精力的,如果有朋友想做這么大的,那就不要怕幸苦,如果做小型的,直接焊接萬能板就可以了,不費(fèi)什么事情,就是跳線而已。個(gè)人覺得呢,我們應(yīng)該不怕折騰,我鼓勵(lì)大家都做大型的,即便是做大了,也可以用5mm的二極管,選擇那種可以投射出光圈的就可以了,這樣只要設(shè)置好面板與二極管的距離,就可以改變紅點(diǎn)的大小,因?yàn)?font face="Times New Roman">8mm不僅價(jià)格貴了,也不節(jié)能。不過,也不是說做小的就不行,覺得做個(gè)精簡(jiǎn)版的,放在書桌上,也還是蠻不錯(cuò)的。
邊框
我用的是2mmABS板,很好用,彎成轉(zhuǎn)角后,直角的木板或塑料。固定,其實(shí)呢,還是1mmABS板好用,我們當(dāng)時(shí)是沒怎么注意,趕時(shí)間了,建議大家用1mm的,白色的比較便宜。每個(gè)骨牌的尺寸為36cmX18cm。詳細(xì)的制作方案大家請(qǐng)參考看視頻。
控制電路:
追求的完美的朋友可以不必用40p單片機(jī),用28p的就夠了,STC公司的芯片程序都是兼容的,價(jià)格便宜,下載方式也都兼容,不二之選哦!不管做大做小,元件的布局都很重要,因?yàn)槲覀冞有外殼的,所以說,布局不好,導(dǎo)致太多的跳線之類的,勢(shì)必影響外殼的安裝,希望大家在焊接直接多花心思布局電路,我的不一定是最佳方案,我也期待網(wǎng)友們做出更好的布局,給我參考!有條件的可以做PCB板子,我這次主要是為了給大家做視頻演示,用的是杜邦線直插(這樣也方便初期的程序調(diào)試),最后肯定是要用焊錫拖焊到一起的。
程序(請(qǐng)用keil  4版本)
這次的程序是c語言的,我對(duì)c語言不是很了解,這個(gè)程序是工作室別的朋友寫的,而且是用在其他地方的程序,我只是拿來改了改,肯定有不足之處,

主程序源程序:
  1. #include"MAIN.h"
  2. #include"DS1302.h"
  3. #include"DISPLED.h"
  4. //****制作顯示數(shù)據(jù)****//
  5. uint8 mek_buf[4];
  6. //制作顯示數(shù)據(jù)(正常)
  7. uint8 led_buf[4];
  8. //制作顯示數(shù)據(jù)(修改時(shí)鐘)
  9. uint8 timer_buf[4];
  10. //數(shù)據(jù)寫入DS1302緩存數(shù)組
  11. uint8 tempsbuf[5] = {0,0,0,0,0};
  12. //按鍵手動(dòng)修改時(shí)鐘標(biāo)志位
  13. bit faneg = 0;
  14. //按鍵手動(dòng)修改時(shí)鐘位選
  15. uint8 mak = 0;
  16. //統(tǒng)一修改時(shí)間數(shù)組
  17. uint8 tempfen = 0,tempshi = 0;
  18. //********************************************************************
  19. //* 名稱  : void delay_key()
  20. //* 功能  : 按鍵消抖延時(shí)
  21. //* 輸入  :        無
  22. //* 返回值: 無
  23. //***********************************************************************
  24. void delay_key()
  25. {
  26.         uint8 c = 200;
  27.         while(--c);       
  28. }
  29. //********************************************************************
  30. //* 名稱  : mek_led
  31. //* 功能  : 制作正常顯示數(shù)據(jù)
  32. //* 輸入  :        無
  33. //* 返回值: 無
  34. //***********************************************************************
  35. void mek_led()
  36. {       
  37.         if(1 == faneg)    //主機(jī)
  38.         {
  39.                 timer_buf[0] = tempshi/10;
  40.                 timer_buf[1] = tempshi%10;
  41.                 timer_buf[2] = tempfen/10;
  42.                 timer_buf[3] = tempfen%10;                         
  43.         }
  44.         else if(0 == faneg)    //正常
  45.         {
  46.                 led_buf[0] = mek_buf[2]/10;
  47.                 led_buf[1] = mek_buf[2]%10;
  48.                 led_buf[2] = mek_buf[1]/10;
  49.                 led_buf[3] = mek_buf[1]%10;
  50.                 led_buf[4] = mek_buf[0]/10;
  51.                 led_buf[5] = mek_buf[0]%10;       
  52.         }
  53. }
  54. //********************************************************************
  55. //* 名稱  : void key_refresh()
  56. //* 功能  : 功能選擇(只包含所有分機(jī)同時(shí)修改)
  57. //* 輸入  :        無
  58. //* 返回值: 無
  59. //***********************************************************************
  60. void key_refresh()
  61. {
  62.         if(!keydin1)       
  63.         {
  64.                 delay_key();
  65.                 if(!keydin1)
  66.                 {
  67.                         write_ds1302(0X80,0X80);    //停止DS1302計(jì)時(shí)
  68.                         faneg = 1;                                    //標(biāo)志位置1
  69.                         mak = 1;                                        //選中第一位
  70.                 }       
  71.         }
  72.         while((!keydin1));       
  73. }
  74. //********************************************************************
  75. //* 名稱  : void key_Modify()
  76. //* 功能  : 按鍵手動(dòng)修改時(shí)間
  77. //* 輸入  :        無
  78. //* 返回值: 無
  79. //***********************************************************************
  80. void key_Modify()
  81. {       
  82.         tempshi = 0;
  83.         tempfen = 0;
  84.         while(1)
  85.         {
  86.                 mek_led();                                                 //制作顯示數(shù)據(jù)
  87.                 display_led(timer_buf);                     //顯示按鍵修改預(yù)存時(shí)間
  88.                 if(mak > 2){mak = 1;}
  89.                 if(!keydin1)
  90.                 {
  91.                         delay_key();
  92.                         if(!keydin1)
  93.                         {
  94.                                 mak++;
  95.                                 while(!keydin1);       
  96.                         }       
  97.                 }
  98.                
  99.                 if(1 == mak)
  100.                 {
  101.                         if(!keydin2)
  102.                         {
  103.                                 delay_key();
  104.                                 if(!keydin2)
  105.                                 {
  106.                                         if(tempshi > 23)
  107.                                         {
  108.                                                 tempshi = 0;
  109.                                         }
  110.                                         else
  111.                                         {
  112.                                                 tempshi++;               
  113.                                         }
  114.                                 }       
  115.                         }       
  116.                         if(!keydin3)
  117.                         {
  118.                                 delay_key();
  119.                                 if(!keydin3)
  120.                                 {
  121.                                         if(tempshi < 0)
  122.                                         {
  123.                                                 tempshi = 23;
  124.                                         }
  125.                                         else
  126.                                         {
  127.                                                 tempshi--;               
  128.                                         }
  129.                                 }       
  130.                         }       
  131.                         while((!keydin2) || (!keydin3));
  132.                 }
  133.                
  134.                 if(2 == mak)
  135.                 {
  136.                         if(!keydin2)
  137.                         {
  138.                                 delay_key();
  139.                                 if(!keydin2)
  140.                                 {
  141.                                         if(tempfen > 59)
  142.                                         {
  143.                                                 tempfen = 0;
  144.                                         }
  145.                                         else
  146.                                         {
  147.                                                 tempfen++;               
  148.                                         }
  149.                                 }       
  150.                         }       
  151.                         if(!keydin3)
  152.                         {
  153.                                 delay_key();
  154.                                 if(!keydin3)
  155.                                 {
  156.                                         if(tempfen < 0)
  157.                                         {
  158.                                                 tempfen = 59;
  159.                                         }
  160.                                         else
  161.                                         {
  162.                                                 tempfen--;               
  163.                                         }
  164.                                 }       
  165.                         }       
  166.                         while((!keydin2) || (!keydin3));
  167.                 }
  168.                
  169.                 if(!keydin4)
  170.                 {
  171.                         delay_key();
  172.                         if(!keydin4)
  173.                         {
  174.                                 tempsbuf[0] = tempshi;       
  175.                                 tempsbuf[1] = tempfen;       
  176.                                
  177.                                 write_ds1302(0X84,tempsbuf[0]/10*16+tempsbuf[0]%10);        //寫入修改好的時(shí)鐘
  178.                                 write_ds1302(0X82,tempsbuf[1]/10*16+tempsbuf[1]%10);   
  179.                                 write_ds1302(0X80,0X00);                                //啟動(dòng)計(jì)時(shí)                                 
  180.                                 faneg = 0;
  181.                                 mak = 0;
  182.                                 return;                       
  183.                         }       
  184.                 }
  185.         }
  186. }
  187. //********************************************************************
  188. //* 名稱  : main()
  189. //* 功能  : 主程序
  190. //* 輸入  :        無
  191. //* 返回值: 無
  192. //***********************************************************************
  193. void main()
  194. {
  195.        
  196.         keydin1 = 1;keydin2 = 1;keydin3 = 1;keydin4 = 1;   //端口初始化
  197.         while(1)
  198.         {
  199.                 key_refresh();                   //功能選擇
  200.                 read_time(&mek_buf);             //讀出DS1302中的時(shí)間
  201.                 mek_led();                                             //制作顯示數(shù)據(jù)
  202.                 display_led(led_buf);                     //顯示正常時(shí)間               
  203.                 if(1 == faneg){key_Modify();}         //修改時(shí)間
  204.         //        shanshuo_led();                  //秒點(diǎn)閃爍
  205.         //        Automatic();           //單片機(jī)自動(dòng)操作
  206.         }
  207. }

復(fù)制代碼



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

使用道具 舉報(bào)

沙發(fā)
ID:113533 發(fā)表于 2016-4-18 21:56 | 只看該作者
學(xué)習(xí)一下,if(1 == faneg)    //主機(jī)              避免了1=faneg的錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

板凳
ID:185829 發(fā)表于 2017-5-17 17:59 | 只看該作者
時(shí)鐘數(shù)據(jù)羅馬數(shù)字編碼的方法,有意思
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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