新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR單片機PWM試驗程序

        AVR單片機PWM試驗程序

        作者: 時間:2016-11-30 來源:網絡 收藏

        此圖電壓輸出位0.6V
        以下是程序源碼可從http://www.51hei.com/f/avrpwmcx.rar下載源文件.
        // ATMEGA16 晶振8MHZ

        #include
        #define uchar unsigned char
        #define uint unsigned int
        #define xtal 8
        __flash uchar seg7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管碼表
        __flash uchar tab[]={0xfe,0xfd,0xfb,0xf7};//數碼管位選
        //---------------------------------
        void delaynms(uint k) //延時k毫秒函數
        {
        uint i,j;
        for(i=0;i
        {
        for(j=0;j<1140;j++);
        }
        }

        uint wide; //脈沖寬度

        void portinit() //端口初始化
        {
        DDRA=0xff;
        PORTA=0xff;
        DDRC=0xff;
        PORTC=0xff;
        DDRB=0xff;
        PORTB=0xff;
        DDRD=0xff;
        PORTD=0xff;
        }

        void time1init() //定時器設置函數
        {
        TCCR1A=0x83; //升序計數比較匹配清零,降序計數比較匹配置位
        TCCR1B=0x02; //設置為相位修正PWM模式,選擇8分頻
        }

        void initdevice()
        {
        portinit();
        time1init();
        }

        void scanint1() //PD3口按下,脈寬增加
        {
        if((PIND&0x08)==0)
        {
        delaynms(10);
        if((PIND&0x08)==0)
        {
        if(wide<1023)wide++; 脈寬最大增加到1023
        delaynms(200);
        }
        }
        }

        void scanint0() //PD2按下,脈寬減少
        {
        if((PIND&0x04)==0)
        {
        delaynms(10);
        if((PIND&0x04)==0)
        {
        if(wide>0)wide--;
        delaynms(200);
        }
        }
        }


        void main(void)
        {
        long x;
        uint voltage;
        initdevice();
        delaynms(100);
        while(1)
        {
        voltage=wide;
        OCR1AH=(uchar)(wide>>8); 脈寬取低8位
        OCR1AL=(uchar)(wide&0xff);脈寬低8位和高8位組合成比較匹配器A的數值
        scanint1();
        scanint0();
        x=(long)voltage; 設置電壓變量
        x=(x*5000)/1023; 電壓為5V 分辨率5000設置
        voltage=(uint)x;
        PORTA=seg7[voltage/1000];
        PORTC=tab[3];
        PORTA=seg7[voltage%1000/100];
        PORTC=tab[2];
        PORTA=seg7[voltage%100/10];
        PORTC=tab[1];
        PORTA=seg7[voltage%10];
        PORTC=tab[0];
        }
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 嘉鱼县| 鹤庆县| 昌江| 万载县| 余江县| 西和县| 奉贤区| 万源市| 永年县| 遵义市| 太仆寺旗| 淮滨县| 义马市| 行唐县| 梅河口市| 瑞金市| 额尔古纳市| 江华| 杭锦后旗| 富裕县| 会东县| 昌都县| 瑞丽市| 潜山县| 克拉玛依市| 保山市| 博罗县| 陵川县| 新丰县| 福海县| 恩施市| 申扎县| 会昌县| 万盛区| 微博| 卢氏县| 十堰市| 平昌县| 响水县| 上饶市| 郯城县|