新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR中斷運(yùn)用報(bào)警2路指示

        AVR中斷運(yùn)用報(bào)警2路指示

        作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        __flash uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //段碼
        0x7f,0x6f};
        __flash uchar tab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位選碼
        uchar flag1=0; //初始化報(bào)警標(biāo)志1為0
        uchar flag2=0; //初始化報(bào)警標(biāo)志2為0
        void delay(uint k) //延時(shí)k ms子程序
        {
        uint i,j;
        for(i=0;ifor(j=0;j<1140;j++);
        }
        void show(uint d) //顯示數(shù)碼管數(shù)值程序
        {
        uchar buf[8];
        uchar i=0;
        do
        {
        buf[i]=d%10;
        d=d/10;
        i++;
        }
        while(d);
        while(i)
        {
        PORTA=seg[buf[i-1]];
        PORTC=tab[i-1];
        delay(100);
        PORTA=0xff;
        PORTC=0xff;
        i--;
        }
        }

        void port_init() //端口初始化設(shè)置
        {
        PORTA=0xff;
        DDRA=0xff;
        PORTC=0xff;
        DDRC=0xff;
        PORTD=0xff;
        DDRD=0xff;
        PORTB=0xff;
        DDRB=0xff;
        }

        void init() //中斷寄存器設(shè)置
        {
        MCUCR=0x4a; //設(shè)置INT0 和 INT1 為下降沿觸發(fā) 開啟睡眠模式
        GICR=0xc0; //設(shè)置INT0 和 INT1 使能
        SREG=0x80; //總中斷開關(guān)使能
        }

        void main()
        {
        port_init();
        init();
        while(1)
        {
        if(flag1==1) //INT0時(shí) 數(shù)碼管顯示1
        {
        show(1);
        delay(1000);
        }
        __sleep(); //調(diào)用休眠模式
        if(flag2==1) //INT0時(shí) 數(shù)碼管顯示2
        {
        show(2);
        delay(1000);
        }
        if(flag1&flag2) //當(dāng)INT0 和INT1都按下去過(guò)后,表示2路都報(bào)警了 發(fā)光管取反報(bào)警顯示
        {
        PORTB=0xff;
        delay(100);
        PORTB=0x00;
        delay(100);
        }
        }
        }

        #pragma vector = 0x04
        __interrupt void int0()
        {
        flag1=1;
        }

        #pragma vector = 0x08
        __interrupt void int1()
        {
        flag2=1;
        }

        注: 調(diào)用休眠模式時(shí) 表示程序到此停止,只有用外部中斷才能喚醒,繼續(xù)下面程序。
        數(shù)碼管顯示函數(shù)采用工程算法。


        關(guān)鍵詞: AVR中斷運(yùn)用2路指

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 鄢陵县| 淮北市| 团风县| 周宁县| 吐鲁番市| 麻阳| 枣庄市| 曲阳县| 定远县| 德兴市| 兴山县| 岚皋县| 民勤县| 镇原县| 宾阳县| 新和县| 凉山| 同仁县| 岑溪市| 鹰潭市| 凉城县| 乌拉特前旗| 常宁市| 西藏| 中山市| 门头沟区| 舟曲县| 安徽省| 乌鲁木齐市| 泽库县| 湖州市| 井研县| 崇礼县| 昭平县| 千阳县| 历史| 宁武县| 肥乡县| 斗六市| 江源县| 赣榆县|