d/a 是和 a/d 刚好反方向的,一个 8 位的 d/a,从 0~255,代表了 0~2.55v 的话,那么我们用单片机给第三个字节发送 100,d/a 引脚就会输出一个 1v 的电压,发送 200 就输出一个 2v 的电压,很简单,我们用一个简单的程序实现出来,并且通过上、下按键可以增大或减小输出幅度值,每次增加或减小 0.1v。如果有万用表的话,可以直接测试一下板子上aout 点的输出电压,观察它的变化。由于 pcf8591 的 da 输出偏置误差最大是 50mv(由数据手册提供),所以我们用万用表测到的电压值和理论值之间的误差就应该在 50mv 以内。
/*****************************i2c.c 文件程序源代码*******************************/
(此处省略,可参考之前章节的代码)
/***************************keyboard.c 文件程序源代码****************************/
(此处省略,可参考之前章节的代码)
/*****************************main.c 文件程序源代码******************************/
#include
unsigned char t0rh = 0; //t0 重载值的高字节
unsigned char t0rl = 0; //t0 重载值的低字节
void configtimer0(unsigned int ms);
extern void keyscan();
extern void keydriver();
extern void i2cstart();
extern void i2cstop();
extern bit i2cwrite(unsigned char dat);
void main(){
ea = 1; //开总中断
configtimer0(1); //配置 t0 定时 1ms
while (1){
keydriver(); //调用按键驱动
}
}
/* 设置 dac 输出值,val-设定值 */
void setdacout(unsigned char val){
i2cstart();
if (!i2cwrite(0x48《《1)){ //寻址 pcf8591,如未应答,则停止操作并返回
i2cstop();
return;
}
i2cwrite(0x40); //写入控制字节
i2cwrite(val); //写入 da 值
i2cstop();
}
/* 按键动作函数,根据键码执行相应的操作,keycode-按键键码 */
void keyaction(unsigned char keycode){
static unsigned char volt = 0; //输出电压值,隐含了一位十进制小数位
if (keycode == 0x26){ //向上键,增加 0.1v 电压值
if (volt 《 25){
volt++;
setdacout(volt*255/25); //转换为 ad 输出值
}
}else if (keycode == 0x28){ //向下键,减小 0.1v 电压值
if (volt 》 0){
volt--;
setdacout(volt*255/25); //转换为 ad 输出值
}
}
}
/* 配置并启动 t0,ms-t0 定时时间 */
void configtimer0(unsigned int ms){
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 28; //补偿中断响应延时造成的误差
t0rh = (unsigned char)(tmp》》8); //定时器重载值拆分为高低字节
t0rl = (unsigned char)tmp;
tmod &= 0xf0; //清零 t0 的控制位
tmod |= 0x01; //配置 t0 为模式 1
th0 = t0rh; //加载 t0 重载值
tl0 = t0rl;
et0 = 1; //使能 t0 中断
tr0 = 1; //启动 t0
}
/* t0 中断服务函数,执行按键扫描 */
void interrupttimer0() interrupt 1{
th0 = t0rh; //重新加载重载值
tl0 = t0rl;
keyscan(); //按键扫描
}
超级本成本居高不下 光学触控技术当救世主?
为留下更多的绿水蓝天,可再生能源将怎样去变革现在这个时代?
1000X无线降噪耳机评测 为大众用户增加了一个了解索尼音频的途径
共模电感的工作原理及计算方法
模拟电路的组成和特点
基于单片机D/A输出程序编写分享
互感器铁芯暂态饱和特性
即将到来的医学革命:“器官芯片”
三星、京东方OLED攻势凶猛,LGD新任CEO有高招?
物联网行业的趋势预测和新年祝福
选择工控主板时需要注意什么
诺基亚获中国联通5G订单的10%份额占比,包括天线等产品订单
Littelfuse推出为低电容ESD保护瞬态抑制二极管阵列
刚上市的华为Mate9和两岁的iPhone6,你们会买谁?
音圈模组3D打印的房子在安哥拉建成
坚果Pro 3开启了促销活动最高直降500元8GB+128GB版仅需2399元
卫星接收机密码
工业物联网平台如何实现智能制造数字化转型
氢能时代连接器迎新机遇
高压测量仪怎么使用