⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.c

📁 本代码是基于三星2410的嵌入式开发实验程序代码,包括:ADC,CS8900A,KEY_GPIO,KEY_INT,LED,PWMDAC,UART
💻 C
字号:
#include "2410addr.h"
#include "def.h"
#define KEY1 (1 << 3) //GPG3

void  PWM_Init(U16 cycle, U16 duty){	   
    if (duty > cycle) duty = cycle;         // 参数过滤
	rTCFG0 = rTCFG0 & ~(0xff << 8) | (99 << 8);//rTCFG0[15:8]=99,预分频器0设置为100,取得507000Hz
	rTCFG1 = rTCFG1 & ~(0xf << 8);			    //rTCFG1[11:8]=0,timer2再取1/2分频,取得253500Hz
	rTCMPB2 = duty;	    // 设置PWM占空比
	rTCNTB2 = cycle;	// 定时值(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;//设置GPF[7:4](LED[4:1])为输出功能
    rGPGCON &= ~(3 << 6);                     //rGPGCON[7:6]=0,KEY1控制口设置 
    rGPBCON = (rGPBCON & (~(3<<4))) | (2<<4); //rGPBCON[5:4] = 10b,设置TOUT2功能    
    rGPBUP |= (1<<2);                         //禁止TOUT0口的上拉电阻 
    
    // 初始化PWM输出。设PWM周期控制值为255 (即DAC分辨率为8位)
    PWM_Init(255, pwm_dac);         
    Delay(0);
    // 等待按键KEY1,改变占空比	
	while(1)
	{		                    
        if (!(rGPGDAT & KEY1)){//当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));
		}
    }		
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -