avr单片机控制AD5161实验程序

2017-12-15 22:55:00来源: eefocus 关键字:avr  单片机控制  AD5161

/******************************************* 
文件:AD5161.C 
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10  
硬件:ATMEGA16芯片 
功能:驱动开发板上的数字电位器(AD5161采用IIC接口) 

/******************************************/ 
#include     //包含型号头文件 
#include     //包含"位"操作头文件 
#include     //标准输入输出头文件 
#include    //包含自定义常量头文件 
#include "Skey.C"    //包含数码管显示函数 

/******************************************* 
函数名称: Twi_init 
功    能: 初始化TWI 
参    数: MS--延时的毫秒数 
返回值 : 无 
/********************************************/ 
void Twi_init(void) 

TWBR= 0x20; //设置波特率 
TWSR= 0x00; //设置预分频比 
TWCR= 0x44; //使能应答,使能TWI 

/******************************************* 
函数名称: AD5161_writeB 
功    能: 向AD5161写入电阻值数据 
参    数: devadd--器件地址 
      cmd--控制命令 
    rdata--电阻数据 
返回值 : success--数据成功标志(为TRUE时写入成功,为FALSE时失败) 
/********************************************/ 
uchar AD5161_writeB(uchar devadd,uchar cmd,uchar rdata) 

uchar success=FALSE;   //默认返回是写入失败 
Start();      //产生START信号 
Wait();      //等待START信号发送完毕 
if(TestACK()!=START)   //检查是否是START信号发送完毕状态 

success=FALSE;     //如果不是,则返回写入失败 
return success; 

Writebyte(devadd);    //发送从器件地址 
Wait();      //等待发送完毕 
if(TestACK()!=MT_SLA_ACK)//检查是否是从器件地址发送完毕状态 

success=FALSE;    //如果不是,则返回写入失败 
return success; 

Writebyte(cmd);     //发送AD5161的命令字节(具体含义请参看AD5161的数据手册) 
Wait();      //等待发送完毕 
if(TestACK()!=MT_DATA_ACK)//检查是否是数据发送完毕 

success=FALSE;    //如果不是,则返回写入失败 
return success; 

Writebyte(rdata);    //发送电阻值数据 
Wait();      //等待发送完毕 
if(TestACK()!=MT_DATA_ACK)//检查是否是数据发送完毕 

success=FALSE;    //如果不是,则返回写入失败 
return success; 

Stop();        //对AD5161的一次操作完毕,发送STOP信号 
Delayms(10);     //等待发送完毕 
success=TRUE;     //本次写入成功 
return success;    //返回写入成功状态 

/******************************************* 
函数名称: main 
功    能: 按键更新数字电位器的阻值(电阻是A和W端的阻值,默认B端是开路的) 
参    数: 无 
返回值 : 无 
/********************************************/ 
void main(void) 

uchar i,data=0; //初始电阻是满量程 
Board_init( );   //初始化开发板 
Twi_init( );   //初始化TWI  
AD5161_writeB(0x58,0x00,data); //设置初始电阻 
while(1) 

if(Skey_press())      //是否有按键按下 

   i=Skey_sCAN();      //扫描并反回翻译后的键码 
   switch(i) 
   { 
   case 0:      //S1键按下,减少电阻的数字量(AD5161的特性是减少电阻的数字量,阻值增加) 
   data-=16; 
   break; 
case 1:           //S2键按下,增加电阻的数字量 
   data+=16; 
   break; 
case 2:           //S3键按下,使电阻的数字量为零(阻值满量程) 
   data=0; 
   break; 
case 3:         //S3键按下,使电阻的数字量为满(阻值清零,只剩下接触电阻) 
   data=255; 
   break; 
   } 
   AD5161_writeB(0x58,0x00,data); //更新电阻 


}  


关键字:avr  单片机控制  AD5161

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2017121536769.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR多机通讯
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
avr
单片机控制
AD5161

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved