📄 dac_adc.c
字号:
//DAC转换 输出0~5伏 步进0.1伏
//系统时钟 22.1184MHz
//T3自动重装产生方波
#include "ms_c.h"
#include "key.h"
sfr16 ADC0 =0xbe;
uchar voltage=0; //输出电压值 0.0~5.0
uchar test_vol=0; //ADC0检测的电压
void DAC0_Init(void)
{
DAC0CN=0x80; //允许DAC0 在写DAC0H时更新 数据格式:高四位在DAC0H[3~0] 低八位在DAC0L
REF0CN=0x03; //允许偏压发生器和电压基准缓冲器
}
void ADC0_Init (void)
{
//REF0CN=0x07; //允许温度传感器 偏压发生器和基准电压发生器
AMX0CF=0x00; //所有的输入均为单端输入
AMX0SL=0x00; //AIN0//温度传感器
ADC0CF=0x50; //增益 1
ADC0CN=0x80; //一直跟踪 写ADC0BUSY启动转换 数据右对齐
}
void set(void)
{
voltage=LED_BUF[1]+LED_BUF[2]*10+(LED_BUF[3]&0x0f)*100;
DAC0L=17*voltage%256;
DAC0H=17*voltage/256;
}
void main(void)
{
voltage=0;
SYSCLK_Init ();
PORT_Init ();
UART0_Init ();
DAC0_Init ();
ADC0_Init ();
/* LED_BUF[8]=0x0f;
LED_BUF[7]=0x0f;
LED_BUF[6]=0x0f;*/
LED_BUF[5]=0x0f;
LED_BUF[4]=0x0f;
LED_BUF[3]=voltage/100+0x80;
LED_BUF[2]=voltage%100/10;
LED_BUF[1]=voltage%10;
send_led ();
while(1)
{
send_led ();
chk_key();
{
AD0BUSY=1;
test_vol=ADC0/17;
LED_BUF[8]=test_vol/100+0x80;
LED_BUF[7]=test_vol%100/10;
LED_BUF[6]=test_vol%10;
}
if(SET_FLAG)
{ set();
SET_FLAG=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -