欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機(jī)課程設(shè)計

      時間:2019-05-15 11:44:06下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機(jī)課程設(shè)計》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《單片機(jī)課程設(shè)計》。

      第一篇:單片機(jī)課程設(shè)計

      單片機(jī)課程設(shè)計 跑馬燈的控制

      摘要:本設(shè)計選擇對跑馬燈的控制,先構(gòu)思跑馬燈實(shí)現(xiàn)預(yù)想效果,然后進(jìn)行分 析,根據(jù)要求編寫程序,選擇硬件端口,并進(jìn)行調(diào)試致預(yù)想效果,最后淺談?wù)n

      程設(shè)計的經(jīng)歷,以及總結(jié)。

      目錄

      一)課程設(shè)計的目的 二)課程設(shè)計的要求 三)流程圖 四)原理圖 五)程序語言 六)

      總結(jié) 七)參考資料

      設(shè)計題目:試設(shè)計一個閃爍跑馬燈控制器,該控制器可以控制8個燈順序亮滅。當(dāng)單片機(jī)上電后,8個燈依次從左向右亮,并且每個燈亮的時間為1秒鐘。這時,如果按鈕K1按下,則燈亮的順序是從右向左,同樣,每個燈亮的時間是1秒鐘。這時,如果按下按鈕K2,則此時,4個燈亮4個燈滅,延遲4秒鐘以后,又開始從左向右點(diǎn)亮。最后,若按下按鈕K3,則全部燈亮。此時若想再次點(diǎn)亮燈,必須

      重新上電。題目分析:

      該題目要求控制8盞燈的亮滅,可使用單片機(jī)的P1.0到P1.8口來控制。按鈕K1用P3.4口,K2用P3.2口,及外部中斷0,K3用P3.3口,及外部中斷1,分別來實(shí)現(xiàn)。單片機(jī)使用AT89C52,電源使用5V標(biāo)準(zhǔn)電源。順序亮滅使用外部中斷

      源構(gòu)成循環(huán)控制語句。

      一、課程設(shè)計的目的

      課程設(shè)計是本專業(yè)集中實(shí)踐環(huán)節(jié)的主要內(nèi)容之一。訓(xùn)練正確地應(yīng)用單片機(jī),培養(yǎng)解決工業(yè)控制、工業(yè)檢測等領(lǐng)域具體問題的能力。學(xué)生通過所做課題,熟悉單片機(jī)應(yīng)用系統(tǒng)開發(fā)研制的過程,軟硬件設(shè)計的工作方法、內(nèi)容及步驟,對學(xué)生進(jìn)行基本技能訓(xùn)練。例如組成系統(tǒng)、編程、調(diào)試、繪圖等。使學(xué)生理論聯(lián)系實(shí)際,提高動手能力和分析問題、解決問題的能力。

      通過本課程設(shè)計,主要達(dá)到以下目的:

      1.使學(xué)生增進(jìn)對單片機(jī)的感性認(rèn)識,加深對單片機(jī)理論方面的理解。2.使學(xué)生掌握單片機(jī)的內(nèi)部功能模塊的應(yīng)用,如定時器/計數(shù)器、中斷、片內(nèi)外存貯器、I/O

      口、串行口通訊等。

      3.使學(xué)生了解和掌握單片機(jī)應(yīng)用系統(tǒng)的軟/硬件設(shè)計過程、方法及實(shí)現(xiàn),為以后設(shè)計和實(shí)現(xiàn)單片機(jī)應(yīng)用系統(tǒng)打下良好基礎(chǔ)。

      二、課程設(shè)計的要求

      1.學(xué)生需認(rèn)真閱讀課程設(shè)計任務(wù)書,熟悉有關(guān)設(shè)計資料及參考資料,熟悉各種設(shè)計規(guī)范的有關(guān)內(nèi)容,認(rèn)真完成任務(wù)書規(guī)定的設(shè)計內(nèi)容。

      2.課程設(shè)計的成果為“課程設(shè)計報告”。課程設(shè)計報告內(nèi)容要正確,概念要清楚,完成任務(wù)書所規(guī)定的內(nèi)容,附有原理圖及程序流程圖,程序清單,文字要通順,書寫要工整,設(shè)計圖紙必須符合規(guī)范。

      3.課程設(shè)計報告應(yīng)在2000字以上(含相關(guān)圖紙和計劃書等),用A4紙打印。

      三、流程圖 主程序流程圖

      原理圖說明:該設(shè)計選用一塊AT89C52型單片機(jī),使用其P0口,P3口的部 分。P0口作為發(fā)光二極管的控制信號輸出端,P3.0作為按鈕K1的信號輸入口,P3.2為按鈕K2外部中斷0信息輸入口,P3.3作為K3外部中斷0的信息輸入口。單片機(jī)晶振頻率為12MHz,每個機(jī)器周期1μs。電源使用5v直流電。

      五、程序語言:

      ORG 0000H :程序入口地址 AJMP MAIN ORG 0003H :外部中斷0入口地址 AJMP ZD0 ORG 0013H :外部中斷1入口地址 AJMP ZD1

      ORG 0100H :主程序入口地址

      MAIN: MOV SP,#40H :初始化,開外部中斷1,外部中斷0,以及總中斷,并

      且將外部中斷1設(shè)為最高優(yōu)先級,并且是脈沖觸發(fā)方式。

      MOV IE,#85H

      MOV IP,#04H MOV TCON,#01H YYY: MOV A,#7FH :將A寄存器中存入7FH.SETB P3.4 JB P3.4,PPP :判斷按鍵K1是否按下,如果沒有按下則跳轉(zhuǎn)到PPP,燈從

      左到右依次點(diǎn)亮。CLR Cy :進(jìn)位位清零 MOV A,#0FFH :A中存入FFH.MMM: RLC A :A中數(shù)據(jù)帶進(jìn)位位左移一位。

      MOV P2,A :將A中數(shù)據(jù)送到P0口,燈亮且延遲1秒。ACALL DELAY SETB P3.4 JB P3.4,PPP :判斷K1是否按下,若按下則跳轉(zhuǎn)到MMM,沒有則跳轉(zhuǎn)

      到PPP,燈依次從左向右亮,且沒亮一次,延遲1秒

      SJMP MMM PPP: MOV P2,A A中數(shù)據(jù)轉(zhuǎn)到P0口,點(diǎn)亮燈。

      RR A :A中數(shù)據(jù)右移一位 ACALL DELAY :調(diào)用一秒延遲

      SETB P3.4 JNB P3.4,YYY :判斷K1按鍵是否按下,按下則跳轉(zhuǎn)到Y(jié)YY,沒有則跳

      轉(zhuǎn)到PPP SJMP PPP ZD0: MOV A,#0FFH :外部中斷0,將FFH送入A寄存器中,再送到P0口,燈全滅,且延遲4秒鐘,后再循環(huán)亮。

      MOV P2,A ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY

      AJMP MAIN

      RETI :中斷程序返回

      ZD1: MOV A,#0FFH :A寄存器中存入FFH,再送到P0口,燈滅,MOV P0,A AJMP $ :本地一直循環(huán) RETI :中斷返回

      DELAY: MOV R5,#25 :延遲4秒子程序 D1: MOV R6,#200 D2: MOV R7,#100 DJNZ R7,$ DJNZ R6,D2 DJNZ

      R5,D1

      RET :子程序返回 END :程序結(jié)束

      調(diào)試說明:打開c51軟件,新建工程gao,新建文件,輸入以上程序,以.asm 格式保存。在gao工程中添加輸入好的程序。點(diǎn)擊編譯,對有錯誤地方修改。選擇生成HEX文件,再編譯,此時已經(jīng)生成HEX文件。打開AVR燒錄軟件,將生成好的HEX文件下載到單片機(jī)機(jī)中,觀察單片機(jī)的對應(yīng)發(fā)光二極管的狀態(tài),看是否與設(shè)計預(yù)想一致。若不一致,在C51里修改相應(yīng)地方,再重新編譯下載,直至與預(yù)想一致。

      六、總結(jié)

      單片機(jī)課程設(shè)計是一個很好的實(shí)踐環(huán)節(jié),它將我們所學(xué)的課堂知識與實(shí)踐生活結(jié)合,使我們所學(xué)知識得到加固。以前的課程都是理論知識的學(xué)習(xí),感覺有些抽象,學(xué)習(xí)起來也比較乏味,沒有主觀的學(xué)習(xí)熱情。這次課程設(shè)計的主要收獲就是在運(yùn)用知識的過程中讓我對單片機(jī)產(chǎn)生了濃厚的興趣,課后自己還親手制作單片機(jī),從而對單片機(jī)的結(jié)構(gòu)更加了解,將硬件與軟件知識完美的結(jié)合。從而增加了我對知識的渴望,這也許就是主觀的學(xué)習(xí)積極性。

      老師的指導(dǎo)也是是很重要的,眾所周知,實(shí)踐中,經(jīng)驗(yàn)占據(jù)重要地位。老師的經(jīng)驗(yàn)和知識都要多于我們。通過老師的指導(dǎo),使我們的試驗(yàn)過程更加輕松,受益匪淺??傊@次課設(shè)不僅使我了解了單片機(jī)的開發(fā)流程,更加地理解運(yùn)用了知識,而且更重要的是收獲了知識以外的學(xué)問,這才是我受用一生的。

      七、參考資料:

      牛昱光主編《單片機(jī)原理與接口技術(shù)》電子工業(yè)出版社 51單片機(jī)實(shí)驗(yàn)指導(dǎo)書 胡漢才主編《單片機(jī)原理及其應(yīng)用》清華大學(xué)出版社出版 何立民主編《單片機(jī)應(yīng)用文集》北京航空航天大學(xué)出版社出版 天津銳志單片機(jī)學(xué)習(xí)資料

      第二篇:單片機(jī)課程設(shè)計

      設(shè)計題目: 單片機(jī)課程設(shè)計

      學(xué)生姓名:

      學(xué)

      院: 電氣與信息工程學(xué)院

      級: 電子111班 指導(dǎo)教師:

      日 期: 2014年9月20日

      一、課程設(shè)計目的:

      了解電子元器件的功能與原理,掌握單片機(jī)的結(jié)構(gòu)和原理,學(xué)會使用單片機(jī)應(yīng)用開發(fā)技術(shù)的相關(guān)軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。

      二、設(shè)計的思想:

      利用所提供的單片機(jī)和開發(fā)板的原理圖用keill軟件編程程序以實(shí)現(xiàn)一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發(fā)板上,再調(diào)試編譯的程序能否實(shí)現(xiàn)其所設(shè)計的功能。

      1、對蜂鳴器的了解:

      蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼組成,接通電源后,振蕩器產(chǎn)生的音頻信號由電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發(fā)聲。

      2、設(shè)計:

      我們所使用的開發(fā)板實(shí)物圖如圖一,單片機(jī)對右上角蜂鳴器的控制是加入三極管接入vcc,單片機(jī)的第22引腳和負(fù)極上,以此來控制蜂鳴器工作。單片機(jī)我們選擇STC89C52RC+1602液晶來實(shí)現(xiàn)對蜂鳴器的控制及顯示所需要的信息。

      圖一 調(diào)試說明:

      首先用Keil軟件創(chuàng)建一個工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開單片機(jī)實(shí)踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機(jī)中。程序下載完畢后,單片機(jī)會自動執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達(dá)到了設(shè)計要求。

      如果單片機(jī)實(shí)踐板硬件電路的執(zhí)行結(jié)果與設(shè)計結(jié)果一致,則說明設(shè)計過程及流程沒有問題,完全符合設(shè)計要求。否則,先檢查單片機(jī)實(shí)踐板的硬件電路是否完好,是否有斷點(diǎn)、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進(jìn)行調(diào)試。如果仍然無法正

      常實(shí)現(xiàn),則說明程序編寫有誤,需要認(rèn)真檢查程序流程,然后經(jīng)過反復(fù)的修改與調(diào)試排除故障,實(shí)現(xiàn)設(shè)計要求的各項功能。編譯和燒寫該程序到單片機(jī):

      (1)用Keil編譯上面的代碼,并設(shè)置產(chǎn)生16進(jìn)制代碼文件*.hex.(2)用專用下載線,連接好實(shí)驗(yàn)板和電腦串口(DB9)(2)運(yùn)行hex文件燒寫軟件STC_ISP_V394.exe

      選單片機(jī)的型號,并打開編譯產(chǎn)生好的hex文件

      點(diǎn)擊下載,給開發(fā)板上電。

      3、實(shí)現(xiàn)的功能:使用單片機(jī)將歌曲《八月桂花》的調(diào)子通過蜂鳴器播放出來,用1602液晶將想要表達(dá)的信息有步驟地顯示在液晶顯示屏上,并且調(diào)子與顯示內(nèi)容可以任意通過修改的程序燒錄到單片機(jī)內(nèi),實(shí)現(xiàn)設(shè)計產(chǎn)品的使用性與靈活性。

      三、實(shí)驗(yàn)程序:

      /************************************************************************

      [主題] C51音樂程序《八月桂花》

      [功能]

      通過單片機(jī)演奏音樂,顯示一些內(nèi)容

      /**********************************************************************/

      #include

      #include

      //本例采用89C52, 晶振為11.0592MHZ

      //關(guān)于如何編制音樂代碼, 其實(shí)十分簡單,各位可以看以下代碼.//頻率常數(shù)即音樂術(shù)語中的音調(diào),而節(jié)拍常數(shù)即音樂術(shù)語中的多少拍;

      //所以拿出譜子, 試探編吧!

      unsigned char i=0;sbit Beep = P2^7;

      unsigned char p,m;

      //m為頻率常數(shù)變量

      unsigned char n=0;//n為節(jié)拍常數(shù)變量

      unsigned char code music_tab[] ={

      0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00

      };

      void int0()interrupt 1

      //采用中斷0 控制節(jié)拍

      { TH0=0xd8;

      TL0=0xef;

      n--;

      }

      void delay(unsigned char m)

      //控制頻率延時

      {

      unsigned i=3*m;

      while(--i);

      }

      void delayms(unsigned char a)//豪秒延時子程序

      {

      while(--a);

      //采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結(jié)果就知道了!

      }

      typedef unsigned char BYTE;typedef bit BOOL;

      sbit LCD_RS = P2^0;

      sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;

      BYTE code dis1[] = {“

      WLCOME TO

      ”};BYTE code dis2[] = {“

      DanPianJi ”};BYTE code dis3[] = {“

      111iZnaiD

      ”};BYTE code dis4[] = {“

      eiXeiX ”};

      delays(int ms){

      // 延時子程序 int i;while(ms--){

      for(i = 0;i< 250;i++)

      {

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      } } }

      BOOL lcd_bz(){

      // 測試LCD忙碌狀態(tài) BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}

      lcd_wcmd(BYTE cmd){

      while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;

      }

      lcd_pos(BYTE pos){

      lcd_wcmd(pos | 0x80);

      // 寫入指令數(shù)據(jù)到LCD //設(shè)定顯示位置

      }

      lcd_wdat(BYTE dat)

      {

      //寫入字符顯示數(shù)據(jù)到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}

      lcd_init(){

      lcd_wcmd(0x38);

      delays(1);lcd_wcmd(0x0c);

      delays(1);lcd_wcmd(0x06);

      delays(1);lcd_wcmd(0x01);

      delays(1);}

      void main()

      {

      BYTE j;

      lcd_init();

      delays(10);

      //LCD初始化設(shè)定

      //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)//顯示開,關(guān)光標(biāo) //移動光標(biāo) //清除LCD的顯示內(nèi)容

      // 初始化LCD

      lcd_wcmd(0x06);

      //向右移動光標(biāo)

      lcd_pos(0);

      //設(shè)置顯示位置為第一行的第1個字符

      j = 0;

      while(dis1[ j ]!= '