单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "adc.h"
- #include "dac.h"
- #include "key.h"
- /*************************************************
- 工程模板
- ①添加相应驱动文件 xxx.c
- ②修改驱动文件路径 C/C++
- ③添加库函数源文件 lib.c
- ④引用初始化函数(#include "..")
- **************************************************/
- int main(void)
- {
- u16 adcx;
- float temp;
- u8 t=0;
- u16 dacval=0;
- u8 key;
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化
- KEY_Init(); //按键初始化
- LED_Init(); //LED初始化
- Adc_Init(); //ADC1初始化
- Dac1_Init(); //DAC1初始化
-
- printf("\r\n DAC输出实验 \r\n");
- printf("\r\n 测试时间:2016/8/2 \r\n");
- printf("\r\n 实验--燃然 \r\n");
-
- while(1)
- {
- t++;
- key=KEY_Scan(0);
- if(key==WKUP_PRES) //WKUP按键按下
- {
- if(dacval<4000) dacval+=200;
- DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//12位右对齐数据格式 ,设置DAC输出值
- }
- else if(key==KEY1_PRES) //KEY1按下
- {
- if(dacval>200) dacval-=200;
- else dacval=0;
- DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//12位右对齐数据格式 ,设置DAC输出值
- }
- if(t==10||key==WKUP_PRES||key==KEY1_PRES) //WKUP/KEY1按下了,或者定时时间到了/
- {
- adcx=DAC_GetDataOutputValue(DAC_Channel_1); //读取DAC寄存器值
- printf("\r\n读取DAC寄存器值= %d ",adcx); //串口显示读取DAC寄存器值
- temp=(float)adcx*(3.3/4096); //计算并得到DAC电压值
- printf("\r\n读取DAC电压值= %f",temp); //串口显示读取DAC电压值
- adcx=Get_Adc_Average(ADC_Channel_1,10); //得到ADC转换值
- temp=(float)adcx*(3.3/4096); //得到ADC电压值
- printf("\r\n读取ADC电压值= %f \r\n",temp); //串口显示读取ADC电压值
- LED1=!LED1;
- LED0=!LED0;
- t=0;
- }
- delay_ms(20);
- }
-
- }
-
- //正弦波
- //三角波
- //方波
复制代码
所有资料51hei提供下载:
template-工程模板 - DAC.rar
(400.28 KB, 下载次数: 28)
|