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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15762|回復: 7
打印 上一主題 下一主題
收起左側

單片機設計-八路搶答器(C語言)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:328014 發表于 2018-7-1 04:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

一  緒論3
二  基本設計方案4
三  具體設計5
四  電路板的制作7
五  電路功能測試與調試7
六  心得體會8
附錄9
一  緒論
1.1單片機搶答器的背景
二十世紀跨越了三個“電”的時代,即電氣時代、電子時代和現已進入的電腦時代。不過,這種電腦,通常是指個人計算機,簡稱PC機。它由主機、鍵盤、顯示器等組成。還有一類計算機,大多數人卻不怎么熟悉。這種計算機就是把智能賦予各種機械的單片機(亦稱微控制器)。顧名思義,這種計算機的最小系統只用了一片集成電路,即可進行簡單運算和控制。因為它體積小,通常都藏在被控機械的“肚子”里。它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了,F在,這種單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。各種產品一旦用上了單片機,就能起到使產品升級換代的功效,常在產品名稱前冠以形容詞——“智能型”,如智能型洗衣機等,F在有些工廠的技術人員或其它業余電子開發者搞出來的某些產品,不是電路太復雜,就是功能太簡單且極易被仿制。究其原因,可能就卡在產品未使用單片機或其它可編程邏輯器件上。
在知識競賽中,特別是做搶答題時,在搶答過程中,為了更確切的知道哪一組或哪一位選手先搶答到題,必須要有一個系統來完成這個任務。若在搶答中,只靠人的視覺(或者是聽覺)是很難判斷出哪一組(或哪一個選手)先搶答到題的。利用單片機編程來設計搶答器,可以使以上問題得以解決,即使兩組的搶答時間相差幾微秒,也能輕松的分辨出哪一組(或哪個選手)先搶答到題的。本文主要介紹了搶答器的工作原理及設計,以及它的實際用途。  
1.2設計要求:




    • 基本功能:
  • 六路搶答,搶答有效時相應的燈亮,并有音樂提示;
  • 每輪搶答需主持人按“開始”后,搶答才有效;
  • 搶答無效時,有相應的燈及音樂提示;
    • 擴展功能:
  • 擴展到8路或以上;
  • 搶答倒計時提示;
  • 各路的參賽者有得分顯示;
  • 其他自行增加的功能;
二  基本設計方案
2.1  單片機的選擇
我選擇STC89C52單片機芯片的理由如下:
1、在設計過程中可能會出現很多問題,89C52可重復燒程序;
2、是80C51的增強型,功能與我們所學的51單片機基本相同;
3、學校配套發的單片機開發板用的就是89C52,有很多相關教程,程序的測試與燒寫都十分方便;
4、器材室很方便就能領到。
89C52單片機,是增強型RISC內載Flash的單片機,芯片上的Flash存儲器附在用戶的產品中,可隨時編程,再編程,使用戶的產品設計容易,更新換代方便。89C52單片機采用增強的RISC結構,使其具有高速處理能力,在一個時鐘周期內可執行復雜的指令,每MHz可實現1MIPS的處理能力。89C52單片機工作電壓為2.7~6.0V,可以實現耗電最優化。89C52的單片機廣泛應用于計算機外部設備,工業實時控制,儀器儀表,通訊設備,家用電器,宇航設備等各個領域.
2.2單片機的基本結構  
MCS-52的引腳說明:
MCS-52系列單片機中的8032、8052及8752均采用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。 具體引腳功能不做贅述了(詳細請參見《單片機原理與接口技術》宋躍)。
圖2-2-1 STC89C52的引腳圖
2.3基本設計思路
              因為之前做過單片機最小系統的電路,這次為了節約時間,采取在最小系統的板旁邊再焊一塊電路。
              一看到項目我的基本思路就差不多了,我要實現基本功能好說,倒是拓展不太難,于是選擇了拓展到8路和搶答倒計時。最小系統已經包括了手動復位電路,時鐘電路,電源電路和89C52的I/O口排插,這塊板上可以用的地方不多,只能焊一個蜂鳴器及其驅動電路了。在另一塊板上需要有8個按鍵、8個LED燈和一個數碼管,并分別對應三個插排。兩塊電路板之間高低電平用兩根導線連通。
2.4相關功能器材的選擇
              整體電路需要開關的地方:電源的啟動,主持人的開始與復位,8名搶答選手用的搶答按鈕。
              考慮到電源需長時間保持開啟或斷開狀態,故采用可保持按下或不按下狀態的開關。同理主持人的“開始”和“未開始”也需要這樣的開關。8名搶答選手用的搶答按鈕,只需用4腳的按鍵即可,按下即接通,松開就斷路。
              8個LED燈來顯示選手的搶答狀況,1個LED燈用來顯示電源的狀況;一個數碼管來顯示主持人說“開始”后的倒計時;一個有源蜂鳴器,用一個NPN管來驅動;其他電容和電阻用最小系統的。
三  具體設計
3.1硬件設計
              如上所述,該電路部分電路采用之前做出來的單片機最小系統,根據前面的思路可以在ISIS中擺出電路,如下圖所示:
