新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR 1-99秒1602啟停顯示

        AVR 1-99秒1602啟停顯示

        作者: 時間:2016-11-30 來源:網絡 收藏
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        uint sec=0; //秒變量
        uint cnt=0; //計數變量
        uint on=0; //啟停狀態變量
        uchar str1[16]="The time: sec"; //這里所有字符串長度一定 ,以便消除不確定顯示碼指針跑偏導致顯示異常
        uchar start[16]=" start ";
        uchar stop[16]=" stop ";
        #include "1602.h"
        void port_init()
        {
        PORTA=0xff;
        DDRA=0xff;
        PORTB=0xff;
        DDRB=0xff;
        PORTD=0xff;
        DDRD=0xff;
        }
        void init()
        {
        MCUCR=0x0a;
        GICR=0xc0;
        SREG=0x80;
        }

        void time0_init()
        {
        TCCR0=0x03;
        TIMSK=0x01;
        TCNT0=0x83;
        }
        void showtime(uint time)
        {
        displayonechar(10,0,(time/10)+48);
        displayonechar(11,0,(time%10)+48);
        }

        void main()
        {

        port_init();
        //1602設備初始化
        delay(15);
        writecmd(0x38);
        delay(5);
        writecmd(0x38);
        delay(5);
        writecmd(0x38);
        writecmd(0x80);
        writecmd(0x01);
        writecmd(0x06);
        writecmd(0x0c);
        delay(500);
        //初始化結束

        init();
        time0_init();
        while(1)
        {

        displaychar(0,0,str1);
        showtime(sec); //顯示時間值(秒) 重復覆蓋這2位 達到顯示效果
        delay(20);
        }
        }

        #pragma vector = 0x24 //定時器0 溢出 (定時秒)
        __interrupt void time0()
        {
        TCNT0=0x83;
        if(on==1) //啟動標志
        {
        cnt++;
        if(cnt==1000)
        {
        sec++;cnt=0;
        }
        if(sec>100)sec=0;
        }
        }
        #pragma vector = 0x04 //INT0中斷服務程序
        __interrupt void int0()
        {
        on=1;
        writecmd(0x01); // 清屏
        displaychar(0,1,start); //顯示啟動字符
        displaychar(0,0,str1); //顯示原來字符
        showtime(sec);

        }
        #pragma vector = 0x08 //INT1中斷服務程序
        __interrupt void int1()
        {
        on=0;
        writecmd(0x01); //清屏
        displaychar(0,1,stop); //顯示停止字符
        displaychar(0,0,str1); //顯示原來字符
        showtime(sec);

        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 门头沟区| 新闻| 彰化县| 夏河县| 富蕴县| 乐山市| 忻城县| 新乡县| 思茅市| 娄烦县| 庐江县| 綦江县| 咸阳市| 迁西县| 桃江县| 阳江市| 乐业县| 临湘市| 涡阳县| 平度市| 中阳县| 东阿县| 广州市| 南昌市| 大洼县| 得荣县| 洮南市| 邢台市| 怀化市| 崇礼县| 金溪县| 柏乡县| 辉县市| 哈巴河县| 新民市| 万宁市| 兴海县| 赣榆县| 湖北省| 凤凰县| 邓州市|