李子祥



【摘 要】為了方便使用,設計了一種PPT翻頁器,系統分為發射電路和接收電路兩個模塊,每個模塊都包含一個STC8952單片機和藍牙模塊,發射電路還包括一個鼠標滾輪編碼器和D觸發器構成鑒相電路,當發射電路的按鍵按下或滾輪滾動時,經過藍牙主機發送,接收電路接收到指令后,經USB通信模塊送入PC機,PC機接收命令后模擬鍵盤按鍵事件和鼠標滾輪滾動事件,來控制PPT的翻頁。
【關鍵詞】PPT無線翻頁器;STC8952;PDIUSB12;編碼器
The Designs of PPT Wireless Pager with Wheel Flip Function
LI Zi-xiang
(Department of resources and civil engineering, Shandong University of Science and Technology, Taian Shandong 271019, China)
【Abstract】In order to facilitate the use of a PPT, a PPT wireless pager was designed. The system was divided into two modules, The system is divided into two modules: transmitting circuit and receiving circuit, Each module contains a STC8952 MCU and Bluetooth module, The transmitting circuit also comprises a mouse encoder and a D trigger to form the phase detector circuit, When the button of the transmitting circuit is pressed or the rolling wheel is rolled, the data will be sent by the Bluetooth host, after receiving the instruction, the receiving circuit send it to the PC through the USB communication module, finally the pc simulate the keyboard and the roll event, to achieve the controlling of the PPT.
【Key words】PPT wireless pager; STC8952; PDIUSB12; Encoder
隨著計算機輔助教學的發展,PPT無線翻頁器應運而生。有時在PPT演講過程中,為了臨時跳到某一頁講解或回顧其他內容,需要一下翻很多頁,但現有的無線翻頁器只能按一下翻一頁,造成了很多不便。針對這種情況,開發了一種帶滾輪翻頁功能的PPT無線翻頁器,通過滾輪來實現翻頁功能,可以大大增加PPT翻頁的速度,解決上述問題。
1 系統方案設計
整個硬件電路分為發射電路和接收電路兩個模塊,當按下發射電路的按鍵或滾動滾輪時,由單片機控制無線模塊的信號收發。接收電路的無線模塊接收命令后,通過USB通信模塊把數據傳給PC機,PC機根據不同的鍵值分別作出相應,通過模擬鍵盤的按鍵事件、鼠標的滾輪滾動事件等來實現對PPT的控制。系統總體框圖如圖1所示。
圖1 系統總體功能框圖
2 硬件電路設計
2.1 發射電路
發射電路共設置上翻、下翻、激光燈、全屏、退出播放5個按鍵外加一個滾輪翻頁模塊。單片機采用STC89C52。STC89C52是STC公司生產的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash存儲器,共具有P0,P1,P2,P3四個I/O口,這里通過I/O口來控制各部分電路及無線模塊的通信[1]。
在設計滾輪翻頁模塊時,將滾輪的編碼器的A相輸出端接入STC89C52的計數器0來采集計數脈沖,并將編碼器接入一個八D觸發器74LS379來構成鑒相電路,判斷滾輪的滾動方向,當編碼器順時針方向旋轉時,A相信號在相位上超前B相信號1 /4周期(圖2)。經過D觸發器后,Q1為高電平,Q1反為低電平,反之當編碼器逆時針旋轉時,Q1為低電平,Q1反為高電平[2],將Q1和Q1反接入單片機的I/O口,便可以據此判斷是上翻頁還是下翻頁。
在設計無線通信模塊時,采用了HC-05藍牙模塊。HC-05模塊是一款高性能的藍牙串口模塊,具有寬波特率范圍4800~1382400,模塊兼容單片機系統。波特率、藍牙名稱、配對密碼等可通過AT命令修改。HC-05在購買時默認為從機,在設計發射電路時,通過AT命令將藍牙模塊設置為主機。藍牙主機模塊與單片機的連接如圖3所示。
圖3 發射電路原理圖
2.2 接收電路
接收端采用STC89C52和HC-05藍牙從機模塊來接收數據。主從模塊配對后相當于一根串口線使用,這時不分主從,進入透傳模式,實現單片機雙機通信。
單片機接收到數據后,通過USB通信模塊傳送給上位機,完成翻頁操作。USB通信模塊采用飛利浦公司生產的PDIUSBD12接口芯片,芯片遵循USB1.1協議。PDIUSBD12使用八位并行數據口DATA[7:0]與STC8952的P[0.7:0.0]連接,STC8952既要對PDIUSBD12發送命令又要發送數據,通過PDIUSBD12的地址選擇命令還是數據。STC8952和PDIUSBD12的連接有復用的數據地址總線和獨立的數據地址總線兩種方式,在這里使用的獨立地址線,A0表示地址位,A0為1表示命令,A0為0表示寫數據,可以使用I/O口模擬,將A0接到單片機的T1腳上(T1是復用引腳,這里使用的普通I/O口),發送命令前對A0置1,發送數據時置0,把命令或數據發送到USB總線上[3]。
圖4 接收電路原理圖
3 軟件設計
3.1 上位機程序
對于普通按鍵,要加入一個按鍵去抖程序,以上翻頁按鍵KEY1為例,代碼如下:
void delay(uint8 xms )
{
uint8 i,j;
for(i=xms;i>0;i++)
for(j=110;j>0;j--);
}
while(1) //死循環
{
if(KEY1= =0) //KEY1按下,發送上翻頁命令
{
delay(10);
if(KEY1= =0)
{
UartPutChar(0x01);
}
while(!KEY1);
對于滾輪模塊,將單片機的計數器模式打開以采集來自編碼器的計數脈沖。有時只根據相位來判斷翻頁的方向可能會出現錯誤,所以在這里,通過比較上翻頁和下翻頁的次數,來決定真正的翻頁方向,代碼如下:
void main(void) //主函數
{
uint8 tl,th1,th2;
uint16 val;
uint8 Count=0,Up_count=0,Down_count=0; //滾輪采集數據標志
InitTIMER(); //初始化定時器
InitUART(); //初始化串口
LIGHT=1; //關閉激光燈
while(1) //讀計數器值
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1==th2)break; //若沒有進位打斷while(1)循環
}
if((tl!=0)||(th1!=0))
{
delay(50); //延時待滾輪穩定
Count++; //計數滾輪采集值
if(WHEEL_A==1) //向下滾動滾輪
{
Down_count++;
}
else if(WHEEL_A==0) //向上滾動滾輪
{
Up_count++;
}
if(Count>5)
{
if(Up_count>Down_count)UartPutChar(0x01); //發送上翻頁命令
if(Up_count Count=0; Up_count=0; Down_count=0; } TH0=0; TL0=0; } } } 3.2 下位機程序 USB HID設備是通過報告來返回數據的,輸入報告通過中斷輸入端點返回,在這里通過端點1來返回報告,判斷是否需要發送報告的代碼如下[4]: if(ConfigValue!=0) //如果已經設置為非0的配置,則可以返回報告數據 { if(!Ep1InIsBusy) //如果端點1輸入沒有處于忙狀態,則可以發送數據 { if(Command!=0) //如果有按鍵事件發生 { SendReport(); //則返回報告,發送結束會清零數據 SendReport(); //則返回報告,發送一則空數據,證明鍵盤動作清零 } } } SendReport()負責發送具體的報告。在輸入報告中定義一個數組,可以同時返回多個按鍵值。輸入報告共8字節,第一字節的8位表示是否有數據按下,第二字節為保留值,第3到8字節是一個普通鍵鍵值的數組,在PPT中,上翻頁鍵對應鍵盤上的PageUp,下翻頁為PageDown,全屏放映為F5,退出全屏為Esc,具體的鍵值可以查HID用途文檔表獲得[4]。這里只給出上翻頁的情況,其余按鍵依次類推。 extern uint8 Command; void SendReport(void) { /*************************************************** 根據HID用途表文檔 F5--3E ESC--29 PageUp--4B PageDown --4E ***************************************************/ uint8 Buf[8]={0,0,0,0,0,0,0,0}; uint8 i=2; if(Command==0x01) //接收到0x01 { Buf[i]=0x4B; //播放命令。 i++; //切換到下個位置。 Prints("發送4B\r\n"); } //報告準備好了,通過端點1返回,長度為8字節。 D12WriteEndpointBuffer(3,8,Buf); Ep1InIsBusy=1; //設置端點忙標志。 Command=0; } 4 結束語 按照設計原理完成制作后,經測試可以實現設計的功能要求,可以正常完成按鍵翻頁及滾輪翻頁的功能,當使用滾輪翻頁可以大大加快翻頁速度,滿足某些場合下需要快速多次翻頁的需要,具有很好的應用前景。 【參考文獻】 [1]胡聰,何勁,郭金龍.基于nFR24L01的無線電子教鞭[J].科技信息,2012(9):97. [2]高偉,李玄曾.光電編碼器的信號處理電路研究[J].陜西師范大學繼續教育學院學報(西安),2007,24(2):117. [3]萬利峰,徐曉潔,胡慧鋪,張嘩暉.基于PDIUSB12的USB數據采集系統的設計 [J].微計算機信息,2006,22(5-1):110-111. [4]劉榮.圈圈教你玩USB[J].北京航空航天大學出版社,2009(1). [責任編輯:楊玉潔]