欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3566|回復(fù): 0
收起左側(cè)

鍵盤的MC9S12DG128B單片機(jī)應(yīng)用源程序

[復(fù)制鏈接]
ID:194290 發(fā)表于 2017-4-27 18:27 | 顯示全部樓層 |閱讀模式
4  鍵盤的單片機(jī)應(yīng)用
0.png
  1. //-------------------------------------------------------------------------*
  2. //工 程 名:DG128鍵盤中斷(KeyBoard)                                         *
  3. //硬件連接:                                                                *
  4. //    本實(shí)驗(yàn)程序只適合于4*4的鍵盤,使用了MC9S12DG128的PTH口作為該類鍵盤     *
  5. //    的4根行線(PTH3-0)和4根列線(PTH7-4),并且必須自行接線:PTH0-7引腳對(duì)     *
  6. //    應(yīng)鍵盤模塊的插線孔1-8腳(擴(kuò)展板上有注明1腳),MCU的串口與PC方的串口相連 *
  7. //程序描述:按下鍵盤按鍵,串口發(fā)送對(duì)應(yīng)的鍵值                                 *
  8. //說    明:PTH口引腳在擴(kuò)展板上對(duì)應(yīng)位置如下:                                *
  9. //         PTH7-LED1_CS3   PTH6-LED1_CS2    PTH5-LED1_CS1  PTH4-LED1_CS0   *
  10. //         PHT3-SPI2_SS    PHT2-SPI2_SPSCK  PTH1-SPI2_MOSI PHT0-SPI2_MISO  *
  11. //目    的:鍵盤掃描,鍵盤中斷,鍵值識(shí)別,鍵盤編碼                            *
  12. //日    期:2007.01.17                                                      *
  13. //-------《嵌入式系統(tǒng)-使用HCS12微控制器的設(shè)計(jì)與應(yīng)用》教學(xué)實(shí)例-------------*

  14. //頭文件
  15. #include  "Includes.h"    //總頭文件

  16. //主函數(shù)
  17. int main()
  18. {
  19.     DISABLE_INTERRUPTS;    //禁止總中斷
  20.     //1. 芯片初始化
  21.     MCUInit();
  22.     //2. 模塊初始化
  23.     SCIInit();             //(1) 串行口初始化
  24.     KB_Init();             //(2) 鍵盤初始化
  25.    
  26.     DDRA = 0xff;
  27.     PORTA = 255;
  28.    
  29.     //3. 開放各模塊中斷
  30.     EnableIOint;           //KB_P.7-4輸入引腳允許中斷
  31.     //4. 開放總中斷
  32.     ENABLE_INTERRUPTS;
  33.     //主循環(huán)
  34.     while (1)
  35.     {
  36.     }
  37. }
復(fù)制代碼

  1. //[isr.c]中斷處理函數(shù)------------------------------------------------------*
  2. //功能:                                                                    *
  3. //    (1)定義中斷處理函數(shù)                                                  *
  4. //-------------------------------------------------------------------------*

  5. //頭文件
  6. #include "isr.h"         //中斷處理函數(shù)頭文件

  7. #pragma CODE_SEG __NEAR_SEG NON_BANKED

  8. char Calculate(char Str, int *Value);



  9. //ISR_KBI:鍵盤中斷處理函數(shù)-------------------------------------------------*
  10. //功  能:獲取鍵盤的鍵值和定義值并將它們通過串口發(fā)送出去                    *
  11. //參  數(shù):無                                                                *
  12. //返  回:無                                                                *
  13. //-------------------------------------------------------------------------*
  14. __interrupt 25 void ISR_KBI(void)
  15. {
  16.     INT8U KB_valueN,KB_DefValue;
  17.     INT32U i;
  18.    
  19.     DISABLE_INTERRUPTS;                 //關(guān)總中斷
  20.     DISABLEIOint;                       //KB_P.7-4輸入引腳禁止中斷   

  21.     for (i=0 ; i<20000; i++);           //延遲

  22.     KB_valueN = KB_ScanN(10);           //掃描鍵值,存于KB_valueN中
  23.     if (0xFF == KB_valueN)
  24.         goto KB_Exit;
  25.     //KB_DefValue = KB_Def(KB_valueN);    //鍵值轉(zhuǎn)化為定義值并發(fā)送
  26.     SCISend1(KB_valueN);                //發(fā)送鍵值
  27.     PORTA = ~KB_valueN;
  28.     //SCISend1(KB_DefValue);

  29.     for (i=0 ; i<25000; i++);           //延遲

  30. KB_Exit:
  31.     KB_Init();                                            //初始化鍵盤
  32.     EnableIOint;                        //KB_P.7-4輸入引腳允許中斷
  33.     ENABLE_INTERRUPTS;                  //開總中斷
  34. }

  35. //自定義函數(shù)---------------------------------------------------------------*
  36. //功  能:計(jì)算器                                                            *
  37. //參  數(shù):無                                                                *
  38. //返  回:無                                                                *
  39. //-------------------------------------------------------------------------*
  40. int Op[2] = {0,0};
  41. int p = 0;
  42. char Sign = 0;

  43. char Fun()
  44. {  
  45.         switch (Sign)
  46.         {
  47.         case '+':
  48.                 Op[0] = Op[0] + Op[1];
  49.                 return 1;
  50.         case '-':
  51.                 Op[0] = Op[0] - Op[1];
  52.                 return 1;
  53.         default:
  54.                 return 0;
  55.         }
  56. }

  57. char Calculate(char Str, int *Value)
  58. {
  59.   
  60.         switch(Str)
  61.         {
  62.         case '1':
  63.         case '2':
  64.         case '3':
  65.         case '4':
  66.         case '5':
  67.         case '6':
  68.         case '7':
  69.         case '8':
  70.         case '9':
  71.         case '0':
  72.                 Op[p] = Op[p] * 10 + (Str - '0');
  73.                 return 0;
  74.         case '+':
  75.         case '-':
  76.                 p++;
  77.                 if (p > 1)
  78.                 {
  79.                         p = 1;
  80.                         Fun();
  81.                         Op[1] = 0;
  82.                         Sign = 0;
  83.                 }
  84.                 Sign = Str;
  85.                 return 0;
  86.         case '=':
  87.                 if(Fun())
  88.                 {
  89.                         *Value = Op[0];
  90.                         return 1;
  91.                 }
  92.                 else
  93.                         return 0;
  94.         }
  95. }


復(fù)制代碼



//--------------------------------------------------------------------------
//  Readme.txt
//--------------------------------------------------------------------------
   通過閱讀這個(gè)文檔,你可以讓芯片型號(hào)為MC9S12DG128B的CodeWarrior代碼能夠
盡快的啟動(dòng)和運(yùn)行起來。

   選擇的CPU和目標(biāo)連接方式是預(yù)先設(shè)置的,但是可以方便地對(duì)其修改。
   
   下面的樣例代碼所使用的語言是由你設(shè)置的,這里設(shè)置的是:
   C語言
   
   通過向?qū)В氵x擇的CodeWarrior目標(biāo)的連接方式是:
   TBDML(這種連接方式允許通過TBDML BDM連線進(jìn)行調(diào)試)

    外加的連接可以在模擬器/調(diào)試器中進(jìn)行選擇。(從菜單項(xiàng)Component>Set
Target進(jìn)行選擇)
   
//-------------------------------------------------------------------------
//  啟動(dòng)
//-------------------------------------------------------------------------
   選擇菜單項(xiàng)Project中Debug或者單擊鍵盤F5來模擬仿真或者調(diào)試工程。Code