圖3.1 仿真電路圖
3.2軟件設計
              在ISIS中的89C52可以仿真燒錄程序運行,這樣可以先在Keil中編程然后燒錄看仿真結果,省時省力。
我采用C語言編寫程序,詳細程序及分析請看附錄。
3.3仿真測試
在ISIS中調入hex文件后即可開始仿真,仿真結果如下圖所示:
圖3.3 仿真測試結果
              主持人按下“開始”按鈕后,數碼管開始倒計時,從9到0一秒減一下,也就是搶答倒計時,在數碼管顯示0之前,8個開關無論哪一個先按下,對應的燈就會亮(蜂鳴器沒響,因為仿真不出來),當這個燈亮起后,不論其他的開關怎樣按都不能改變燈亮的情況,也就是實現了搶答的功能。如果數碼管減到0了都沒人搶答,則搶答作廢,這時無論再怎樣搶答都不會有燈亮,實現搶答倒計時的功能。在主持人再次按下“復位”按鈕(和“開始”是同一個)時,數碼管和LED都熄滅,同時所有人都不能搶答,實現清零功能。
四  電路板的制作
4.1元件清單
元件
數量
STC89C52
1
40PIC座
1
按鍵
8
開關
2
LED燈(紅)
9
排針
3
8管腳數碼管
1
蜂鳴器
1
S9012
1
33pF瓷片電容
2
11.0592晶振
1
10uF電解電容
1
1k電阻
1
10k電阻
1
電源插口
1
導線
若干
萬用板7*9CM
1
4.2焊接
              在實際焊接過程中,有很多地方元件以及走線十分密集,如8個按鍵、8個LED燈、8腳數碼管和3個排針的焊接,這需要十分的耐心,稍不注意就將排布密集的錫線焊到了一起,只能用錫槍吸走重新焊。
              還有一些問題如元件如何擺放平整,如果不平整其他元件難以放得下;LED燈和數碼管不能用高溫焊太久,否則會毀掉,到時候很難檢查出問題;元件的排版必須事先計算好,連走線都要想好,不然一步錯步步錯。
              經過一個下午的焊接,最終還是將它做出來了。
五  電路功能測試與調試
5.1測試
              測試采用5V電源線接電腦供電,先用開發板將程序燒錄進89C52,然后插入到板上的IC座,將剩余的線連好后開啟電源,電源指示燈亮,結果數碼管不亮,按搶答器也不亮,復位鍵也無任何作用,蜂鳴器也不響。
5.2調試
              一下是我遇到的問題及解決的過程。
              1、除電源鍵外,其他鍵都無反應,蜂鳴器也不響。仔細檢查電路后,我發現是接口接觸的問題,而且我NPN管忘了接P0口。
              2、通電后,數碼管不亮,能實現搶答器的功能,但一旦按下按鍵蜂鳴器一直響。后來發現是我程序我的問題,仿真上顯示不出來,于是我修改程序。
              3、通電后,能實現搶答的功能,蜂鳴器也能正常工作了,但是數碼管顯示亂碼,還是一秒一跳。后來我發現本身程序有一點問題,仿真程序上的數碼管和我自己用的數碼管不同,只能修改程序。
              最后,經過一系列的調試與修改后,終于實現了預期功能。
六  心得體會
              經過一個星期的努力,我完成了設計任務,通過此次設計,我重新認識到了自學的重要性,以及學以致用的道理。我在圖書館以及網上查閱了大量的資料,同時也認識到了查閱信息的重要作用。通過此次的搶答器的設計,讓我重新拾起了以前所學習的電子知識,及我覺得此次設計讓我更加鞏固了所學的知識并在設計的過程中學會了與時俱進,讓我受益匪淺。這一次設計的練習,很多事情我都不可以獨立完成,很多方面都需要同學的幫助,我也深刻認識到自己的不足,知識的欠缺問題很大,需要在編程方面大下功夫。同時因為我這次設計用的是C語言,也希望自己學的更好了以后,能用匯編語言來實現同樣的功能。還有一點很重要,不能依賴仿真軟件,軟件本身有很多弊端不說,仿真出來的結果也不一定正確,很容易被誤導,
附錄
電路板實物圖:


