WK_UP 和 KEY1(也就是上下键)来实现对 DAC 输出的幅值控制。按下 WK_UP 增加,按
KEY1 减小。同时在 LCD 上面显示 DHR12R1 寄存器的值、 DAC 设计输出电压以及 ADC 采集
到的 DAC 输出电压。
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "lsens.h"
#include "adc.h"
void dac_Init(void);
void Dac1_Set_Vol(u16 Vol);
int main(void)
{
u16 dacval=0;
u16 adcval=0;
u8 t=0;
u8 key=0;
float temp=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init();
LCD_Init();
dac_Init();
myAdcInit();
LCD_ShowString(60,150,200,16,16,"DAC VAL:");
LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");
LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");
while(1)
{
t++;
key=KEY_Scan(0);
if(key==WKUP_PRES)
{
if(dacval<4000)dacval+=200;
else dacval=0;
DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//设置输出为0 temp:是寄存器值
}
if(key==KEY1_PRES)
{
if(dacval>200)dacval-=200;
else dacval=0;
DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//设置输出为0 temp:是寄存器值
}
if(t==10||key==KEY1_PRES||key==WKUP_PRES)
{
adcval=DAC_GetDataOutputValue(DAC_Channel_1);
LCD_ShowxNum(124,150,adcval,4,16,0); //显示 DAC 寄存器值
//DACx 输出电压=Vref*(DORx/4095)
temp=(adcval*(3.3/4095));//DACx 输出电压
adcval=temp;
LCD_ShowxNum(124,170,adcval,1,16,0); //显示电压值整数部分
temp-=adcval;
temp*=1000;
LCD_ShowxNum(140,170,temp,3,16,0X80); //显示电压值的小数部分
//
adcval=adcArc(ADC_Channel_1,10);//通道1,采样10次
// LCD_ShowxNum(124,190,adcval,4,16,0);//寄存器的值只有12位,2^12=4096最大值为4位
//
temp=(float)adcval*(3.3/4095);//参考电压3.3V,被分成4096份 得到的adc_val 占多少份
adcval=temp;//含有小数的强转化为整数
LCD_ShowxNum(124,190,adcval,1,16,0);//显示电压值 整数位
//
temp-=adcval;//得到小数部分
temp*=1000;//得到3位整数,为了显示出来
LCD_ShowxNum(140,190,temp,3,16,0X80);显示电压值 小数位
t=0;
}
// LED0=!LED0;
// delay_ms(250);
}
}
//按下 WK_UP 增加,按
//KEY1 减小。
void dac_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
DAC_InitTypeDef DAC_InitStruct;
//1、GPIOA、DAC时钟使能 DAC_OUT1->PA4
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
//2、GPIO配置 模拟输入
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_4) ; //PA.4 输出高
//3、DAC配置
DAC_InitStruct.DAC_Trigger=DAC_Trigger_None;
DAC_InitStruct.DAC_WaveGeneration=DAC_WaveGeneration_None;
DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
DAC_InitStruct.DAC_OutputBuffer=DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStruct);
DAC_Cmd(DAC_Channel_1,ENABLE);
DAC_SetChannel1Data(DAC_Align_12b_R,0);//设置输出为0
}
版权声明:本文为chenyouledashen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。