Warrior將同時(shí)打開模擬器/調(diào)試器。

   啟動(dòng)應(yīng)用程序:通過再次按快捷鍵F5(或者通過菜單項(xiàng)Run->Start/Continue)來實(shí)現(xiàn)
   終止應(yīng)用程序:通過按快捷鍵F6(或者通過菜單項(xiàng)Run->Halt)來實(shí)現(xiàn)。
   加載額外的組件:通過調(diào)試菜單中的Component->Open來實(shí)現(xiàn)。

//-------------------------------------------------------------------------
//  工程文件結(jié)構(gòu)
//-------------------------------------------------------------------------
   一個(gè)工程包括下面的文件/文件夾:
   
   -readme.txt:說明文件
   -Sourses文件夾:該文件夾中包含應(yīng)用程序的源代碼
   -Startup Code文件夾: C/C++啟動(dòng)代碼(作用:初始化堆棧指針和全局變量)。如果
你只想進(jìn)行堆棧指針的初始化,可以在編譯器的命令行中添加命令-D__ONLY_INIT_SP
   -Prm文件夾:
     -burner.bbl文件產(chǎn)生S記錄文件
     -.prm文件是連接器文件
   -Linker Map文件夾:通過連接器產(chǎn)生.map文件
   -Libraries文件夾::需要的庫文件(包括ANSI文件,派生的頭文件/執(zhí)行文件)
   -調(diào)試器工程的文件夾:包含一個(gè).ini文件作為每個(gè)連接的調(diào)試器
   -調(diào)試命令文件夾:包含各類調(diào)試命令

//-------------------------------------------------------------------------
//  加入你自己的代碼
//-------------------------------------------------------------------------
   一旦所有預(yù)期的準(zhǔn)備工作都完成了,你就可以開始在工程中添加你自己的代碼。
牢記我們所提供的方法以使CodeWarrior代碼能夠盡快的啟動(dòng)和運(yùn)行起來。當(dāng)然你也
可以通過別的方式來處理中斷和建立自己的連接命令文件。同時(shí)你也可以很容易的修
改工程所提供的源文件。

//  模擬器/調(diào)試器:附加的組件
//-------------------------------------------------------------------------
   在模擬器/調(diào)試器中,通過菜單項(xiàng)中的Component->Open可以加載附加的組件。

//-------------------------------------------------------------------------
//  附加的文檔
//-------------------------------------------------------------------------
   閱讀提供的在線文檔。
   可以使用CodeWarrior IDE的菜單Help->CodeWarrior Help幫助文檔
   
//------------------------------------------------------------------------
//  聯(lián)系Metrowerks公司
//------------------------------------------------------------------------
   如果有漏洞的報(bào)告,技術(shù)問題和建議,請(qǐng)?zhí)顚懸呀?jīng)安裝在Release_Notes文件夾下
面的表格,并發(fā)送到郵箱:cw_support@freescale.com
//--------------------------------------------------------------------------
//  Tips.txt
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//  修改派生類
//--------------------------------------------------------------------------
   對(duì)于已經(jīng)存在的派生類進(jìn)行修改,你需要注意以下幾點(diǎn):

   1.你需要對(duì)CodeWarrior工程的設(shè)置進(jìn)行修改:在"Assembler for HC12"和
"Compiler for HC12"控制面板中確定新的CPU將被使用在"Command Line Arguments":
    - HC12:   -CpuHC12
      - HCS12:  -CpuHCS12
    - HCS12X: -CpuHCS12X

   2.派生類的頭文件和源文件被放置在如下的目錄中:
    - {CodeWarrior}lib\hc12c\include (derivative header files)
      - {CodeWarrior}lib\hc12c\src (derivative source files)
   同時(shí)將新的派生類頭文件和源文件從目錄中加載到類庫中。
   提示: 在文件所在處打開"Windows Explorer":
         找到"Libraries"工程中的派生類頭文件和源文件,通過右擊鼠標(biāo)并選中
         "Open in Windows Explorer"。

   3.通過工程文件的合適的向?qū)?你也可以對(duì)派生類的頭文件和源文件進(jìn)行移去。從
類庫中移去派生類的頭文件和源文件的方法如下:
         找到"Libraries"工程中的派生類頭文件和源文件,通過右擊鼠標(biāo)并選中
    "Remove"。
   
   4.你需要對(duì)主函數(shù)的源文件進(jìn)行修改。該文件可以在"Sources"文件組中找到。打開
該文件,并對(duì)其包含的頭文件進(jìn)行重命名。如果你所編輯的是一個(gè)C/C++文件時(shí),你還需
要在編譯指令"LINK_INFO DERIVATIVE"中更改一個(gè)新的派生類。這樣,編譯指令就會(huì)告
訴模擬器對(duì)哪個(gè)派生類進(jìn)行模擬。當(dāng)然你也可以刪除該編譯指令,在HI-WAVE調(diào)試器中重
新建立一個(gè)新的派生類。(請(qǐng)看下一點(diǎn))
   
   5.同時(shí)還需要對(duì)PRM文件進(jìn)行修改。PRM文件在目錄的如下位置:
     - {CodeWarrior}lib\hc12c\prm
     你需要打開新的PRM文件,并且將其中的內(nèi)容拷貝到你現(xiàn)在所使用的PRM文件中去。
如果你沒有一個(gè)堆棧的內(nèi)存模式,你只能修改PRM文件中的內(nèi)容。 你可能要看一下已有
的PRM文件的內(nèi)容。

   6.當(dāng)編輯和連接成功后,你就能開始使用HI-WAVE調(diào)試器。
     你需要為一個(gè)新的派生類啟動(dòng)調(diào)試器。
     -對(duì)整個(gè)芯片的模擬/模擬器連接:
         在菜單選項(xiàng)中選擇"Set Derivative..."對(duì)話框,然后在打開的對(duì)話框中你可
     以通過路徑"Simulator"->"Set Derivative..."進(jìn)行操作。同樣的,在打開的對(duì)話
     框中你可以選擇新的派生類,文件名可以被使用為編譯指令的"LINK_INFO
     DERIVATIVE"。
   
     -基于P&E Multilink/Cyclone Pro上的連接:
          在菜單選項(xiàng)中打開"Set Derivative..."對(duì)話框,并選擇路徑為"Multilink-
     CyclonePro"->"Set Derivative..."。在打開的對(duì)話框中選擇新的派生類。

     -基于SofTec HCS12上的連接:
          在菜單選項(xiàng)中打開"MCU Configuration"對(duì)話框,并選擇路徑為"inDART-
     HCS12"->"MCU Configuration"在打開的對(duì)話框中選擇新的派生類。
     
     -基于HCS12系列的目標(biāo)監(jiān)視器:
          派生類會(huì)自動(dòng)的連接到硬件上。但是,調(diào)試器可能仍然顯示一部分,那里對(duì)于
     來自同一類型的芯片的選擇很少能被采取。

   7.現(xiàn)在你可以在你的工程中添加一個(gè)新的派生類。

//--------------------------------------------------------------------------
//  打開專Processor Expert
//--------------------------------------------------------------------------         
   在工程創(chuàng)建時(shí)如果你還沒有決定使用Processor Expert,你也稍后去使用。
但是你必須考慮如下幾點(diǎn):
   1.Processor Expert支持C和C++工程,但它不支持完全的匯編工程或者是
嵌套的匯編工程。

   2.Processor Expert并不支持所有的派生類。

   3.為了打開Processor Expert使用菜單項(xiàng)"Processor Expert->Enable Processor
     Expert for 文件名"。

   4.有一個(gè)對(duì)話框來詢問你是否想要打開工程的Processor Expert:點(diǎn)擊"Yes"

   5.然后你要為你的工程選擇一塊合適的CPU。選擇的CPU的方法為:在菜單Processor
Expert->View->Bean Selector,然后在CPU樹中雙擊你想要的CPU,那這塊CPU將加入到
你的工程中。

   6.在Processor Expert產(chǎn)生自己的main函數(shù)或者源文件的時(shí)候,你必須移除由向?qū)?br /> 產(chǎn)生的這些文件。移除Sources文件夾下的主文件的方法是:在工程文件夾"Sources"
