This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ms430f169用键盘控制DA输出的电压

Other Parts Discussed in Thread: MSP430F169

键盘程序,DA程序本来很容易,但整合起来就有一堆问题。。。搞了好久,才能用键盘控制加减0.2V的电压。

#include <msp430f169.h>
#include "Config.h"
#include"key1.h"

#define uchar unsigned char
//+-0.2V
void key1(void)
{

//WDT_Init(); //看门狗设置
//Clock_Init(); //系统时钟设置
Port_init(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
while(1)
{
Key_Scan(); //键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4
{
{

switch(key)
{
case 1:LED8 = 0xFC;delay_ms(40); DAC12_0DAT=DAC12_0DAT+0x0a3;delay_ms(40);break; //给不同的键赋键值,键值1,亮2个LED灯
case 2:LED8 = 0xF3;delay_ms(40); DAC12_0DAT=DAC12_0DAT-0x06d;break; //给不同的键赋键值,键值2,亮2个LED灯
case 3://LED8 = 0xCF;break; b=a+0x0666; //给不同的键赋键值,键值3,亮2个LED灯
case 4://LED8 = 0x3F;break; b=a-0x0666; //给不同的键赋键值,键值4,亮2个LED灯
}

}

}
else
{
LED8=key; //没有按键的时候显示上次的键值
}
}

}
void InitDAC12_0(void)
{

ADC12CTL0=REF2_5V+REFON;
DAC12_0CTL |= DAC12CALON; // 启动效验DAC
while((DAC12_0CTL & DAC12CALON) != 0){_NOP();} // 等待效验完成
// 控制寄存器设置
// 选择输入缓冲器中速中电流,输出缓冲器中速中电流,12位DAC,满电压输出为内基准,自动更新数据
DAC12_0CTL = DAC12AMP_5 + DAC12IR + DAC12LSEL_0;
DAC12_0CTL |= DAC12SREF_0;
DAC12_0CTL |= DAC12ENC; // 启动DAC模块(DAC12LSEL_0时此句可以省)

}
//主函数
void main(void)
{



WDT_Init(); //看门狗初始化
Clock_Init(); //时钟初始化
InitDAC12_0();
DAC12_0DAT =0x666;
key1();
}

1.就是我加下划线的两句,实现加减0.2V的两句代码,为何两句话不是只差一个“+,-”吗???

2.实现“+,-”1v的时候,很容易跳变到2.5V或0.68V,或者没反应。。。。

这是我qq1019753552,求助各位大神!!小弟谢谢啦!!!

  • switch case中应该加上default

    加减0.2V应该就是在原来值的基础上加减0.2V对于的数字量就可以啦

    如果有跳变    建议你在采集按键值是做抖动处理   最好在硬件上做整形