單片機源程序如下:
  1. #include<reg51.h>
  2. unsigned char flag,num1,num2;
  3. sbit a1=P3^0;//P3口開關
  4. sbit a2=P3^1;
  5. sbit a3=P3^2;
  6. sbit a4=P3^3;
  7. sbit a5=P3^4;
  8. sbit a6=P3^5;
  9. sbit a7=P3^6;
  10. sbit a8=P3^7;
  11. sbit b1=P1^0;//P1口蜂鳴器
  12. sbit b2=P1^1;
  13. sbit b3=P1^2;
  14. unsigned char code table[]={0x80,0xf9,0x4c,0x60,0x31,0x22,0x02,0xf0,0x00,0x20};//數碼管顯示
  15. void display()
  16. {
  17. P2=table[num2]; //P2口數碼管
  18. }
  19. void init()
  20. {
  21. num2=9;
  22. TMOD=0X01;
  23. TH0=(65536-45872)/256;
  24. TL0=(65536-45872)/256;
  25. EA=1;
  26. ET0=1;
  27. TR0=1;
  28. flag=1;//全局變量
  29. P0=0xff;//P0口LED燈
  30. b1=1;
  31. P2=0xff;
  32. }
  33. void delay(int z)//延時程序
  34. {
  35.   int i,j;
  36.   for(i=0;i<z;i++)
  37.     for(j=0;j<110;j++);
  38. }
  39. void main()
  40. {
  41. init();
  42. while(flag)
  43. {
  44.    if(a1==0)
  45.    {
  46.      delay(100);//調用延時程序消除抖動
  47.      if(a1==0)//判斷開關a1是否按下
  48.      {
  49.        flag=0;
  50.        P0=0xfe;//對應LED燈亮
  51.        b1=0;//蜂鳴器響
  52.        while(!a1);//按住時持續響
  53.        b3=0;
  54.        b1=1;
  55.       }
  56.    }
  57.    if(a2==0)//同理判斷a2
  58.    {
  59.      delay(100);
  60.      if(a2==0)
  61.      {
  62.        flag=0;
  63.        P0=0xfd;
  64.        b1=0;
  65.        while(!a2);
  66.        b1=1;
  67.       }
  68.     }
  69.    if(a3==0)//同理判斷a3
  70.    {
  71.      delay(100);
  72.      if(a3==0)
  73.      {
  74.        flag=0;
  75.        P0=0xfb;
  76.        b1=0;
  77.        while(!a3);
  78.        b1=1;
  79.       }
  80.     }
  81.    if(a4==0)//同理判斷a4
  82.    {
  83.      delay(100);
  84.      if(a4==0)
  85.      {
  86.        flag=0;
  87.        P0=0xf7;
  88.        b1=0;
  89.        while(!a4);
  90.        b1=1;
  91.       }
  92.     }
  93.    if(a5==0)//同理判斷a5
  94.    {
  95.      delay(10);
  96.      if(a5==0)
  97.      {
  98.        flag=0;
  99.        P0=0xef;
  100.        b1=0;
  101.        while(!a5);
  102.        b1=1;
  103.       }
  104.     }
  105.    if(a6==0)//同理判斷a6
  106.    {
  107.      delay(10);
  108.      if(a6==0)
  109.      {
  110.        flag=0;
  111.        P0=0xdf;
  112.        b1=0;
  113.        while(!a6);
  114.        b1=1;
  115.       }
  116.     }
  117.    if(a7==0)//同理判斷a7
  118.    {
  119.      delay(10);
  120.      if(a7==0)
  121.      {
  122.        flag=0;
  123.        P0=0xbf;
  124.        b1=0;
  125.        while(!a7);
  126.        b1=1;
  127.       }
  128.     }
  129.    if(a8==0)//同理判斷a8
  130.    {
  131.      delay(10);
  132.      if(a8==0)
  133.      {
  134.        flag=0;
  135.        P0=0x7f;
  136.        b1=0;
  137.        while(!a8);
  138.        b1=1;
  139.       }
  140.     }
  141. }
  142. while(!flag)
  143. {

  144.    EA=0;

  145.   if(P3!=0xff)//沒有開關按下時不響也不亮
  146.   {
  147.     b1=0;   b2=0;
  148.     delay(50);
  149.   }
  150.   else b1=1;
  151.   }
  152. ……………………

  153. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

Word文檔下載:
單片機課程設計-八路搶答器(C語言).doc (573.5 KB, 下載次數: 197)

評分

參與人數 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:313328 發表于 2018-7-1 20:40 | 只看該作者
好用,感謝
回復

使用道具 舉報

板凳
ID:407230 發表于 2018-10-11 15:24 | 只看該作者
不錯,參考一下,賺分下載
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
ID:791170 發表于 2020-6-27 18:23 | 只看該作者
可以參考一下
回復

使用道具 舉報

6#
ID:791373 發表于 2020-6-29 15:17 來自觸屏版 | 只看該作者
feiji666 發表于 2018-7-1 20:40
好用,感謝

那個復位鍵怎么沒用,請教一下
回復

使用道具 舉報

7#
無效樓層,該帖已經被刪除
8#
無效樓層,該帖已經被刪除
9#
ID:730471 發表于 2020-12-17 14:10 來自觸屏版 | 只看該作者
復位鍵按下沒有反應,請問是怎么回事?
回復

使用道具 舉報

10#
無效樓層,該帖已經被刪除
11#
無效樓層,該帖已經被刪除
12#
ID:837614 發表于 2021-10-8 15:47 | 只看該作者
復位鍵沒反應,請問怎么改程序
回復

使用道具 舉報

13#
ID:837614 發表于 2021-10-12 09:06 | 只看該作者
大家有會改復位電路的嗎?
回復

使用道具 舉報

14#
無效樓層,該帖已經被刪除
15#
無效樓層,該帖已經被刪除
16#
無效樓層,該帖已經被刪除
17#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表