中選擇主文件右擊鼠標(biāo)選擇"Remove"。

   7.同樣的應(yīng)用也用在派生類頭文件中。由于Processor Expert維持自己的版本,你
需要在CodeWarrior工程中移去這些頭文件:在"Libs"工程文件夾中找到.h和.c文件,
選中.h和.c文件,單擊鼠標(biāo)右鍵,選擇"Delete"將文件刪除。

   8.Processor Expert維持自己的連接器文件.prm。你需要在工程中移去由向?qū)?br /> 建立的連接器文件Prm",單擊鼠標(biāo)右鍵選擇"Remove"將這些文件刪除。

   9.現(xiàn)在你可以按通常的方式建立或編譯你的工程(菜單Project->Make)。

//--------------------------------------------------------------------------
//  改變存儲(chǔ)器模式
//--------------------------------------------------------------------------
   如果你想對(duì)已經(jīng)存在的存儲(chǔ)器模式進(jìn)行改變,你可以考慮以下幾點(diǎn):
   1.存儲(chǔ)器模式只是用來控制默認(rèn)值。在任何存儲(chǔ)器模式下編寫各種應(yīng)用程序是
可以的,但是存儲(chǔ)器模式的選擇錯(cuò)誤肯定會(huì)造成更多的代碼的修改。
   
   2.大的存儲(chǔ)器模式會(huì)比擴(kuò)展的存儲(chǔ)器模式和小的存儲(chǔ)器模式產(chǎn)生相對(duì)多的和使運(yùn)行
速度下降的代碼。但是如果你在別的模式下不能別寫出你所要的功能,你可以首選這種
模式。
   擴(kuò)展的存儲(chǔ)器模式和小的存儲(chǔ)器模式的區(qū)別不是很有意義。
  
   3.你需要修改CodeWarrior工程的設(shè)置:在"Assembler for HC12"和"Compiler for
HC12"面板上要確保新的存儲(chǔ)器模式能在"Command Line Arguments"上使用:
   - Small memory model:  -ms
   - Banked memory model: -mb
   - Large memory model:  -ml

   4.你需要對(duì)標(biāo)準(zhǔn)庫文件進(jìn)行修改。庫文件所在位置為:
   - {CodeWarrior}lib\hc12c\lib (HC12)
   - {CodeWarrior}lib\xgatec\lib (optional for a XGATE project)

   5.你需要將新的庫文件從目錄中拖到"Libraries"工程文件夾中,至于命名規(guī)則請(qǐng)查
找readme.txt文件:
   - {CodeWarrior}lib\hc12c\readme.txt (HC12)
  - {CodeWarrior}lib\xgatec\readme.txt (可以選擇作為一個(gè)XGATE工程)

   6.你現(xiàn)在可以從工程中移除由向?qū)Мa(chǎn)生的舊的庫文件。從"Libraries"中刪除舊的
庫文件的方法如下:在"Libraries"工程文件夾中選擇庫文件右擊鼠標(biāo)并選擇"Remove"。
  
   7.在prm文件中也要修改其存儲(chǔ)器模式。
     在每個(gè)存儲(chǔ)模式中都包含有如何對(duì)DEFAULT_ROM, DEFAULT_RAM, NON_PAGED和其他
的默認(rèn)值進(jìn)行分配的方法。
     - DEFAULT_ROM:在小的存儲(chǔ)模式中,必須放在未分頁的區(qū)域,在擴(kuò)展的存儲(chǔ)模式和
大的存儲(chǔ)模式可以放到任何一頁。
     - DEFAULT_RAM:在小的存儲(chǔ)模式和擴(kuò)展的存儲(chǔ)模式中,必須未分頁的RAM區(qū)域。
     - STARTUP,STRINGS,ROM_VAR,COPY。在小的存儲(chǔ)模式和擴(kuò)展的存儲(chǔ)模式中,它們大
