新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 6. 報警產生器

        6. 報警產生器

        作者: 時間:2016-11-18 來源:網絡 收藏
        1.實驗任務
        用P1.0輸出1KHz和500Hz的音頻信號驅動揚聲器,作報警信號,要求1KHz信號響100ms,500Hz信號響200ms,交替進行,P1.7接一開關進行控制,當開關合上響報警信號,當開關斷開告警信號停止,編出程序。
        2.電路原理

        圖4.6.1
        3.系統板上硬件連線
        (1.把“單片機系統”區域中的P1.0端口用導線連接到“音頻放大模塊”區域中的SPKIN端口上;
        (2.在“音頻放大模塊”區域中的SPKOUT端口上接上一個8歐的或者是16歐的喇叭;
        (3.把“單片機系統”區域中的P1.7/RD端口用導線連接到“四路撥動開關”區域中的K1端口上;
        4.程序設計內容
        (1.信號產生的方法
        500Hz信號周期為2ms,信號電平為每1ms變反1次,1KHz的信號周期為1ms,信號電平每500us變反1次;

        5.程序框圖
        開始

        K1按下了嗎?

        FLAG=0嗎?

        置200次計數
        P1.0輸出取反

        延時500us

        計數值計完了嗎?

        FLAG取反

        置200次計數
        P1.0輸出取反

        延時1ms

        計數值計完了嗎?

        FLAG取反

        圖4.6.2
        6.匯編源程序
        FLAGBIT00H
        ORG00H
        START:JBP1.7,START
        JNBFLAG,NEXT
        MOVR2,#200
        DV:CPLP1.0
        LCALLDELY500
        LCALLDELY500
        DJNZR2,DV
        CPLFLAG
        NEXT:MOVR2,#200
        DV1:CPLP1.0
        LCALLDELY500
        DJNZR2,DV1
        CPLFLAG
        SJMPSTART
        DELY500:MOVR7,#250
        LOOP:NOP
        DJNZR7,LOOP
        RET
        END
        7.C語言源程序
        #include
        #include

        bitflag;
        unsignedcharcount;

        voiddely500(void)
        {
        unsignedchari;
        for(i=250;i>0;i--)
        {
        _nop_();
        }
        }

        voidmain(void)
        {
        while(1)
        {
        if(P1_7==0)
        {
        for(count=200;count>0;count--)
        {
        P1_0=~P1_0;
        dely500();
        }
        for(count=200;count>0;count--)
        {
        P1_0=~P1_0;
        dely500();
        dely500();
        }
        }
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 梧州市| 梓潼县| 安化县| 水城县| 沈阳市| 福建省| 黑水县| 延边| 靖远县| 英吉沙县| 宁明县| 灵台县| 资兴市| SHOW| 滨州市| 桦甸市| 台中市| 炎陵县| 阿城市| 东海县| 田阳县| 肥乡县| 巴林右旗| 兴宁市| 开远市| 神木县| 辉南县| 克东县| 德州市| 安乡县| 夏邑县| 丹阳市| 齐河县| 丰县| 梁山县| 新密市| 玉环县| 迁西县| 梁平县| 开封市| 澄城县|