?? dac.c
字號(hào):
#include "2410addr.h"
#include "def.h"
#define KEY1 (1 << 3) //GPG3
void PWM_Init(U16 cycle, U16 duty){
if (duty > cycle) duty = cycle; // 參數(shù)過濾
rTCFG0 = rTCFG0 & ~(0xff << 8) | (99 << 8);//rTCFG0[15:8]=99,預(yù)分頻器0設(shè)置為100,取得507000Hz
rTCFG1 = rTCFG1 & ~(0xf << 8); //rTCFG1[11:8]=0,timer2再取1/2分頻,取得253500Hz
rTCMPB2 = duty; // 設(shè)置PWM占空比
rTCNTB2 = cycle; // 定時(shí)值(PWM周期)
rTCON = (rTCON & ~(0xf << 12)) | (0xa<<12); //Auto reload, Inverter off, Manual update, Stop, Dead zone disable
rTCON = (rTCON & ~(0xf << 12)) | (0x9<<12); //Auto reload, Inverter off, No operation, Start, Dead zone disable
}
void Main(void){
U16 pwm_dac = 0, nLED = 0; //初始化占空比為0,即輸出0V電壓
rGPFDAT = (rGPFDAT & 0x0f) | ((~nLED & 0xf)<<4);
rGPFCON = (rGPFCON & 0x00ff) | 0x5500;//設(shè)置GPF[7:4](LED[4:1])為輸出功能
rGPGCON &= ~(3 << 6); //rGPGCON[7:6]=0,KEY1控制口設(shè)置
rGPBCON = (rGPBCON & (~(3<<4))) | (2<<4); //rGPBCON[5:4] = 10b,設(shè)置TOUT2功能
rGPBUP |= (1<<2); //禁止TOUT0口的上拉電阻
// 初始化PWM輸出。設(shè)PWM周期控制值為255 (即DAC分辨率為8位)
PWM_Init(255, pwm_dac);
Delay(0);
// 等待按鍵KEY1,改變占空比
while(1)
{
if (!(rGPGDAT & KEY1)){//當(dāng)KEY1被按下
Delay(100);
if (rGPGDAT & KEY1) continue;
pwm_dac = pwm_dac + 16; // 改變D/A輸出的電壓值
nLED += 1;
if (pwm_dac > 255){
pwm_dac = 0;
nLED = 0;
}
rTCMPB2 = pwm_dac; //占空比
rGPFDAT = (rGPFDAT & 0x0f) | ((~nLED & 0xf)<<4);
while (!(rGPGDAT & KEY1));
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -