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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3757|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MC9S12XS128并口12864液晶顯示程序,包含按鍵中斷,按鍵可翻動(dòng)的程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:242450 發(fā)表于 2017-10-24 15:19 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序在12864液晶上顯示一首詞,按鍵可翻動(dòng)詞句。

單片機(jī)源程序如下:
  1. /*---------------------------------------------------------*/
  2. /************************************************************
  3. 飛翔科技MC9S12XS128汽車電子開(kāi)發(fā)板
  4. ************************************************************/
  5. /*---------------------------------------------------------*/
  6. #include <hidef.h>      /* common defines and macros */
  7. #include "derivative.h"      /* derivative-specific definitions */
  8. #include "LCD.h"      

  9. #define LEDCPU PORTK_PK4
  10. #define LEDCPU_dir DDRK_DDRK4

  11. #define KEY1 PTIH_PTIH3
  12. #define KEY2 PTIH_PTIH2
  13. #define KEY1_dir DDRH_DDRH3
  14. #define KEY2_dir DDRH_DDRH2

  15. #define  BUS_CLOCK                   32000000           //總線頻率
  16. #define  OSC_CLOCK                   16000000           //晶振頻率

  17. char *poem[11] = {
  18. "長(zhǎng)征",
  19. "毛澤東",
  20. "紅軍不怕遠(yuǎn)征難,",
  21. "萬(wàn)水千山只等閑,",
  22. "五嶺逶迤騰細(xì)浪,",
  23. "烏蒙磅礴走泥丸。",
  24. "金沙水拍云崖暖,",
  25. "大渡橋橫鐵索寒,",
  26. "更喜岷山千里雪,",
  27. "三軍過(guò)后盡開(kāi)顏!",
  28. "",
  29. } ;

  30. unsigned char single = 0;    //液晶翻頁(yè)的標(biāo)志符


  31. /*************************************************************/
  32. /*                      初始化鎖相環(huán)                         */
  33. /*************************************************************/
  34. void INIT_PLL(void)
  35. {
  36.     CLKSEL &= 0x7f;       //set OSCCLK as sysclk
  37.     PLLCTL &= 0x8F;       //Disable PLL circuit
  38.     CRGINT &= 0xDF;
  39.    
  40.     #if(BUS_CLOCK == 40000000)
  41.       SYNR = 0x44;
  42.     #elif(BUS_CLOCK == 32000000)
  43.       SYNR = 0x43;     
  44.     #elif(BUS_CLOCK == 24000000)
  45.       SYNR = 0x42;
  46.     #endif

  47.     REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
  48.     PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
  49.     asm NOP;
  50.     asm NOP;
  51.     while(!(CRGFLG&0x08)); //PLLCLK is Locked already
  52.     CLKSEL |= 0x80;        //set PLLCLK as sysclk
  53. }

  54. /************************************************************/
  55. /*                    初始化ECT模塊                         */
  56. /************************************************************/
  57. void initialize_ect(void){
  58.   TSCR1_TFFCA = 1;  // 定時(shí)器標(biāo)志位快速清除
  59.   TSCR1_TEN = 1;    // 定時(shí)器使能位. 1=允許定時(shí)器正常工作; 0=使主定時(shí)器不起作用(包括計(jì)數(shù)器)
  60.   TIOS  = 0xff;      //指定所有通道為輸出比較方式
  61.   TCTL1 = 0x00;            // 后四個(gè)通道設(shè)置為定時(shí)器與輸出引腳斷開(kāi)
  62.   TCTL2 = 0x00;     // 前四個(gè)通道設(shè)置為定時(shí)器與輸出引腳斷開(kāi)
  63.   TIE   = 0x00;     // 禁止所有通道定時(shí)中斷
  64.   TSCR2 = 0x07;            // 預(yù)分頻系數(shù)pr2-pr0:111,,時(shí)鐘周期為4us,
  65.   TFLG1 = 0xff;            // 清除各IC/OC中斷標(biāo)志位
  66.   TFLG2 = 0xff;     // 清除自由定時(shí)器中斷標(biāo)志位
  67. }

  68. /*************************************************************/
  69. /*                       初始化按鍵                          */
  70. /*************************************************************/
  71. void init_key(void)
  72. {
  73.      KEY1_dir =0;       //設(shè)置為輸入
  74.      KEY2_dir=0;
  75.      PPSH = 0x00;                      //極性選擇寄存器,選擇下降沿;
  76.      PIFH = 0x0C;                                        //對(duì)PIFH的每一位寫1來(lái)清除標(biāo)志位;
  77.      PIEH = 0x0C;                      //中斷使能寄存器;
  78. }


  79. /*************************************************************/
  80. /*                    按鍵中斷函數(shù)                           */
  81. /*************************************************************/
  82. #pragma CODE_SEG __NEAR_SEG NON_BANKED
  83. interrupt void PTH_inter(void)
  84. {
  85.    if(PIFH != 0)     //判斷中斷標(biāo)志
  86.    {
  87.       PIFH = 0xff;     //清除中斷標(biāo)志
  88.       if(KEY2 == 0)
  89.       {
  90.          delay1ms(5);
  91.          if(KEY2 == 0)
  92.          {
  93.            if(single == 0)
  94.             single = 10;
  95.            else single-=1;
  96.            
  97.          }
  98.       }


  99.       if(KEY1 == 0)
  100.       {
  101.          delay1ms(5);
  102.          if(KEY1 == 0)
  103.          {
  104.            if(single == 10)
  105.             single = 0;
  106.            else single+=1;

  107.          }
  108.       
  109.       }
  110.       
  111.      lcd_clear();
  112.      if(single == 0) {
  113.        lcd_string(0,2,poem[0]);
  114.        lcd_string(1,3,poem[1]);
  115.        lcd_string(2,0,poem[2]);
  116.        lcd_string(3,0,poem[3]);
  117.      }
  118.      else if(single == 1) {
  119.        lcd_string(0,3,poem[1]);
  120.        lcd_string(1,0,poem[2]);
  121.        lcd_string(2,0,poem[3]);
  122.        lcd_string(3,0,poem[4]);
  123.      }
  124.      else if(single == 2) {
  125.        lcd_string(0,0,poem[2]);
  126.        lcd_string(1,0,poem[3]);
  127.        lcd_string(2,0,poem[4]);
  128.        lcd_string(3,0,poem[5]);
  129.      }
  130.      else if(single == 8) {
  131.        lcd_string(0,0,poem[8]);
  132.        lcd_string(1,0,poem[9]);
  133.        lcd_string(2,0,poem[10]);
  134.        lcd_string(3,2,poem[0]);
  135.      }
  136.      else if(single == 9) {
  137.        lcd_string(0,0,poem[9]);
  138.        lcd_string(1,0,poem[10]);
  139.        lcd_string(2,2,poem[0]);
  140.        lcd_string(3,3,poem[1]);
  141.      }
  142.      else if(single == 10) {
  143.        lcd_string(0,0,poem[10]);
  144.        lcd_string(1,2,poem[0]);
  145.        lcd_string(2,3,poem[1]);
  146.        lcd_string(3,0,poem[2]);
  147.      }
  148.      else {
  149.        lcd_string(0,0,poem[single]);
  150.        lcd_string(1,0,poem[single + 1]);
  151.        lcd_string(2,0,poem[single + 2]);
  152.        lcd_string(3,0,poem[single + 3]);
  153.      }
  154.    }
  155. }
  156. #pragma CODE_SEG DEFAULT


  157. /*************************************************************/
  158. /*                         主函數(shù)                            */
  159. ……………………

  160. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整代碼下載:
20并口液晶.rar (238.55 KB, 下載次數(shù): 28)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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