STC單片機教學(xué)系統(tǒng)編程指導(dǎo)書-深大_第1頁
STC單片機教學(xué)系統(tǒng)編程指導(dǎo)書-深大_第2頁
STC單片機教學(xué)系統(tǒng)編程指導(dǎo)書-深大_第3頁
STC單片機教學(xué)系統(tǒng)編程指導(dǎo)書-深大_第4頁
STC單片機教學(xué)系統(tǒng)編程指導(dǎo)書-深大_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

圖4.7是STC15系列單片機的ADC邏輯圖,從圖中可以看出,ADC0-7的模擬量輸入通過模擬多路開關(guān)傳送到比較器,在比較器中將數(shù)/模轉(zhuǎn)換器(DAC)提供的模擬量與輸入的模擬量進行比較,將比較結(jié)果保存到逐次比較寄存器作為轉(zhuǎn)換結(jié)果。A/D轉(zhuǎn)換結(jié)束后,最終的轉(zhuǎn)換結(jié)果保存到結(jié)果奇存器ADC_RES和ADC_RESL,同時,ADC控制奇存器ADCCONTR中的A/D轉(zhuǎn)換結(jié)束標志位ADC_FLAG置位,以供程序查詢。圖STYLEREF1\s4.SEQ圖\*ARABIC\s17STC15系列單片機ADC邏輯電路如果設(shè)置ADRJ=0,可以使用下面公式計算10位轉(zhuǎn)換結(jié)果:ADC_RES如果設(shè)置ADRJ=1,可以使用下面公式計算10位轉(zhuǎn)換結(jié)果:ADC_RESL式中,Vin為模擬輸入通道的輸入電壓,V4.3.2程序示例:A/D電壓檢測下面給出使用單片機片上ADC模塊測量工作電源電壓Vcc的程序,經(jīng)實際測試,輸出數(shù)值約為4.86,電壓讀數(shù)隨USB接口的松緊變化而上下浮動。程序分析:使用ADC通道0檢測電源電壓,并采用查詢法逐次查詢ADC轉(zhuǎn)換結(jié)果,然后控制數(shù)碼管最右側(cè)三位顯示電壓數(shù)值。#defineMAIN_Fosc 11059200L #include "STC15Fxxxx.H"#defineDIS_DOT 0x20#defineDIS_BLACK 0x10#defineDIS_ 0x11#defineP1n_pure_input(bitn) P1M1|=(bitn), P1M0&=~(bitn)#defineLED_TYPE0x00 //數(shù)碼管類型,0x00共陰,0xFF共陽#define Timer0_Reload (65536UL-(MAIN_Fosc/1000)) //Timer0中斷頻率,1000次/秒u8codet_display[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//0-9A-F 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,//全黑-HJKLNoPUtGQrMy 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46//0.1.2.3.4.5.6.7.8.9.-1};u8codeT_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼sbit P_HC595_SER=P4^0; //pin14 SER datainputsbit P_HC595_RCLK=P5^4; //pin12 RCLk store(latch)clocksbit P_HC595_SRCLK=P4^3; //pin11 SRCLK Shiftdataclocku8 LED8[8]; //顯示緩沖u8 display_index; //顯示位索引bit B_1ms; //1ms標志u8 msecond;u16 Get_ADC10bitResult(u8channel); //channel=0~7voidmain(void){ u8 i; u16 j; //設(shè)置為準雙向口 P0M1=0; P0M0=0; P1M1=0; P1M0=0; P2M1=0; P2M0=0; P3M1=0; P3M0=0; P4M1=0; P4M0=0; P5M1=0; P5M0=0; P6M1=0; P6M0=0; P7M1=0; P7M0=0; display_index=0; P1ASF=0; //對內(nèi)部基準做ADC ADC_CONTR=0xE0; //90T,ADCpoweron AUXR=0x80; //定時器0設(shè)為:不分頻,16位自動重載 TH0=(u8)(Timer0_Reload/256); TL0=(u8)(Timer0_Reload%256); ET0=1; //Timer0interruptenable TR0=1; //Tiner0run EA=1; //打開總中斷 for(i=0;i<8;i++) LED8[i]=0x10; //上電消隱 while(1){ if(B_1ms){ //1ms到 B_1ms=0; if(++msecond>=200){ //200ms到 msecond=0; for(j=0,i=0;i<16;i++) j+=Get_ADC10bitResult(0); //讀內(nèi)部基準ADC,P1ASF=0,讀0通道 j=(u32)128000UL*16/j; //ADC=1024*Uref/Ux,則Ux=1024*Uref/ADC=1024*1.25/ADC=1280/ADC LED8[5]=j/100+DIS_DOT; //顯示MCU電壓值,計算時放大了100倍,電壓有兩位小數(shù). LED8[6]=(j%100)/10; LED8[7]=j%10; } } }}//查詢法讀一次ADC結(jié)果.u16 Get_ADC10bitResult(u8channel){//channel=0~7 ADC_RES=0; ADC_RESL=0; ADC_CONTR=(ADC_CONTR&0xe0)|0x08|channel; //啟動ADC NOP(4); while((ADC_CONTR&0x10)==0) ; //等待ADC轉(zhuǎn)換結(jié)束 ADC_CONTR&=~0x10; //清除ADC結(jié)束標志 return (((u16)ADC_RES<<2)|(ADC_RESL&3));}voidSend_595(u8dat){ u8 i; for(i=0;i<8;i++){ dat<<=1; P_HC595_SER=CY; P_HC595_SRCLK=1; P_HC595_SRCLK=0; }}voidDisplayScan(void){ Send_595(~LED_TYPE^T_COM[display_index]); //輸出位碼 Send_595(LED_TYPE^t_display[LED8[display_index]]); //輸出段碼 P_HC595_RCLK=1; P_HC595_RCLK=0; //鎖存輸出數(shù)據(jù) if(++display_index>=8) display_index=0; //8位結(jié)束回0}voidtimer0(void)interruptTIMER0_VECTOR{ DisplayScan(); //1ms掃描顯示一位 B_1ms=1; //1ms標志}4.3.4實驗任務(wù)實驗?zāi)康模菏煜eilC整體編程環(huán)境以及MCU程序開發(fā)流程;了解A/D模塊的工作原理以及編程結(jié)構(gòu);學(xué)習(xí)A/D模塊的編程技術(shù)。實驗內(nèi)容:基本實驗1:使用單片機內(nèi)部的A/D轉(zhuǎn)換功能實現(xiàn)ADC鍵盤,鍵盤一共有4個有效按鈕,分別對應(yīng)4盞LED。當(dāng)按下按鈕1時,切換第1盞LED燈的熄滅或亮起狀態(tài);其他按鈕的控制規(guī)律與此類似。(提示:可用P1ASF=0x10;設(shè)置引腳P1.4為ADC模擬輸入端口)基本實驗2:設(shè)計程序?qū)崿F(xiàn)ADC鍵盤,鍵盤一共有10個有效按鈕,分別對應(yīng)0-9共10個數(shù)字,用戶按下按鍵后,數(shù)碼管顯示相應(yīng)數(shù)字?;緦嶒?:設(shè)計程序?qū)崿F(xiàn)ADC鍵盤,令數(shù)碼管高四位與低四位作為兩個獨立計數(shù)器的顯示器。初始狀態(tài)下,兩個計數(shù)器都是0,數(shù)碼管顯示“00000000”,按鍵0、1分別為高四位的加、減按鍵,按鍵2、3分別為低四位的加、減按鍵。當(dāng)計數(shù)器為0時,減按鍵無效。4.4單片機綜合實驗(3學(xué)時)實驗?zāi)康模菏煜eilC51編程開發(fā)環(huán)境和單片機程序的開發(fā)流程;考察綜合運用單片機知識,解決較復(fù)雜問題的能力。自行完成設(shè)計性實驗,培養(yǎng)獨立創(chuàng)新意識。實驗內(nèi)容:反應(yīng)測試游戲請使用2個按鍵、3位數(shù)碼管、1盞LED指示燈,實現(xiàn)反映測試游戲功能。游戲規(guī)則如下:設(shè)置1個準備按鈕、1個停止按鈕。游戲開始時按住準備按鈕,等待一段時間后(由程序隨機確定),點亮LED燈并立即開始計時,3位數(shù)碼管動態(tài)顯示持續(xù)時間。用戶應(yīng)迅速釋放被按下的準備按鈕,按下停止按鈕。當(dāng)停止鍵被按下時,計數(shù)立即停止,數(shù)碼管中顯示的數(shù)字保持不變作為反應(yīng)時間。當(dāng)準備按鈕被再次按下時,計時顯示清零,游戲重新開始。乒乓球游戲請使用4個按鍵、2位數(shù)碼管、4盞LED指示燈,實現(xiàn)兵乓球游戲功能。4個按鍵分別定義為“左擊球”、“右擊球”、“開始比賽”、“游戲重置”;亮起的LED表示乒乓球的位置,數(shù)碼管顯示當(dāng)前雙方的比分。游戲規(guī)則如下:按下1個按鍵后,游戲開始,此時如果按動左擊球鍵,則最左邊的LED亮起,并且從左邊開始不斷向右邊移動,當(dāng)最右側(cè)的LED亮起時,如果此時右擊球鍵按下,則LED從右邊又不斷向左邊移動,如果提前按下了“右擊球”按鈕,或者LED燈到達左邊之后還沒按下“右擊球”按鈕,則左邊數(shù)碼管加1。同理如果左邊出現(xiàn)了失誤,右側(cè)數(shù)碼管加1。每局游戲結(jié)束后,再次按下“開始比賽”鍵,重新開始新一輪比賽,但比分保持。在球打向右邊的過程中,“左擊球”鍵沒有作用,反之亦然。在游戲過程中如果按下了“游戲重置”鍵則游戲停止并且比分清零。有能力的同學(xué)可以考慮在每一次球被擊打后,小幅提高球的移動速度,以增加游戲的對抗性和趣味性。自行設(shè)計實驗要求使用中斷、AD轉(zhuǎn)換和I/O引腳基本操作,具有一定的趣味性并保證一定的實現(xiàn)難度??偨Y(jié)單片機原理實驗課程是電子科學(xué)、測控技術(shù)及自動化等專業(yè)學(xué)生的重要實踐課程,也是培養(yǎng)動手能力、創(chuàng)新能力、適應(yīng)能力、團隊合作等綜

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論