基于单片机的数字电压表pcf8591(3)

2019-02-16 13:13

3.4四位独立按键及声光报警

3.4.1四位独立按键

四位独立按键如电路图3-6,按键无动 作,对应端口为高电平。当按键按下,单片 机检测到低电平,按程序实现相应动作。

图3-6独立按键

3.4.2 led灯和蜂鸣器

图3-7 8个共阳极led灯 图3-8蜂鸣器

当给测量电压超过上下限时8个led开始闪烁,同时,蜂鸣器发出滴滴的声音。当看到这一现象是说明测量电压超限,应注意调节电压。

8

四、系统软件设计

4.1软件实现流程图

开始

数码管显示,对应通 道。显示上下限(默 认零,但上下限都为0 时不报警)显示对应 通道电压 单片机通过IIC总线给PCF8591发送命令,让PCF8591开始工作。 单片机通过中断程序定时采样(默认采样通道为通道0) Led D1亮,其余熄灭,蜂鸣器无动作 否 D1熄灭,如果 是 单片机判断 按键 按下K2,设置K4是否按 报警电压下下? 限,调节范围 0-4V,按下K3 是 设置电压上限K1是否 单片机判 否 调节范围按下? 断K1是否 单片1-5V。设置时机采 否按下? 数码管,显示集 上下变化 8591 的0通 是 道值,退出上下限设置,完成上下限设置 是 显示 单片机给PCF8591,发8个数 送指令,使采集通道在码管闪 单片机判断0-34个通道中切换并采烁,蜂 否 电压是否在集电压。数码管显示对应鸣器, 设定范围? 通道,显示对应电压 发出滴 滴声。 数码 是否设置上下限不影响,通道选择,及对应通道 管,显电压值,上下限,可在任意时刻设置。定时器T1, 是示通控制单片机采样频率,定时器T0控制数码管扫道,上不报警,正常定时采描。下载好程序,上电开始工作执行相应功能,下限,集,数码管显示,电断电及结束。 对应通压,通道,上下限。 道电压 9

4.2 IIC总线在实训中的应用

4.2.1单片机与PCF8591芯片之间IIC总线应用程序

void init() //初始化总线 SCL 和SDA 都拉成高电平 {

SCL=1;//时钟线 _nop();

SDA=1;//数据线

_nop();_nop();_nop();_nop();_nop(); }

void start()//开始信号 {

SDA=1; SCL=1;

_nop();_nop();_nop();_nop();_nop(); SDA=0;

_nop();_nop();_nop();_nop();_nop(); SCL=0; }

void stop()//终止信号 {

SDA=0; SCL=1;

_nop();_nop();_nop();_nop();_nop(); SDA=1;

_nop();_nop();_nop();_nop();_nop(); SDA=0; }

void ack()//发送应答 {

uchar i; SDA=0; SCL=1;

_nop();_nop();_nop();_nop(); while((SDA==1)&&(i<255))i++; SCL=0;

_nop();_nop();_nop();_nop(); }

void noack()//发送非应答 {

SDA=1; SCL=1;

10

_nop();_nop();_nop();_nop(); SCL=0; SDA=0; }

void sendbaty(uchar da)//发送字节 {

uchar i,temp; temp=da;

for(i=0;i<8;i++) {

temp=temp<<1; SCL=0;

_nop();_nop();_nop();_nop(); SDA=CY;

_nop();_nop();_nop();_nop(); SCL=1;

_nop();_nop();_nop();_nop(); }

SCL=0;

_nop();_nop();_nop();_nop(); SDA=1;

_nop();_nop();_nop();_nop(); }

unsigned char readbaty()//读字节 {

uchar i,temp; SCL=0;

_nop();_nop();_nop();_nop(); SDA=1;

for(i=0;i<8;i++) {

SCL=1;

_nop();_nop();_nop();_nop(); temp=(temp<<1)|SDA; SCL=0;

_nop();_nop();_nop();_nop(); }

_nop();_nop();_nop();_nop(); return temp; }

void DAC(uchar Data) {

start();

sendbaty(0x90); //写入芯片地址

11

ack();

sendbaty(0x40); //写入控制位 ack();

sendbaty(Data); //写数据 ack(); stop(); }

unsigned char ReadADC(uchar Chl) {

uchar Data;

start(); //写入芯片地址 sendbaty(0x90); ack();

sendbaty(0x40|Chl);//写入选择的通道ch1(1.2.3.4通道) ack(); start();

sendbaty(0x91); //读入地址 ack();

Data=readbaty(); //读数据 SCL=0; noack(); stop();

return Data; //返回值 }

4.3完整程序见附录3

12


基于单片机的数字电压表pcf8591(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:3第一章集合函数导数(3)(函数改)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: