新聞中心

        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();
        }
        }
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 白玉县| 锦屏县| 金沙县| 利川市| 安阳市| 通榆县| 武鸣县| 新疆| 星子县| 铜川市| 太保市| 金门县| 宁乡县| 景洪市| 临夏县| 四子王旗| 大冶市| 尤溪县| 霍林郭勒市| 沭阳县| 叶城县| 荔波县| 团风县| 沁源县| 措勤县| 乐平市| 富平县| 昌乐县| 定州市| 原阳县| 河西区| 嘉定区| 西畴县| 晋州市| 咸宁市| 大冶市| 梓潼县| 惠东县| 纳雍县| 赫章县| 鲁甸县|