新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機的波形發生器&DA轉換(dac0832)

        基于51單片機的波形發生器&DA轉換(dac0832)

        作者: 時間:2016-11-17 來源:網絡 收藏
        代碼如下:

        #include"reg51.h"
        #define uchar unsigned char
        sbit ksaw=P2^0; //鋸齒波按鍵.
        sbit ktran=P2^1; //三角波按鍵.
        sbit ksquare=P2^2; //方波按鍵.
        sbit ksin=P2^3; //正弦波按鍵.

        本文引用地址:http://www.104case.com/article/201611/315465.htm

        uchar key1;
        uchar keya;
        uchar keyb;
        uchar keyc;
        uchar keyd;void delay( );
        uchar code tab[128]={
        64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
        109,111,113,115,117,118,120,121,123,124,125,126,126,
        127,127,127,127,127,127,127,126,126,125,124,123,121,
        120,118,117,115,113,111,109,106,104,102,99,96,94,91,
        88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
        36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
        1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
        25,28,31,33,36,39,42,45,48,51,54,57,60};

        void delay( )
        {
        uchar i;
        for(i=0;i<255;i++);
        }
        void saw(void) //鋸齒波.
        {
        uchar i;
        while(1)
        {
        if(keya==1)
        {
        for(i=0;i<255;i++)
        P0=i;
        }
        else break;
        }
        }
        void tran(void) //三角波
        {
        uchar i;
        while(1)
        {
        if(keyb==1)
        {
        for(i=0;i<255;i++)
        P0=i;
        for(i=255;i>0;i--)
        P0=i;
        }
        else break;
        }
        }
        void square(void) //方波
        {
        while(1)
        {
        if(keyc==1)
        {
        P0=0x00;
        delay();
        P0=0xff;
        delay();
        }
        else break;
        }

        }

        void sin( ) //正弦波
        {
        unsigned int i=0;
        while(1)
        {
        if(keyd==1)
        {
        if(++i==128)i=0;
        {P0=tab[i];}
        }
        else break;
        }
        }
        void main(void) //主函數
        {
        EA=1;
        EX0=1;
        while(1)
        {
        if(key1)
        {
        switch(key1)
        {
        case 0x01:
        //P0=0XC0;//
        saw();
        break;
        case 0x02:
        //P0=0XC0;//
        tran();
        break;
        case 0x03:
        //P0=0XBE;//
        square();
        break;
        case 0x04:
        //P0=0XB6;//
        sin();
        break;
        }
        }
        }

        }

        void int0(void)interrupt0 using 1
        {
        if(ksaw==0)
        {key1=0x01;keya=1;keyb=0;keyc=0;keyd=0;}
        if(ktran==0)
        {key1=0x02;keya=0;keyb=1;keyc=0;keyd=0;}
        if(ksquare==0)
        { key1=0x03;keya=0;keyb=0;keyc=1;keyd=0;}
        if(ksin==0)
        {key1=0x04;keya=0;keyb=0;keyc=0;keyd=1;}
        }

        圖片如下:



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 禄丰县| 牟定县| 邵东县| 贵南县| 汝城县| 蓝山县| 万盛区| 汾阳市| 乐陵市| 平安县| 牡丹江市| 烟台市| 桐柏县| 新巴尔虎左旗| 浦东新区| 汤原县| 宁海县| 讷河市| 林甸县| 青田县| 科技| 阳新县| 海伦市| 元谋县| 兴义市| 姚安县| 沈阳市| 温州市| 南部县| 双鸭山市| 塔城市| 永顺县| 略阳县| 涟水县| 崇左市| 南溪县| 临泽县| 长治县| 永兴县| 桂林市| 金阳县|