<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機C語言編程心得

          單片機C語言編程心得

          作者: 時間:2013-05-13 來源:網(wǎng)絡(luò) 收藏

          static unsigned char sts;//按鍵狀態(tài)變量

          static unsigned char Nowkeycode;//此時的鍵碼

          static unsigned char Prekeycode;//上一次的鍵碼

          static unsigned char Keydowntime;//矩形鍵盤按下去抖時間變量

          static unsigned char Keyuptime;//矩形鍵盤釋放去抖時間變量

          static unsigned char Onoffdowntime;//關(guān)機鍵按下去抖時間變量

          static unsigned char Onoffuptime;//關(guān)機鍵釋放去抖時間變量

          static unsigned char onoff_10ms; //判斷關(guān)機鍵中斷次數(shù)變量,累計150次大約為3S,因為前后進了兩個10ms中斷

          2、全局變量,編譯時分配為靜態(tài)存儲區(qū),可以被本文件中的各個函數(shù)引用。如果是多個文件的話,如果在一個文件中引用另外文件中的變量,在此文件中要用extern說明。不過如果一個全局變量定義為static的話,就只能在此一個文件中使用。

          四、特殊關(guān)鍵字const volatile的使用

          1、const

          const用于聲明一個只讀的變量

          const unsigned char a=1;//定義a=1,編譯器不允許修改a的值

          作用:保護不希望被修改的參數(shù)

          const unsigned char Key_code[KEYNUM]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,

          0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,

          0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,

          0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,

          0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,

          0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,

          0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,

          0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,

          0x41

          };//鍵碼

          const unsigned char Line_out[LINENUM]={0xFE,0xFD,0xFB,0xf7,0xEF,0xDF,0xBF,0x7F};//行輸出編碼

          const unsigned char Row_in[ROWNUM]={0xFE,0xFD,0xFB,0xf7,0xEF,0xDF,0xBF,0x7F};//列輸入編碼

          2、volatile

          一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

          static int i=0;

          int main(void)

          {

          ...

          while (1)

          {

          if (i)

          dosomething();

          }

          }

          /* Interrupt service routine. */

          void ISR_2(void)

          {

          i=1;

          }

          程序的本意是希望ISR_2中斷產(chǎn)生時,在main當中調(diào)用dosomething函數(shù),但是,由于編譯器判斷在main函數(shù)里面沒有修改過i,因此可能只執(zhí)行一次對從i到某寄存器的讀操作,然后每次if判斷都只使用這個寄存器里面的“i副本”,導致dosomething永遠也不會被調(diào)用。如果將將變量加上volatile修飾,則編譯器保證對此變量的讀寫操作都不會被優(yōu)化(肯定執(zhí)行)。

          一般說來,volatile用在如下的幾個地方:

          1、中斷服務(wù)程序中修改的供其它程序檢測的變量需要加volatile;

          2、多任務(wù)環(huán)境下各任務(wù)間共享的標志應(yīng)該加volatile;

          3、存儲器映射的硬件寄存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;

          c語言相關(guān)文章:c語言教程



          上一頁 1 2 下一頁

          關(guān)鍵詞: 單片機 C語言 編程心得

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();