久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3431|回復: 0
收起左側

鍵盤的MC9S12DG128B單片機應用源程序

[復制鏈接]
ID:194290 發表于 2017-4-27 18:27 | 顯示全部樓層 |閱讀模式
4  鍵盤的單片機應用
0.png
  1. //-------------------------------------------------------------------------*
  2. //工 程 名:DG128鍵盤中斷(KeyBoard)                                         *
  3. //硬件連接:                                                                *
  4. //    本實驗程序只適合于4*4的鍵盤,使用了MC9S12DG128的PTH口作為該類鍵盤     *
  5. //    的4根行線(PTH3-0)和4根列線(PTH7-4),并且必須自行接線:PTH0-7引腳對     *
  6. //    應鍵盤模塊的插線孔1-8腳(擴展板上有注明1腳),MCU的串口與PC方的串口相連 *
  7. //程序描述:按下鍵盤按鍵,串口發送對應的鍵值                                 *
  8. //說    明:PTH口引腳在擴展板上對應位置如下:                                *
  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. //目    的:鍵盤掃描,鍵盤中斷,鍵值識別,鍵盤編碼                            *
  12. //日    期:2007.01.17                                                      *
  13. //-------《嵌入式系統-使用HCS12微控制器的設計與應用》教學實例-------------*

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

  16. //主函數
  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.     //主循環
  34.     while (1)
  35.     {
  36.     }
  37. }
復制代碼

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

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

  7. #pragma CODE_SEG __NEAR_SEG NON_BANKED

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



  9. //ISR_KBI:鍵盤中斷處理函數-------------------------------------------------*
  10. //功  能:獲取鍵盤的鍵值和定義值并將它們通過串口發送出去                    *
  11. //參  數:無                                                                *
  12. //返  回:無                                                                *
  13. //-------------------------------------------------------------------------*
  14. __interrupt 25 void ISR_KBI(void)
  15. {
  16.     INT8U KB_valueN,KB_DefValue;
  17.     INT32U i;
  18.    
  19.     DISABLE_INTERRUPTS;                 //關總中斷
  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);    //鍵值轉化為定義值并發送
  26.     SCISend1(KB_valueN);                //發送鍵值
  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. //自定義函數---------------------------------------------------------------*
  36. //功  能:計算器                                                            *
  37. //參  數:無                                                                *
  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. }


復制代碼



//--------------------------------------------------------------------------
//  Readme.txt
//--------------------------------------------------------------------------
   通過閱讀這個文檔,你可以讓芯片型號為MC9S12DG128B的CodeWarrior代碼能夠
盡快的啟動和運行起來。

   選擇的CPU和目標連接方式是預先設置的,但是可以方便地對其修改。
   
   下面的樣例代碼所使用的語言是由你設置的,這里設置的是:
   C語言
   
   通過向導,你選擇的CodeWarrior目標的連接方式是:
   TBDML(這種連接方式允許通過TBDML BDM連線進行調試)

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

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

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

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

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

//-------------------------------------------------------------------------
//  附加的文檔
//-------------------------------------------------------------------------
   閱讀提供的在線文檔。
   可以使用CodeWarrior IDE的菜單Help->CodeWarrior Help幫助文檔
   
//------------------------------------------------------------------------
//  聯系Metrowerks公司
//------------------------------------------------------------------------
   如果有漏洞的報告,技術問題和建議,請填寫已經安裝在Release_Notes文件夾下
面的表格,并發送到郵箱:cw_support@freescale.com
//--------------------------------------------------------------------------
//  Tips.txt
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//  修改派生類
//--------------------------------------------------------------------------
   對于已經存在的派生類進行修改,你需要注意以下幾點:

   1.你需要對CodeWarrior工程的設置進行修改:在"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)
   同時將新的派生類頭文件和源文件從目錄中加載到類庫中。
   提示: 在文件所在處打開"Windows Explorer":
         找到"Libraries"工程中的派生類頭文件和源文件,通過右擊鼠標并選中
         "Open in Windows Explorer"。

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

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

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

   7.現在你可以在你的工程中添加一個新的派生類。

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

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

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

   4.有一個對話框來詢問你是否想要打開工程的Processor Expert:點擊"Yes"

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

   6.在Processor Expert產生自己的main函數或者源文件的時候,你必須移除由向導
產生的這些文件。移除Sources文件夾下的主文件的方法是:在工程文件夾"Sources"
中選擇主文件右擊鼠標選擇"Remove"。

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

   8.Processor Expert維持自己的連接器文件.prm。你需要在工程中移去由向導所
建立的連接器文件Prm",單擊鼠標右鍵選擇"Remove"將這些文件刪除。

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

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

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

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

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

   8. 現在你可以在新的存儲器模式下建立工程了。

//--------------------------------------------------------------------------
//  添加一個新的連接
//--------------------------------------------------------------------------
   如果你在創建一個工程時忘了添加一個指定的連接方式,你可以在稍后添加。
你可以考慮以下幾點:
   
   1.在你的工程中選擇"Target"標記,并在菜單中選擇"Project"->"Create
Target..."。在對話框中添加新的連接名稱,并且選擇"Clone existing target",你可
以選擇任何存在的target。

   2.選擇一個新創建的target。我們需要準備好調試器。在菜單中選擇"Project"->
"Set Default Target"來選擇一個已經創建的target。

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

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

   5.你還需要在"CodeWarrior"的"Arguments"選項中選擇"Build Extras"。將".ini"
文件名字用新文件名字去替換。
    可選項:在選擇項中將"-instance=x"替換成為"-instance=y",此時y就是新的連接。
該實例選擇的目的是為了確認調試器只對這個已確定的連接進行調試。

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

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

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

    -對于HCS12連續監控連接:
     選擇處理器為HC12和連接方式為HCS12連續監控

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

   8.你現在已經在工程中建立了一個新的連接。

//--------------------------------------------------------------------------
//  聯系Metrowerks公司
//--------------------------------------------------------------------------
   如果有漏洞的報告,技術問題和建議,請填寫已經安裝在Release_Notes文件夾下
面的表格,并發送到郵箱:cw_support@freescale.com

下載:
C04_KeyBoard.rar (261.29 KB, 下載次數: 11)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩性生活网 | 国产精品福利在线观看 | 国产在线中文字幕 | 久久不卡日韩美女 | h视频在线免费观看 | 黄网免费看 | 国产成人在线视频播放 | 在线观看免费av网 | 久久久久久久一区二区三区 | 国产午夜精品一区二区三区 | 欧美午夜一区二区三区免费大片 | 久久亚洲综合 | 中文字幕一区二区三区精彩视频 | 国产精品高潮呻吟久久 | 成人一区精品 | 日韩1区2区 | 一级做受毛片免费大片 | 国产精品自拍av | 亚洲精品电影 | 91精品中文字幕一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 成人欧美一区二区三区在线播放 | 久久久久久免费看 | 永久www成人看片 | 国产一区二区影院 | 亚洲日韩中文字幕一区 | 日韩一区二区三区在线视频 | 99精品在线免费观看 | av网站免费在线观看 | xxx.在线观看 | 521av网站| 久久九七| 七七婷婷婷婷精品国产 | 97日韩精品 | 成人一区二区三区视频 | 在线观看毛片网站 | a级在线观看 | 99久久精品国产一区二区三区 | 又黑又粗又长的欧美一区 | 成人午夜激情 | 亚洲视频在线观看一区二区三区 |