歡迎您光臨本站 登入註冊首頁

基於PIC16F873的16路搶答器

admin @ 2014-03-25 , reply:0

概述

1系統硬體設計   美國MicrochipTechnology公司推出的PIC16F87X中檔系列單片機,片內含有A/D、PWM、EEPROM等豐富的介面模塊和FLASH……

1 系統硬體設計
    美國Microchip Technology公司推出的PIC16F87X中檔系列單片機,片內含有A/D、PWM、EEPROM等豐富的介面模塊和FLASH程序存儲器。藉助於PIC16F873片內的ADC模塊,使用一條I/O引腳,可以實現多個按鈕開關的數字量輸入問題。以此原理製成的16路搶答器,電路設計有搶答按鈕開關、狀態指示燈、複位開關、一隻蜂鳴器和兩隻數碼管。
    設計功能如下,通電后,狀態指示燈點亮,並且同時發出持續1s的類似電話振鈴的美妙聲音,表示為搶答作好準備。每當主持人口頭髮出號令之後,哪個隊先按下座位上的按鈕開關,數碼管就顯示該隊的編號。同時封鎖其他按鈕開關的活動,狀態指示燈熄滅,並且同時發出持續1s的類似電話振鈴的美妙聲音,以聲明此次搶答動作已經完成。在主持人確認后,按下複位按鈕,狀態指示燈重新點亮,並且同時發出持續1s的類似電話振鈴的美妙聲音,為下一次搶答作好準備。在理論上,利用PIC16F873片內的10位A/D轉換器,去除一個無鍵按下的“空”狀態,則最多可以區分1023個按鍵。正是由於利用了PIC16F873片內10位A/D轉換器,才使本搶答器外圍電路比較簡單,實用性強,而且本搶答器很容易擴展成更多路搶答器。
    如圖1,本搶答器主要由按鍵電路、PIC16F873單片機、三態輸出鎖存器74LS373及數碼管組成。R16、R17、K0組成單片機的複位電路,按鍵電路由R1-R15、K1-K16組成。PIC16F873單片機系統時鐘由4MHz的石英晶體經其內部振蕩器提供,內部ADC的參考電壓分別為VDD和地,按鍵電路輸出的電壓由數據線AN0輸入,由於軟體可以完成解碼,因此不需解碼器。74LS373、數碼管組成顯示電路,R18-R33起到限流的作用。為了使各個電阻向標稱值靠攏,R0-R17的取值如圖1標註,能滿足表1中按鍵位置與輸出電壓的關係。開機后,RC0-RC7輸出“0”的七段碼,RA1輸出高電平,數碼管個位顯示0,接著,尺A1輸出低電平,RA2輸出高電平,數碼管十位顯示0,RA2再輸出低電平。RA5輸出高電平,狀態指示燈LED亮,RA3輸出500Hz、630Hz兩種音頻信號,這兩種音頻信號以10Hz的頻率輪流切換,從而蜂鳴器就發出類似電話振鈴的美妙聲音,搶答器進入準備狀態。當搶答時,某個按鍵按下,假如是K12,其他按鍵的活動被封鎖,PIC16F873單片機內的A/D轉換器將輸入電壓轉化成10位二進位數,通過單片機處理,RA1輸出高電平,RC0-RC7輸出“2”的七段碼,然後,RA1輸出低電平,將74LS373(2)的輸出碼鎖存,RA2輸出高電平,RC0-RC7輸出“1”的七段碼,RA2再輸出低電平,將74LS373(1)的輸出碼鎖存,這樣數碼管就穩定地顯示出“12”。同時,RA3輸出持續1s的10Hz的頻率輪流切換的500Hz、630Hz兩種音頻信號,蜂鳴器發出類似電話振鈴的美妙聲音,RA5再輸出低電平,LED熄滅,以聲明此次搶答動作已完成。在主持人確認后,按下複位按鍵,兩位數碼管顯示“00”,狀態指示燈LED亮,搶答器進入準備狀態。
 

表1 按鍵位置與按鍵電路輸出電壓對應關係
按下的鍵 1 2 3 4 5 6 7 8
輸出電壓Vo 0 (1/16)VDD (2/16)VDD (3/16)VDD (4/16)VDD (5/16)VDD (6/16)VDD (7/16)VDD
轉換結果
(取高8位)
0 10H 20H 30H 40H 50H 60H 70H
區分按鍵的
分水嶺判別值
  08H 18H 28H 38H 48H 58H 68H
按下的鍵 9 10 11 12 13 14 15 16 無鍵
輸出電壓 (8/16)VDD (9/16)VDD  (10/16)VDD (11/16)VDD (12/16)VDD (13/16)VDD (14/16)VDD (15/16)VDD VDD
轉換結果
(取高8位)
80H 90H A0H B0H C0H D0H E0H F0H FFH
區分按鍵的
分水嶺判別值
78H 88H 98H A8H B8H C8H D8H E8H F8H

2 軟體設計
    取ADC轉換結果的高8位就已經滿足本搶答器對解析度的需要,將相鄰兩個狀態的轉換結果的平均值固定下來作為區分按鍵位置的判別值。例如,(FFH+F0H)/2=F8H,作為空閑狀態的判別值,只要轉換結果大於該值,即判為無鍵按下;又例如(10H+20H)/2=18H,作為K2的判別值,只要轉換結果大於該值,即判斷為K2按下。按鍵的掃描採用啟動AD轉換的方法來實現。每次掃描過程是從高到低,用各鍵判別值去衡量AD轉化結果,以區分按下的是哪個鍵或無鍵按下,這樣便於程序的編寫。若無按鍵,繼續掃描,若有鍵按下,取出AD轉化結果,關閉AD轉換,判別哪個鍵按下,並送顯所按下鍵的編號,RA5輸出低電平,熄滅狀態指示燈,RA3送出持續1s 500Hz和630Hz以10Hz輪流切換的音頻信號。500Hz的音頻產生的方法如下,該信號對應的周期為2000us,該音頻信號一個的周期之內,保持在高電平和低電平的時間都是1000us。
    利用定時器/計數器TMR0模塊產生該延時時間,分頻比和初始值分別是1:8和131。同理,產生630Hz音頻應該採用的分頻比和初始值分別是1:8和157。這兩個音頻信號再以10Hz的頻率輪流切換,從單片機的RA3口線上送出,也就是每個音頻信號持續的時間是50ms。那麼,對於500Hz來說,50ms之內包含的周期個數為25個,包含從低到高的電平切換次數為50次;對於630Hz來說,50ms之內包含的周期個數為31.5個,包含從低到高的電平切換次數為63次。發生1s需要輪流調用500Hz和630Hz產生的程序各10次。程序流程圖如圖2、圖3、圖4、圖5所示。
 


[admin via 研發互助社區 ] 基於PIC16F873的16路搶答器已經有3289次圍觀

http://cocdig.com/docs/show-post-42114.html