簡易電子琴的設(shè)計與實現(xiàn)及簡易計算器-單片機課程設(shè)計_第1頁
簡易電子琴的設(shè)計與實現(xiàn)及簡易計算器-單片機課程設(shè)計_第2頁
簡易電子琴的設(shè)計與實現(xiàn)及簡易計算器-單片機課程設(shè)計_第3頁
簡易電子琴的設(shè)計與實現(xiàn)及簡易計算器-單片機課程設(shè)計_第4頁
簡易電子琴的設(shè)計與實現(xiàn)及簡易計算器-單片機課程設(shè)計_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE 單片機課程設(shè)計題目:實現(xiàn)簡易電子琴院(系):專業(yè):班級:學(xué)生:學(xué)號:指導(dǎo)教師:20XX年6月26日簡易電子琴的設(shè)計與實現(xiàn)摘要:本次設(shè)計是利用單片機設(shè)計簡易電子琴。其主要功能為:按下不同按鍵,發(fā)出不同1、2、3、4、5、6、7七個音符并且用LED或LCD顯示當前按鍵。選用stm32f103VE,它有8個定時器,部分定時器有多達4個用于輸入捕獲/輸出比較/PWM或脈沖計數(shù)的通道和增量編碼器輸入。利用芯片內(nèi)部相關(guān)定時器來輸出PWM,從而來驅(qū)動蜂鳴器。通過讀取外部按鍵輸入的值來相應(yīng)改變定時器相關(guān)寄存器的值,從而來改變PWM的輸出頻率來達到發(fā)出不同音調(diào)。關(guān)鍵詞:STM32f103VE;蜂鳴器;定時器

TheDesignoftheKeyboardAbstract:Thisdesignistheprofessionaldirectionofbiomedicalengineeringdesign.UsingSingleChipMicrocomputertoachieveasimpleKeyboard.Itsmainfunctionis:Whileauserpressthedifferentkeys,itwillmakedifferentsoundsfromthebuzzeranddisplaydifferentnumberswhichcorrespondedtothesounds.Usingstm32f103--C8T6ascontrolchip.Ithas16-bittimers.Someofthemwithupto4IC/OC/PWMorpulsecounter.MakinguseoftheTimerstogeneratedrivingsignal.Byreadingthestateoftheexternalkeytochangethefrequencyofoutput.DifferentfrequencyofthePWMwillcontrolbuzzermakesdifferentsounds.Keywords:STM32f103;signal;Timer

一、設(shè)計目的:通過本次綜合設(shè)計,旨在運用已經(jīng)學(xué)過的知識,根據(jù)題目的要求進行軟硬件系統(tǒng)的設(shè)計和調(diào)試,對在《單片機的原理及應(yīng)用》課程中涉及的芯片結(jié)構(gòu)、控制原理、硬件和編程等方面有一定的感性認識和實踐操作能力。從而加深對本課程知識點的理解,對于設(shè)計能力,調(diào)試能力,以及分析處理問題的能力得到了一定的提高。其目的是讓學(xué)生得到一次進行獨立設(shè)計的工程實踐鍛煉,不僅培養(yǎng)嚴謹?shù)目茖W(xué)態(tài)度和扎實的實踐技能、良好的工程意識,并在設(shè)計中學(xué)會如何發(fā)現(xiàn)、分析和解決工程實踐問題的技能和方法,將所學(xué)知識綜合應(yīng)用于工程實踐中,為后續(xù)的畢業(yè)設(shè)計做好準備。二、控制要求:利用stm32系列單片機設(shè)計簡易電子琴。功能要求:(1)按下不同按鍵,發(fā)出不同1、2、3、4、5、6、7七個音符;(2)用LED或LCD顯示當前按鍵三設(shè)計原理:單片機可以驅(qū)動蜂鳴器或其他揚聲器發(fā)出聲音,可以控制其發(fā)出不同的聲調(diào),從而連接起來構(gòu)成一個曲子。一般來說,單片機不像其他專業(yè)樂器能奏出各種音色的聲音,單片機的音樂基本上都是單色頻率。1)音調(diào):在音樂中把C上方的A音定為標準音高,其頻率為f=440Hz,其余音均與之比較。音符do與音符i之間正好相差一個倍頻程,即相差一個八度音。在一個八度音中,有12個半音。只要知道了這12個音符的音高,就可以根據(jù)音符之間的倍頻程關(guān)系得到其他音符基本的音調(diào)頻率。知道了一個音符的頻率之后,編可以讓單片機發(fā)出相應(yīng)的頻率的振蕩信號,從而產(chǎn)生相應(yīng)的音符聲音,常采用的方法是通過單片機的定時器進行定時中斷,在中斷服務(wù)子程序中,將單片機上外界揚聲器的I/O口來回置高電平或低電平,從而讓揚聲器發(fā)出聲音。為了讓單片機發(fā)出不同頻率的音符的聲音,只需將定時器預(yù)置不同的定時值來實現(xiàn)。以標準音高A為例,標準音高的A的頻率f=440Hz,其對應(yīng)周期為T=1/f=2272μs,單片機上定時器的中斷觸發(fā)時間為t=T/2=1136μs,如果單片機外接12MHz的晶振,則F0=12MHz,則標準音高A在單片機定時器工作方式1下定時器高低計數(shù)器的初值為:TH=FBH,TL=90H.2)節(jié)拍:如果規(guī)定一拍的時長為400ms,那么以四分音符為節(jié)拍時,四分音符的時長為400ms,八分音符的時長為200ms,十六分音符的時長為100ms.從而在單片機上可以采用循環(huán)延時的方法來實現(xiàn)控制一個音符唱多長時間。首先要編寫一個精確的基本時長的延時程序,如果以八分音符的時長為基本延時時間,那么對于一個音符,如果它是四分音符,只需調(diào)用四次延時程序,如果它是二分音符,則需要調(diào)用八次延時程序。以此類推。3)演奏音樂的方法:Step1:將樂譜中的每個音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍數(shù);Step2:將這些參數(shù)做成數(shù)據(jù)表格,存放在存儲器中;Step3:通過按鍵調(diào)用程序去取出一個音符的相關(guān)參數(shù),播放該音符;Step4:播放完該音符后,等待下一次按鍵調(diào)用程序去取出下一次音符的相關(guān)參數(shù),再播放音符;Step5:對于演奏音樂,一般將休止符的音調(diào)參數(shù)設(shè)置為FFH,節(jié)拍參數(shù)設(shè)置為00H.蜂鳴器驅(qū)動電路此次設(shè)計選用有源蜂鳴器。有源蜂鳴器的發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動振動膜發(fā)音,因此需要一定的電流才能驅(qū)動它。單片機的I/O引腳的輸出電流比較小輸出的TTL電平基本上驅(qū)動不了蜂鳴器,因此需要增加一個電流放大的電路,如圖4-4所示,選用NPN的三極管來達到電流放大的作用。圖1-1蜂鳴器驅(qū)動電路按鍵電路:按鍵都采用了上拉電阻,當按鍵處于不被按下的狀態(tài)時,連接到單片機的一端的輸入信號為高電平,當按鍵按下時,輸入為低電平,如圖4-6所示。圖1-2按鍵電路四設(shè)計任務(wù)和主要內(nèi)容:主要內(nèi)容:利用實驗資源實現(xiàn)簡易電子琴的簡單功能:(1)利用蜂鳴器發(fā)出不通的聲音 (2)使用lcd顯示器來顯示音階輸入的相關(guān)信息 (3)當按下鍵盤相對按鍵,蜂鳴器會發(fā)出相對音階的單音,共有 兩個8度音階(4)至少可以輸入16個單音,可以一起演奏出來(5)演奏時可以按鍵中斷(6)按下音樂播放鍵可以自動播放預(yù)先存在內(nèi)存中的曲子主要技術(shù)指標和要求: (1)充分應(yīng)用已給出的開發(fā)板硬件的資源進行設(shè)計 (2)通過改變占空比產(chǎn)生不同頻率的信號 (3)實現(xiàn)按鍵發(fā)出的相對音階的單音 (4)可以按照已經(jīng)編好的樂譜演奏出相應(yīng)的音樂五單片機控制系統(tǒng)原理:本次課程設(shè)計采用atmel公司stm32f103VE單片機,stm32f103VE是低電壓,高性能的cmos8位單片機,片內(nèi)含8KB的程序存儲器和12B的隨機存取數(shù)據(jù)存儲器,其主要功能特性為:兼容MCS51指令系統(tǒng)·32個雙向I/O口·3個16位可編程定時/計數(shù)器中斷·2個串行中斷·2個外部中斷源·2個讀寫中斷口線·3級加密位·低功耗空閑和耗電模式·軟件設(shè)置睡眠和喚醒功能等.單片機必須在時鐘的驅(qū)動下才能工作,在單片機內(nèi)部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機內(nèi)部的各個單元,決定單片機的工作速度。單片機的定時控制功能是用時鐘電路和振蕩器完成的,而根據(jù)硬件電路的不同,連接方式分為內(nèi)部時鐘方式和外部時鐘方式。本次設(shè)計中采用內(nèi)部時鐘方式。在按鍵中常產(chǎn)生‘毛刺’現(xiàn)象,要消除“毛刺”現(xiàn)象,最常用的方法是即時重復(fù)掃描法,延時法的原理是:‘毛刺’脈沖一般持續(xù)時間短,約為幾毫秒,而我們按鍵的時間一般遠遠大于這個時間,所以當單片機檢測到有按鍵動靜后,再延時一段時間(十毫秒到二十毫秒)后再進行判斷此電平是否保持原來的狀態(tài),如果是,則說明是有效的按鍵按下,否則為無效按鍵。矩陣鍵盤是單片中外部設(shè)備中所使用的排列類似于矩陣的鍵盤組。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。行掃描法:1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。六主程序:主程序的流程圖:開始按鍵是否按下NY去抖動,延時10msN按鍵是否按下Y掃描按鍵位置做一次按鍵處理,播放 相應(yīng)的音符或音樂七、結(jié)束語:通過本次課程設(shè)計,我不僅學(xué)會了對KEIL的應(yīng)用,還加深了對STM32單片機的了解,同時也進一步增強了自己的動手能力。通過本次設(shè)計,我不僅加深了對單片機理論的理解,將理論很好地應(yīng)用到實際當中去,而且我還學(xué)會了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。創(chuàng)新可以是在原有的基礎(chǔ)上進行改進,使之功能不斷完善,成為真己的東西。這個設(shè)計過程中,通過在原有的按鍵中斷的基礎(chǔ)上進行了改進,使之具備了電子琴的基本功能。設(shè)計結(jié)果能夠符合題意,成功完成了此次實習(xí)要求,我不只在乎這一結(jié)果,更加在乎的,是這個過程。這個過程中,自己更加注重了一些基礎(chǔ)的理知識的學(xué)習(xí),很好的把平時課堂上的知識運用到了實際的操作中。同時,軟硬件的結(jié)合調(diào)試也讓自己明白了理論上的很多東西也是需要實際實驗的驗證的。本綜合設(shè)計是讓得到一次進行獨立設(shè)計的工程實踐鍛煉,不僅培養(yǎng)嚴謹?shù)目茖W(xué)態(tài)度和扎實的實踐技能、良好的工程意識,并在設(shè)計中學(xué)會如何發(fā)現(xiàn)、分析和解決工程實踐問題的技能和方法,為后續(xù)的畢業(yè)設(shè)計做好準備。同時在這里也感謝在整個設(shè)計中幫助過我的老師和同學(xué)們。八、參考文獻[1]馮建華,趙亮.單片機應(yīng)用系統(tǒng)設(shè)計與產(chǎn)品開發(fā)[M].北京:人民郵電出版社2004[2]譚浩強.C語言程序設(shè)計[M].北京:清華大學(xué)出版社1999[3]《單片機與嵌入式:STM32庫開發(fā)實戰(zhàn)指南》[M]北京:機械工業(yè)出版社2013附件:Main.c#include"stm32f10x.h"#include"KEY.h"#include"Beep.h"#include"PWM_OutPut.h"http://intmain(void)//{//uint8_tK;////SysTick_Init();//KeyBoard_Init();//TIM4_GPIO_Config();////Beep_GPIO_Config();////TIM4_PWM_Init();////Beep_do();//while(1)//{////TIM4->CCR3=523;////Delay_us(400);////TIM4->CCR3=578;////Delay_us(400);////TIM4->CCR3=659;////Delay_us(400);////TIM4->CCR3=698;////Delay_us(400);////TIM4->CCR3=784;////Delay_us(400);////TIM4->CCR3=880;////Delay_us(400);////TIM4->CCR3=988;////Delay_us(400);////K=Read_KeyValue();//switch(K)//{//case1://TIM4->CCR3=256;//TIM4_Mode_Config(280);////TIM_Cmd(TIM4,ENABLE);//break;//case2://TIM4->CCR3=288;//TIM4_Mode_Config(10);//TIM_Cmd(TIM4,ENABLE);//Delay_us(10);//TIM_Cmd(TIM4,DISABLE);//break;//case3://TIM4->CCR3=320;////TIM_Cmd(TIM4,ENABLE);//break;//case4://TIM4->CCR3=341;////TIM_Cmd(TIM4,ENABLE);//break;//case5://TIM4->CCR3=384;////TIM_Cmd(TIM4,ENABLE);//break;//case6://TIM4->CCR3=426;////TIM_Cmd(TIM4,ENABLE);//break;//case7://TIM4->CCR3=480;////TIM_Cmd(TIM4,ENABLE);//break;//case8://TIM4->CCR3=512;////TIM_Cmd(TIM4,ENABLE);//break;//}////if(K==0)////{////TIM4->CCR3=0;////}//}////addyourcodehere//}intmain(void){TIM_SetAutoreload(TIM2,1); TIM4_GPIO_Config(); NVIC_Configuration();TIM4_Mode_Config();KeyBoard_Init(); while(1) {//// TIM_SetAutoreload(TIM2,7);// if(keyvalue()==0)// {TIM_SetAutoreload(TIM2,0);}// if(keyvalue()==1)// {TIM_SetAutoreload(TIM2,120);}// elseif(keyvalue()==2)// {TIM_SetAutoreload(TIM2,110);}// elseif(keyvalue()==3)// {TIM_SetAutoreload(TIM2,100);}// elseif(keyvalue()==4)// {TIM_SetAutoreload(TIM2,90);}// elseif(keyvalue()==5)// {TIM_SetAutoreload(TIM2,80);}// elseif(keyvalue()==6)// {TIM_SetAutoreload(TIM2,70);}// elseif(keyvalue()==7)// {TIM_SetAutoreload(TIM2,60);}switch(Read_KeyValue()) { case(0):TIM_SetAutoreload(TIM4,0); break; case(1):TIM_SetAutoreload(TIM4,3800); break; case(2):TIM_SetAutoreload(TIM4,3450); break; case(3):TIM_SetAutoreload(TIM4,3100); break; case(4):TIM_SetAutoreload(TIM4,2750); break; case(5):TIM_SetAutoreload(TIM4,2400); break; case(6):TIM_SetAutoreload(TIM4,2050); break;case(7):TIM_SetAutoreload(TIM4,1700); break; case(8):TIM_SetAutoreload(TIM4,1350); break; case(9):TIM_SetAutoreload(TIM4,1250); break; case(10):TIM_SetAutoreload(TIM4,1150); break; case(11):TIM_SetAutoreload(TIM4,1050); break; case(12):TIM_SetAutoreload(TIM4,950); break; case(13):TIM_SetAutoreload(TIM4,850); break; case(14):TIM_SetAutoreload(TIM4,750); break;case(15):TIM_SetAutoreload(TIM4,650); break; case(16):TIM_SetAutoreload(TIM4,550); break; } } }SysTick.c#include"SysTick.h"static__IOu32TimingDelay;voidSysTick_Init(void){ if(SysTick_Config(SystemCoreClock/1000)) { while(1); } SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;}voidDelay_us(__IOu32nTime){TimingDelay=nTime; SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; while(TimingDelay!=0);}voidTimingDelay_Decrement(void){ if(TimingDelay!=0x00) { TimingDelay--; }}PWM.c#include"PWM_OutPut.h"http://staticvoidTIM4_GPIO_Config(void)voidTIM4_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_8);}voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}//staticuint16_tTIM4_Mode_Config(uint16_ta)voidTIM4_Mode_Config(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure;TIM_TimeBaseStructure.TIM_Period=1;TIM_TimeBaseStructure.TIM_Prescaler=36-1;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=0;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC3Init(TIM4,&TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM4,ENABLE);TIM_Cmd(TIM4,ENABLE);//Delay_us(10);//TIM_Cmd(TIM4,DISABLE);}//voidTIM4_PWM_Init(void)//{//TIM4_GPIO_Config();//TIM4_Mode_Config();//}信息與電氣工程學(xué)院課程設(shè)計說明書課程名稱:單片機應(yīng)用課程設(shè)計題目:簡易計算器專業(yè)班級:學(xué)生姓名:學(xué)號:21指導(dǎo)教師:設(shè)計周數(shù):二周設(shè)計成績:目錄1、課程設(shè)計目的2、課程設(shè)計任務(wù)2.1設(shè)計題目2.2設(shè)計小組成員2.3原始數(shù)據(jù)及主要任務(wù)2.4技術(shù)要求3、課程設(shè)計內(nèi)容3.1方案設(shè)計3.1.1單元電路設(shè)計3.2.13.2.23.2.33.2.4系統(tǒng)調(diào)試3.4系統(tǒng)設(shè)計3.5程序流程圖3.6系統(tǒng)實施1、課程設(shè)計目的1.1用單片機課程及已學(xué)電子電路知識設(shè)計一簡易時鐘顯示裝置,包括電路圖的設(shè)計和制版等。1.2通過課程設(shè)計加深對單片機課程的相關(guān)知識的學(xué)習(xí)和理解。1.3初步學(xué)會一些設(shè)計思想和實踐技能。提高學(xué)生綜合素質(zhì)。1.4讓學(xué)生從設(shè)計過程中領(lǐng)悟到相互合作的重要性。2、課程設(shè)計任務(wù)2.1設(shè)計題目:簡易數(shù)字計算器設(shè)計2.2設(shè)計小組成員:魏昌磊,張錦超,常源月,吳坤書2.3原始數(shù)據(jù)及任務(wù)設(shè)計并制作出一個以單片為核心的電子鎖系統(tǒng):1、確定總體設(shè)計方案;2、設(shè)計鍵盤輸入電路;3、設(shè)計顯示電路;4、合理分配地址,編寫系統(tǒng)程序;5、利用protel設(shè)計硬件電路原理圖和PCB圖;6、軟硬件聯(lián)機調(diào)試2.4技術(shù)要求設(shè)計一個以MCS-51單片機為核心的簡易計算器系統(tǒng)。能夠進行兩位數(shù)的簡單的加、減、乘、除運算,且具備清零功能。十個數(shù)字鍵,六個功能鍵。進行除法運算時,小數(shù)點保留2位顯示。如果除數(shù)為零,擇清零顯示,蜂鳴器響,當按下任意鍵后,蜂鳴器停止。課擴展計算連續(xù)功能,數(shù)據(jù)溢出清0顯示,蜂鳴器響,按下任意鍵后,蜂鳴停止。3、課程設(shè)計內(nèi)容3.1方案設(shè)計3.1.1STC90C52AD是由宏晶公司生產(chǎn)的高性能八位單片機。如圖一所示。該芯片采用FLASH存儲技術(shù),內(nèi)部具有8KB字節(jié)快閃存存儲器,采用DIP封裝,是目前在中小系統(tǒng)中應(yīng)用最為普及的單片機。STC90C52AD可構(gòu)成真正的單片機最小應(yīng)用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)的可靠性,降低系統(tǒng)的成本。只要程序長度小于8K,四個I/O口全部提供給用戶??捎?V電壓編程,而且擦寫時間僅需10毫秒,僅為8751/87C51的擦除時間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時不拔下芯片,圖一適合許多嵌入式控制領(lǐng)域。工作電壓范圍(2.7V~6V),全靜態(tài)工作,工作頻率寬在0Hz~24MHz之間,比8751/87C51等51系列的6MHz~12MHz更具有靈活性,系統(tǒng)能快能慢。STC90C52AD芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統(tǒng)不被仿制。P0口是三態(tài)雙向口,通稱數(shù)據(jù)總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。STC90C52AD單片機為40引腳芯片如圖一所示,在本設(shè)計中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。P0口可作為通用I/O口,但須外接上拉電阻,所以在設(shè)計顯示數(shù)碼管我們避免了使用P0口這樣大大簡化了動態(tài)顯示電路。P1口:8位、雙向I/0口,內(nèi)部含有上拉電阻。P1口可作普通I/O口。輸出緩沖器可驅(qū)動四個TTL負載;用作輸入時,先將引腳置1,由片內(nèi)上拉電阻將其抬到高電平。P1口的引腳可由外部負載拉到低電平,通過上拉電阻提供電流。在FLASH并行編程和校驗時,P1口可輸入低字節(jié)地址。在串行編程和效驗時,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分別是串行數(shù)據(jù)輸入、輸出和移位脈沖引腳。P2口:具有內(nèi)部上拉電阻的8位雙向I/O口。P2口用做輸出口時,可驅(qū)動4各TTL負載;用做輸入口時,先將引腳置1,由內(nèi)部上拉電阻將其提高到高電平。若負載為低電平,則通過內(nèi)部上拉電阻向外部輸出電流。在FLASH并行編程和校驗時,P2口可輸入高字節(jié)地址和某些控制信號。P3口:具有內(nèi)部上拉電阻的8位雙向口。P3口用做輸出口時,輸出緩沖器可吸收4各TTL的灌電流;用做輸入口時,首先將引腳置1,由內(nèi)部上拉電阻抬位高電平。若外部的負載是低電平,則通過內(nèi)部上拉電阻向輸出電流。在本設(shè)計中,P3口作為時間設(shè)置的4按鍵輸入,因為有上拉電阻,所以可以通過按鍵直接接地,簡化了電路。在與FLASH并行編程和校驗時,P3口可輸入某些控制信號。P3口除了通用I/O口功能外,還有替代功能如表1所示。表1P3口的第二功能端口引腳各個功能P3.0RXD(串行口輸入端)P3.1TXD(串行口輸出端)P3.2INT0(外部中斷0請求輸入端,低電平有效)P3.3INT1(外部中斷1請求輸入端,低電平有效)P3.4T0(定時/計數(shù)器0計數(shù)脈沖輸入端)P3.5T1(定時/計數(shù)器1計數(shù)脈沖輸入端)P3.6WR(外部數(shù)據(jù)存儲器寫選通信號輸出端,低電平有效)P3.7RD(外部數(shù)據(jù)存儲器讀選通信號輸出端,低電平有效)單片機使用宏晶公司支持串口下載程序(ISP)的單片機,為STC90C52AD課程設(shè)計配發(fā)的小電路板(ISP-MCUBasiccircuit)電路原理圖見下圖。該板作為課程設(shè)計的核心電路板使用,板上有單片機及附屬電路,RS-232通信驅(qū)動電路,高低電平測試電路等。課程設(shè)計電路中需要的其他電路在此基礎(chǔ)上擴展,通過插孔連接。課程設(shè)計配發(fā)的小電路板(ISP-MCUBasiccircuit)電路原理圖見下圖。擴展電路在萬用板上制作用四位數(shù)碼管顯示小時與分鐘,中間那個點用來區(qū)分小時與分鐘;每秒用一個LED閃爍一下;用了4個按鍵,一個是選擇鍵,一個是加鍵,一個是減鍵,一個是確認鍵。時間要精確,整點報時,聲音間隔1秒,并且可以調(diào)整時間調(diào)整位閃爍提示。擴展電路用到得器件:共十六個按鍵:十個數(shù)字鍵,一個是加鍵,一個是減鍵,一個是除鍵,一個乘鍵,一個等鍵,一個清零鍵;六個DPY7-SEGDP共陽極動態(tài)LED;六個PNP三極管;十四個330歐姆和兩個470歐的電阻;導(dǎo)線。每各引腳可吸收8各TTL的灌電流。作為輸入時,首先應(yīng)將引腳置1。P0也可用做訪問外部程序存儲器和數(shù)據(jù)存儲器時的低8位地址/數(shù)據(jù)總線的復(fù)用線。在該模式下,P0口含有內(nèi)部上拉電阻。在FLASH編程時,P0口接收代碼字節(jié)數(shù)據(jù);在編程效驗時,P0口輸出代碼字節(jié)數(shù)據(jù)(需要外接上拉電阻)。標識符器件名稱規(guī)格型號數(shù)量標識符器件名稱規(guī)格型號數(shù)量U1單片機STC90C52AD1C11C12瓷片電容22p或30p2U2RS232驅(qū)動MAX2321C13-C17獨石電容0.22uF(224)5J1-J4,CRY

