新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機程序之三,數碼管顯示0-9自檢

        單片機程序之三,數碼管顯示0-9自檢

        作者: 時間:2016-11-24 來源:網絡 收藏
        這個學習板的數碼管是用P0顯示筆劃,P2選通每個字的
        #include
        #include
        unsigned char data dis_digit;
        unsigned char code dis_code[11] =
        {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF}; //共陽極數碼管
        unsigned char data dis_buf[10];
        unsigned char data dis_index;
        unsigned char i = 0, j = 0;
        void main(void)
        {
        unsigned char i;
        P0 = 0xFF;
        P2 = 0xFF;
        TMOD = 1;
        TH0 = 0xFC;
        TL0 = 0x17;
        IE = 0x82;
        for(i=0;i<=9;i++)
        {
        dis_buf[i] = dis_code[i];
        }
        dis_digit = 0xFE;
        dis_index = 0;
        TR0 = 1;
        while(1);
        }
        void timer0() interrupt 1
        //定時器0中斷服務程序, 用于數碼管的動態掃描
        //dis_index--顯示索引, 用于標識當前顯示的數碼管和緩沖區的偏移量
        //dis_gigit--位選通道, 傳送到P2口用于選通當前數碼管的數值, 如為0xFE時選通P2.0口數碼管
        //dis_buf--顯示緩沖區基地址
        {
        TH0 = 0xFC;
        TL0 = 0x17;
        P2 = 0xFF; //先關閉所有數碼管
        P0 = dis_buf[dis_index];
        P2 = dis_digit;
        dis_digit = _crol_(dis_digit, 1); //位選通道左移, 下次中斷時選通下一位數碼管
        i++;
        //最簡單的延時之后換顯示內容
        if (i==100)
        {
        j++;
        i = 0;
        if (j == 5)
        {
        dis_index++;
        if (dis_index == 10)
        {
        dis_index = 0;
        }
        i = 0;
        j = 0;
        }
        }
        //dis_index &= 0x07; //8個數碼管全部掃描完, 重新開始
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通州市| 静海县| 库车县| 黄龙县| 苗栗市| 化隆| 申扎县| 普兰县| 深水埗区| 东阿县| 当阳市| 香格里拉县| 广汉市| 贡嘎县| 拉孜县| 布尔津县| 晋城| 三河市| 湟中县| 乐东| 广河县| 丹棱县| 从化市| 光泽县| 墨江| 嘉黎县| 宿松县| 阿拉尔市| 安岳县| 铅山县| 亚东县| 天台县| 海南省| 军事| 仪征市| 荥阳市| 云阳县| 申扎县| 台东县| 定兴县| 奉新县|