新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機C語言編程心得

        單片機C語言編程心得

        作者: 時間:2013-05-13 來源:網絡 收藏

        static unsigned char sts;//按鍵狀態變量

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

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

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

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

        static unsigned char Onoffdowntime;//關機鍵按下去抖時間變量

        static unsigned char Onoffuptime;//關機鍵釋放去抖時間變量

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

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

        四、特殊關鍵字const volatile的使用

        1、const

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

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

        作用:保護不希望被修改的參數

        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的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

        static int i=0;

        int main(void)

        {

        ...

        while (1)

        {

        if (i)

        dosomething();

        }

        }

        /* Interrupt service routine. */

        void ISR_2(void)

        {

        i=1;

        }

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

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

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

        2、多任務環境下各任務間共享的標志應該加volatile;

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

        c語言相關文章:c語言教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 丰城市| 西乌| 鹿泉市| 尼勒克县| 绥棱县| 宜章县| 曲水县| 观塘区| 施秉县| 贵港市| 泰兴市| 盘山县| 宜兰县| 平阳县| 晋城| 婺源县| 江源县| 小金县| 长子县| 阜南县| 丽江市| 桃园市| 长垣县| 五指山市| 阿克陶县| 龙江县| 额尔古纳市| 乐都县| 甘谷县| 东城区| 历史| 台北县| 略阳县| 澄城县| 清镇市| 武夷山市| 丰镇市| 阿合奇县| 大足县| 明水县| 且末县|