LstsHsts接線插孔座排母86針C1C2電解電容1.0uF/50V2C3C4C電解電容10uF/50V3CRY晶體諧振器6MHz1C5-C8電解電容47uF(22uF)4High,Low,PS發(fā)光二極管φ33JPS接線端子電源用1R1金屬膜電阻200Ω1RST按鈕小(0.2×0.3)1R0金屬膜電阻6.8K1JDBDB9插座DB9針形座1R2R3R4金屬膜電阻3.3K3U1DIP插座DIP401R9金屬膜電阻1M1U2DIP插座DIP1613.1.2蜂鳴器二極管報警電路蜂鳴器二極管報警電路1時鐘電路STC90C52AD單片機4x4功能鍵盤電路動態(tài)顯示電路動態(tài)顯示控制電路采用單片機的TO定時器,使其工作在方式1,產(chǎn)生一個100ms定時中斷,循環(huán)10次,到1s時,秒加1;秒到60時,分加1,秒清零;分到60時,秒清零,分清零。數(shù)碼管采用動態(tài)顯示,一個掃描周期共循環(huán)四次,依次顯示秒的低位、秒的高位、分的低位、分的高位,每次顯示延時4ms。這期間要將不同的數(shù)送到P1口,以及將P2口的不同位置1。調(diào)節(jié)時,調(diào)用相應(yīng)的子程序,來完成功能。3.2單元電路設(shè)計3.2.1數(shù)碼管動態(tài)顯示接口是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,如圖三所示。圖二3.2.52單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。