多數(shù)放在未擴(kuò)展的Flahs區(qū)域中。COPY必須放在最后面。
     - 查看所有剩余的部分是如何使用的,如果不能確定的話,分配為未擴(kuò)展的。

   8. 現(xiàn)在你可以在新的存儲(chǔ)器模式下建立工程了。

//--------------------------------------------------------------------------
//  添加一個(gè)新的連接
//--------------------------------------------------------------------------
   如果你在創(chuàng)建一個(gè)工程時(shí)忘了添加一個(gè)指定的連接方式,你可以在稍后添加。
你可以考慮以下幾點(diǎn):
   
   1.在你的工程中選擇"Target"標(biāo)記,并在菜單中選擇"Project"->"Create
Target..."。在對(duì)話框中添加新的連接名稱,并且選擇"Clone existing target",你可
以選擇任何存在的target。

   2.選擇一個(gè)新創(chuàng)建的target。我們需要準(zhǔn)備好調(diào)試器。在菜單中選擇"Project"->
"Set Default Target"來選擇一個(gè)已經(jīng)創(chuàng)建的target。

   3. 如果你要為自己特殊的連接建立一個(gè)不同的存儲(chǔ)映射(例如:"Serial Monitor"),
你需要將修改過的prm文件添加到工程中去。同時(shí)確保新的.prm文件在所選的target中。
確保新的prm文件在工程窗口中的target欄中已經(jīng)被指向。最后確保以前存在的prm文件
沒有被指向。

   4.調(diào)試器的配置文件(.ini)被定位在"{Project}"目錄下。你需要拷貝一個(gè)已存在的
的".ini"文件到相同的路徑。這個(gè)配置文件的命名為該連接的名稱。現(xiàn)在你就可以將
.ini文件拖到"Debugger Project File"中去了。

   5.你還需要在"CodeWarrior"的"Arguments"選項(xiàng)中選擇"Build Extras"。將".ini"
文件名字用新文件名字去替換。
    可選項(xiàng):在選擇項(xiàng)中將"-instance=x"替換成為"-instance=y",此時(shí)y就是新的連接。
該實(shí)例選擇的目的是為了確認(rèn)調(diào)試器只對(duì)這個(gè)已確定的連接進(jìn)行調(diào)試。

   6.我們現(xiàn)在可以啟動(dòng)調(diào)試器。你可以按照如下的方法開始啟動(dòng)。
    在調(diào)試器對(duì)話框中通過"Component"->"Set Connection..."選擇所需的連接方式。
   
    -對(duì)于整個(gè)芯片的模擬/模擬器連接:
     選擇處理器為HC12和連接方式為整芯片模擬

    -對(duì)于P&E Multilink/Cyclone Pro連接:
     選擇處理器為HC12和連接方式為P&E Multilink/Cyclone Pro

    -對(duì)于SofTec HCS12連接:
     選擇處理器為HC12和連接方式為SofTec HCS12

    -對(duì)于HCS12連續(xù)監(jiān)控連接:
     選擇處理器為HC12和連接方式為HCS12連續(xù)監(jiān)控

   7.可選項(xiàng):如果你需要"Command Files",你可以在"{Project}cmd"目錄下創(chuàng)建一個(gè)空
文件。在調(diào)試器中,你可以通過連接菜單中的"Command Files..."對(duì)話框來修改調(diào)試器。

   8.你現(xiàn)在已經(jīng)在工程中建立了一個(gè)新的連接。

//--------------------------------------------------------------------------
//  聯(lián)系Metrowerks公司
//--------------------------------------------------------------------------
   如果有漏洞的報(bào)告,技術(shù)問題和建議,請(qǐng)?zhí)顚懸呀?jīng)安裝在Release_Notes文件夾下
面的表格,并發(fā)送到郵箱:cw_support@freescale.com

下載:
C04_KeyBoard.rar (261.29 KB, 下載次數(shù): 11)


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表