• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      單片機中與“時間”相關(guān)的模塊教學(xué)探討

      2017-04-15 00:57:45蔡逢煌
      電氣電子教學(xué)學(xué)報 2017年6期
      關(guān)鍵詞:時間中斷按鍵

      蔡逢煌, 王 武

      (福州大學(xué) 電氣工程與自動化學(xué)院, 福建 福州 350116)

      0 引言

      我院在“單片機原理與應(yīng)用”這門課程的教學(xué)上逐步形成了具有自己特點的教學(xué)模式,我們把該課程的教學(xué)分成七大模塊:GPIO模塊、中斷模塊、定時器模塊、PWM 模塊、捕獲模塊、AD模塊和通信模塊,把各個模塊之間通過案例聯(lián)系起來,使各個模塊的教學(xué)即相對獨立又前后聯(lián)系。

      其中,定時器模塊、捕獲模塊、PWM模塊都是與時間有關(guān)系的,其處理本質(zhì)上都是通過計數(shù)器來實現(xiàn)的。定時器是通過計數(shù)來實現(xiàn)計時的;PWM模塊在計數(shù)的基礎(chǔ)上,實現(xiàn)特定時刻對引腳輸出狀態(tài)的控制;捕獲模塊則是把引腳輸出狀態(tài)改變的那個時刻對應(yīng)的計數(shù)值記錄下來。

      在先前的教學(xué)中,這三個模塊是相對獨立講授的,沒有把它們之間的內(nèi)在聯(lián)系介紹給學(xué)生。因此,學(xué)生學(xué)完后,只懂得單個模塊的應(yīng)用。由于沒有實際工程經(jīng)驗,不懂得如何把它們聯(lián)系起來應(yīng)用。在新教學(xué)安排上,我們采用循序漸進的方法,結(jié)合案例引入解決了這一問題。首先學(xué)習(xí)定時器模塊,然后學(xué)習(xí)PWM模塊,最后學(xué)習(xí)捕獲模塊。在教學(xué)案例的設(shè)計上特別關(guān)注這些模塊之間的內(nèi)在聯(lián)系,逐漸深入,最后接近于工程實際。

      1 案例設(shè)計

      教學(xué)案例的設(shè)計是依托硬件平臺實現(xiàn)的。硬件平臺采用價格低廉、攜帶方便和功能強大的“ 口袋實驗室”,也就是TI公司的C2000 Piccolo TMS320F28027 LaunchPad最小系統(tǒng)板。該板通過USB接口與電腦連接,利用CCS軟件開發(fā)平臺進行程序的編寫、調(diào)試和燒寫?!翱诖鼘嶒炇摇笔箤W(xué)生能超越課堂的空間和時間的限制,完成應(yīng)用程序的設(shè)計和理論算法的實踐,從而減輕了學(xué)生與教師的壓力[1-3]。

      該板上有1個按鍵和4個LED燈。案例的設(shè)計是基于按鍵和LED以及編制程序?qū)崿F(xiàn)的。程序代碼要求可移植,也就是后面的案例可以在前面案例的基礎(chǔ)上完成,代碼有繼承性。

      通過這幾年的教學(xué)實踐,我們設(shè)計和這些模塊相關(guān)的案例如下。

      1.1 定時器模塊案例

      設(shè)計一個按鍵控制顯示模式的工程案例,要求:

      (1) 按鍵有:短按、長按、雙擊三種功能;

      (2) 顯示模式:跑馬燈顯示;顯示間隔時間由定時器計量。

      (3) 按鍵控制功能:短按減少跑馬燈的顯示間隔時間;長按增加跑馬燈的顯示間隔時間;雙擊恢復(fù)跑馬燈的顯示間隔時間為初始時間。

      1.2 定時器+PWM模塊案例

      (1) 按鍵有:短按、長按、雙擊三種種功能(可直接移植定時器案例的按鍵處理程序);

      (2) 顯示模式:跑馬燈模式或者呼吸燈模式。呼吸燈模式是利用PWM控制LED的顯示亮度,從暗逐漸到亮。全亮后再逐漸變暗,全暗后,重復(fù)進行。跑馬燈模式繼承1.1的案例。

      (3) 按鍵控制功能:短按減少顯示間隔的周期;長按增加顯示間隔的周期;雙擊進行顯示模式的切換。

      1.3 定時器+PWM+捕獲模塊案例:

      (1) 繼承之前案例的按鍵處理功能和呼吸燈顯示功能。

      (2) 顯示模式:雙擊進行顯示切換----呼吸燈模式和捕獲值顯示模式。

      (3) 呼吸燈模式------LED1慢慢亮,到最亮的時候保持住,然后LED2開始慢慢變亮,到最亮的時候保持住,依次四個LED燈完全亮,保持一秒鐘,LED4慢慢暗,到熄滅后,LED3開始慢慢變暗,依次四個LED燈完全暗。熄滅一秒鐘,再重復(fù)。(可移植案例1.2的呼吸燈顯示代碼進行修改)。

      (4) 按捕獲值控制LED顯示亮度--------對PWM輸出進行捕獲(把PWM3A引腳接到捕獲口),根據(jù)捕獲的占空比值控制LED顯示亮度。

      0--25%: LED1(由PWM1A控制)亮度根據(jù)占空比按比例調(diào)節(jié);

      25%--50%: LED1全亮、LED2(由PWM1B控制)亮度根據(jù)占空比(0-25%)按比例調(diào)節(jié);

      50%--75%: LED1、LED2全亮, LED3(由PWM2A控制)亮度根據(jù)占空比(0-25%)按比例調(diào)節(jié);

      75%--100%: LED1、LED2、 LED3全亮,LED4(由PWM2B控制)亮度根據(jù)占空比(0-25%)按比例調(diào)節(jié);

      (5) 按鍵控制功能:短按-----PWM3A輸出占空比減??;長按-----PWM3A輸出占空比增大;雙擊-----切換顯示模式。

      2 案例分析

      1.1節(jié)的定時器案例涉及到“單片機原理與應(yīng)用”課程GPIO模塊、定時器模塊、中斷模塊的應(yīng)用。寄存器的操作調(diào)用TI提供的底層驅(qū)動庫函數(shù)。部分代碼如下:

      /*定時器中斷周期1ms*/

      interrupt void myTimer_CpuTimer0_isr(void)

      {

      msecond_key_counter++; //按鍵識別用

      display_delay++; //跑馬燈顯示間隔時間

      PIE_clearInt(myPie, PIE_GroupNumber_1);

      //中斷應(yīng)答標志位清零

      }

      說明:定時器模塊提供授時服務(wù)。通過相關(guān)變量把時間傳遞給按鍵識別模塊和跑馬燈控制模塊。

      學(xué)生在這部分容易出現(xiàn)的問題:在定時器函數(shù)里面實現(xiàn)按鍵識別和跑馬燈控制,程序功能沒有按模塊化編程,各個功能融合一起時,程序可讀性差,可移植性差。

      /*跑馬燈程序*/

      void LED_Display(void)

      {

      if(display_delay > time_display_delay)

      //time_display_delay為按鍵更改的時間延時

      {

      LED_off(LED[LED_Count]); //熄滅當(dāng)前LED

      LED_Count++; //指向下一個LED

      if(LED_Count >=4) LED_Count=0;

      LED_on(LED[LED_Count]); //LED點亮

      PIE_clearInt(myPie, PIE_GroupNumber_1);

      //中斷應(yīng)答標志位清零

      }

      }

      按鍵對應(yīng)的IO口為外部中斷的輸入源。按鍵按下為高電平,按鍵放開為低電平。上升沿和下降沿都可以觸發(fā)外部中斷。一個按鍵要識別成三個不同的功能:短按、長按、雙擊。按鍵的算法思路為:上升沿中斷時判斷是否雙擊,并清零相關(guān)時間變量。下降沿時判斷長按、短按。

      學(xué)生在這部分功能實現(xiàn)上存在困難,主要是對算法的分析能力比較薄弱。特別是對雙擊的處理。程序編制方式雖然多樣,但是總體上不夠優(yōu)化。

      /*按鍵中斷程序*/

      interrupt void KEY_XINT1_isr3(void)

      {

      if(msecond_key_counter < 10) //兩次進入中斷的時間小于10ms,判斷為抖動

      {

      PIE_clearInt(myPie, PIE_GroupNumber_1);

      return; //為按鍵抖動,退出中斷

      }

      //上升沿

      if(KEYPRESSED == GetKeyStatus(KEY1))

      {

      if(msecond_key_counter <250) //距上次按鍵放開時間小于250ms,判斷為雙擊 {

      Flag_KEY_PRESS_TWICE = 1; //雙擊標志位,等待按鍵釋放后再處理 }

      else key_status = 0;

      msecond_key_counter = 0; //清計時

      }

      //下降沿時對應(yīng)按鍵放開,進行按鍵動作的確認

      else if(KEYPRESSED != getKeyStatus(KEY1))

      {

      if(Flag_KEY_PRESS_TWICE == 1)

      {

      key_status = KEY_PRESS_TWICE; //雙擊

      Flag_KEY_PRESS_TWICE = 0;

      }

      else if(msecond_key_counter > 350)

      {

      key_status = KEY_PRESS_LONG; //長按

      }

      else if(msecond_key_counter > 100)

      {

      key_status = KEY_PRESS_SHORT; //短按

      }

      msecond_key_counter = 0; //清計時

      }

      PIE_clearInt(myPie, PIE_GroupNumber_1);

      }

      /*按鍵短按、長按、雙擊處理*/

      void KEY_MODE(void)

      {

      if(msecond_key_counter > 500)

      { switch(key_status)

      {

      case 1: time_dispaly_delay=time_dispaly_delay-200;

      // 案例1

      // mypwm_period = mypwm_period - 200; //案例2

      // myCmp3A=myCmp3A-3000; //案例3

      key_status = KEY_PRESS_NO;

      break;

      case 2: time_dispaly_delay=time_dispaly_delay+200;

      // 案例1

      // mypwm_period = mypwm_period + 200; //案例2

      // myCmp3A=myCmp3A+3000; //案例3

      key_status = KEY_PRESS_NO;

      break;

      case 3:

      // time_dispaly_delay = TIME_INITIAL;

      // 恢復(fù)初始值

      display_mode=!display_mode; //顯示模式切換

      key_status = KEY_PRESS_NO;

      break;

      default: break;

      }

      }

      }

      三個案例的按鍵程序基本一樣,可以直接進行移植,在按鍵處理程序里面針對功能的不同可做部分修改。

      學(xué)生容易出現(xiàn)的問題是:程序沒有按模塊化編程,各個模塊的程序代碼嵌套在一起,可移植性差。

      /*pwm中斷函數(shù)*/

      interrupt void LED_EPWM3_isr(void)

      {

      PWM_huxideng1(); //呼吸燈改變占空比

      PWM_capture(); //捕獲反饋模式改變占空比

      if(pwm_mode == 0) //呼吸燈顯示模式

      {

      PWM_setCmpA(myPwm1,myCmp1A_huxi);

      PWM_setCmpB(myPwm1,myCmp1B_huxi);

      PWM_setCmpA(myPwm2,myCmp2A_huxi);

      PWM_setCmpB(myPwm2,myCmp2B_huxi);

      }

      if(pwm_mode == 1) //捕獲顯示模式

      {

      PWM_setCmpA(myPwm1,myCmp1A_cap);

      PWM_setCmpB(myPwm1,myCmp1B_cap);

      PWM_setCmpA(myPwm2,myCmp2A_cap);

      PWM_setCmpB(myPwm2,myCmp2B_cap);

      }

      PWM_setCmpA(myPwm3,myCmp3A);

      //PWM3A輸出

      PWM_clearIntFlag(myPwm3); //清中斷標志位

      PIE_clearInt(myPie, PIE_GroupNumber_3);

      }

      PWM_huxideng1()函數(shù)對應(yīng)呼吸燈模式改變占空比,PWM_capture()函數(shù)對捕獲反饋模式改變占空比,兩種方式相對獨立運行, 按鍵切換顯示方式。當(dāng)一種顯示模式工作時,另一種仍然在后臺運行。

      學(xué)生容易產(chǎn)生的問題是:兩種顯示模式互相影響,即當(dāng)一種模式運行時,另一種就停止運行。這些問題都是對軟件的模塊化思想不熟悉導(dǎo)致的。

      由于篇幅限制,對其他軟件代碼感興趣者可以跟筆者聯(lián)系獲得。

      3 教學(xué)反饋

      從以上的案例設(shè)計來看,由于前后模塊有繼承性,通過這種訓(xùn)練培養(yǎng)學(xué)生對軟件工程的模塊化思維。從近三年的教學(xué)效果來看,學(xué)生在學(xué)完這些模塊后,對知識的理解和接受程度上出現(xiàn)明顯的分化,有的學(xué)生邏輯思維能力和編程能力比較強,能順利地完成課堂布置的作業(yè)(根據(jù)統(tǒng)計,這部分學(xué)生只占10%左右);其他的大部分學(xué)生,完成相關(guān)的課堂作業(yè)有困難,主要體現(xiàn)在:①對模塊的工作原理較難理解;②對模塊大概理解了,但是不知道怎么轉(zhuǎn)換為程序代碼;③對模塊理解了,也能轉(zhuǎn)換為程序代碼,但是如何完成工程實現(xiàn)存在困難;④可以完成功能實現(xiàn),但是整個程序結(jié)構(gòu)混亂,程序可讀性差。

      導(dǎo)致產(chǎn)生這些問題的原因是:①基礎(chǔ)比較薄弱,“電路”和“數(shù)字電子技術(shù)”課程的知識點沒掌握好;②計算機的相關(guān)概念沒有理解,對軟件控制硬件的原理理解不清楚;還有C語言的基礎(chǔ)較薄弱;③對模塊之間的聯(lián)系缺乏整體概念,不善于從系統(tǒng)的層面來分析問題;④缺少軟件工程的思維,程序的結(jié)構(gòu)化、標準化理解不透徹,軟件代碼質(zhì)量低。

      針對上述存在的問題,在后續(xù)的教學(xué)過程中,我們打算努力做到:學(xué)生首先獨立完成案例,然后教師對每個學(xué)生的軟件進行檢測,針對學(xué)生學(xué)習(xí)過程中存在的典型問題進行分析講解,然后學(xué)生對自己編寫的程序再次進行改進,逐步完善,達到程序的標準化和規(guī)范化。

      4 結(jié)語

      定時器模塊、PWM模塊、捕獲模塊是單片機的重要組成部分,它們都與時間有關(guān)。通過案例的設(shè)計,既讓學(xué)生懂得單個模塊的使用,更懂得如何綜合應(yīng)用各個模塊完成一項工程,滿足軟件的模塊化、規(guī)范化和可移植性。實踐證明,引入工程案例和任務(wù)驅(qū)動法開展課堂和實驗實踐教學(xué),能激發(fā)學(xué)生學(xué)習(xí)興趣,培養(yǎng)學(xué)生工程素養(yǎng)。

      [1] 張江印.高校單片機教學(xué)模式的研究[J].上海:實驗室研究與探索,2011,30(9):103-106.(蔡逢煌等文)

      [2] 蔡逢煌,王武. 嵌入式類課程教學(xué)的思考和實踐[J],南京:電氣電子教學(xué)學(xué)報,2015,37(1):24-25.

      [3] 曹靜,江世明.模塊化單片機實驗平臺的設(shè)計[J].邵陽:邵陽學(xué)院學(xué)報(自然科學(xué)版),2011,08(3):23-25.

      猜你喜歡
      時間中斷按鍵
      基于有限狀態(tài)機的按鍵檢測程序設(shè)計
      電子制作(2021年3期)2021-06-16 03:14:26
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      時間消滅空間?
      新聞界(2016年12期)2016-11-08 21:36:56
      一種多方向?qū)Ч獍存I結(jié)構(gòu)設(shè)計
      電子制作(2016年1期)2016-11-07 08:43:05
      “時間”面前人人平等
      湯姆?提克威影片的審美特征
      按鍵的多種狀態(tài)檢測及消抖處理方法
      家電科技(2013年4期)2013-07-09 10:55:08
      AT89C51與中斷有關(guān)的寄存器功能表解
      FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
      微處理機(2012年4期)2012-06-13 11:32:24
      上犹县| 馆陶县| 定边县| 章丘市| 北碚区| 瑞丽市| 宜兰市| 荔波县| 当雄县| 从江县| 呈贡县| 兴仁县| 博白县| 杭州市| 西乌珠穆沁旗| 盘山县| 丰镇市| 临汾市| 琼结县| 临夏县| 平武县| 利川市| 饶河县| 清涧县| 宜城市| 满洲里市| 永寿县| 江孜县| 浙江省| 安西县| 清新县| 河津市| 湟中县| 固始县| 广西| 鱼台县| 榆中县| 桦南县| 公安县| 泾源县| 宁化县|