在引腳XTAL1和XTAL2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機內(nèi)部有一個高增益反相放大器,當外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。內(nèi)部振蕩方式的外部電路如下圖所示。圖三

圖中,電容器Col,C02起穩(wěn)定振蕩頻率、快速起振的作用,其電容值一般在5-30pF。晶振頻率的典型值為12MH2,采用6MHz的情況也比較多。內(nèi)部振蕩方式所得的時鐘情號比較穩(wěn)定,實用電路中使用較多。外部振蕩方式是把外部已有的時鐘信號引入單片機內(nèi)。這種方式適宜用來使單片機的時鐘與外部信號保持同步。3.2.3蜂鳴器電路單元如圖四所示圖四3.2.4如圖五所示另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個圖五數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮?xí)r間為1~2ms。3.2.5如圖六所示功能分配如圖七所示圖六圖七3.3系統(tǒng)調(diào)試硬件調(diào)試時可先檢查印制板及焊接的質(zhì)量情況,在檢查無誤后可通電檢查LED顯示器的點亮狀況。若亮度不理想,可以調(diào)整P1口的電阻大小,一般情況下取200Ω電阻即可獲得滿意的亮度效果。實驗室制作時,可結(jié)合示波器測試晶振及P1,P2端口的波形情況進行綜合硬件測試分析。硬件調(diào)試:硬件調(diào)試是利用DVCC實驗與開發(fā)系統(tǒng)、基本測試儀器(萬用表、示波器等),檢查用戶系統(tǒng)硬件中存在的故障。硬件調(diào)試可分為靜態(tài)調(diào)試與動態(tài)調(diào)試兩步進行。靜態(tài)調(diào)試:是在用戶系統(tǒng)未工作時的一種硬件檢測。第一步:目測。檢查外部的各種元件或者是電路是否有斷點。第二步:用萬用表測試。先用萬用表復(fù)核目測中有疑問的連接點,再檢測各種電源線與地線之間是否有短路現(xiàn)象。第三步:加電檢測。給板加電,檢測所有插座或是器件的電源端是否符合要求的值第四步:聯(lián)機檢查。因為只有用單片機開發(fā)系統(tǒng)才能完成對用戶系統(tǒng)的調(diào)試。動態(tài)調(diào)試:是在用戶系統(tǒng)工作的情況下發(fā)現(xiàn)和排除用戶系統(tǒng)硬件中存在的器件內(nèi)部故障、器件連接邏輯錯誤等的一種硬件檢查。動態(tài)調(diào)試的一般方法是由近及遠、由分到合。由分到合是指首先按邏輯功能將用戶系統(tǒng)硬件電路分為若干塊,當調(diào)試電路時,與該元件無關(guān)的器件全部從用戶系統(tǒng)中去掉,這樣可以將故障范圍限定在某個局部的電路上。當各塊電路無故障后,將各電路逐塊加入系統(tǒng)中,在對各塊電路功能及各電路間可能存在的相互聯(lián)系進行調(diào)試。由分到合的調(diào)試既告完成。由近及遠是將信號流經(jīng)的各器件按照距離單片機的邏輯距離進行由近及遠的分層,然后分層調(diào)試。調(diào)試時,仍采用去掉無關(guān)元件的方法,逐層調(diào)試下去,就會定位故障元件了。軟件調(diào)試:軟件調(diào)試是通過對程序的匯編、連接、執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程。可以利用仿真器加以調(diào)試,對系統(tǒng)單個單元進行調(diào)試,當單元電路成功后,在對整個程序調(diào)試,最后在用CPU芯片調(diào)試。3.4系統(tǒng)設(shè)計要用到實現(xiàn)要求的功能,需要16個鍵,09,+,-,*,/,清零鍵考慮到要有兩位小數(shù)顯示,至少需要4個七段數(shù)碼管,但設(shè)計時應(yīng)用了六個數(shù)碼管,倒數(shù)第二位小數(shù)點直接接地,一直顯示小數(shù)點亮。3.5程序流程圖如圖3.6系統(tǒng)實施根據(jù)原理圖列寫原件清單,領(lǐng)取所需的元件,板子和工具(烙鐵,鉗子,萬用表,螺絲刀,剪刀),去試驗臺焊電路板。焊完板子,通過軟硬結(jié)合的方式對電路板進行硬件調(diào)試,硬件沒錯誤之后,開始進行軟件編程,直到整個功能實現(xiàn),并進行優(yōu)化。4.總結(jié)通過這兩周的課程設(shè)計,讓我了解了設(shè)計電路的程序,也讓我了解了數(shù)字鐘的工作原理和設(shè)計理念,加強了我們動手、思考和解決問題的能力。在此次的數(shù)字鐘設(shè)計過程中,我進一步熟悉了單片機芯片的硬件結(jié)構(gòu)和各引腳的功能,以及其他芯片如CD4511、數(shù)碼管的工作原理和使用方法,鞏固和加強了理論知識。這次課程設(shè)計給我的最大感受就是僅僅學(xué)理論知識是不夠的,必須將理論知識和實踐結(jié)合起來,在實踐中應(yīng)用理論知識,從而使其得到更深刻的理解和鞏固,來提高自己的實際運用能力和獨立思考的能力。在設(shè)計的過程中遇到了重重困難,不過經(jīng)過老師的耐心指導(dǎo)和同學(xué)的幫助,很多問題都解決了。最困難的就是調(diào)試調(diào)試程序,剛開始程序總是不能滿足要求,不過經(jīng)過多次更改,最后終于成功了。不過在硬件上,數(shù)碼管顯示不是令人很滿意,可能是焊接的原因,多次查找也沒能解決,這方面還需要多多練習(xí)。設(shè)計是一個團隊的任務(wù),我們在一起工作很愉快,互相幫助,互相學(xué)習(xí)。我感覺我和同學(xué)們的關(guān)系更近了。團結(jié)協(xié)作是成功的一項非常重要的保證,而這次課程設(shè)計也正好鍛煉了這一點,這也是非常寶貴的。設(shè)計中的很多問題都是老師在老師辛勤、耐心的指導(dǎo)下完成的,同時,我們也從老師身上學(xué)到了很多知識,在此表示感謝!C語言程序://51單片機4*4鍵盤簡單計算器程序#include<reg52.h>unsignedcharcodetab[16]={0xfd,0xb7,0x0d,0x25,0xb1, 0x61,0x40,0x37,0x00,0x20, 0xa0,0x83,0xa7,0xa1,0x84, 0x8e};//段選碼表unsignedintvalue1,value2,result;intkeyt,key1,tempkey,s;sbitP0.0=P1^0;sbitP0.1=P1^1;sbitP0.2=P1^2;sbitP0.3=P1^3;voiddelay(unsignedintz)//延時函數(shù){ unsignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}intgetkey()//掃描鍵盤并獲得鍵值{intkey=0; P2=0xff; if(P2!=0xff) delay(5); while(P2!=0xff) //行掃描有低電平信號出現(xiàn) { switch(P2) //則在P2口全輸出高電平的情況下進行列掃描 { case0xfe:key=7;break; //得出鍵值 case0xfd:key=8;break; case0xfb:key=9;break; case0xf7:key=14;break; } } if(key)return(key); P2=0xff; while(P2!=0xff) { switch(P2) { case0xfe:key=4;break; case0xfd:key=5;break; case0xfb:key=6;break; case0xf7:key=13;break;

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論