PCF8591驱动程序.doc

上传人:豆**** 文档编号:23961416 上传时间:2022-07-02 格式:DOC 页数:40 大小:162.50KB
返回 下载 相关 举报
PCF8591驱动程序.doc_第1页
第1页 / 共40页
PCF8591驱动程序.doc_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《PCF8591驱动程序.doc》由会员分享,可在线阅读,更多相关《PCF8591驱动程序.doc(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datePCF8591驱动程序转换芯片控制程序 转换芯片控制程序并用和74HC164显示出来。#include#include#define uchar unsigned char#define uint unsigned intsbit SCL=P20;sbit SDA=P21;bit ack;uchar a3;uchar b3;sbit SCK=P10;sbit DAT=

2、P13;sbit G=P12;sbit RCK=P11; /把unsigned char宏定义为ucharuchar Led_code10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, /数码管的0F的所对应的段码 0x7F,0x6F;/uchar Led_enbit8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /共阳数码管uchar Led_enbit8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /数码管第07位所对应位选的代码/*函数:void delay(void) *功能

3、:延时2ms */void delay1(uchar x) unsigned char a,b; for(b=80;b0;b-) for(a=x;a0;a-); /*函数:void send_data(unchar Data) *功能:发送一字节数据 *说明:数据的高位在前,低位在后。SCK上升沿写入一位 * */void send_data(uchar Data)uchar i;for(i=0;i8;i+)SCK=0; DAT=Data&0x80;/取数据的最高位SCK=1;Data=Data0;a-) for(b=1;b0;b-);/* 总线函数初始化 函数原型: void Init_I2

4、c(); 功能: 启动I2C总线,即发送I2C起始条件. */void Init_I2c()SCL=1; /I2C 时钟 SDA=1; /I2C 数据/* 起动总线函数 函数原型: void Start_I2c(); 功能: 启动I2C总线,即发送I2C起始条件. */void Start_I2c() SDA=0; /*发送起始条件的数据信号*/ SCL=1; SDA=1; Delay_I2c(); /*起始条件建立时间大于4.7us,延时*/ SDA=0; Delay_I2c(); /*发送起始信号*/ /* 起始条件锁定时间大于4s*/ SCL=0; /*钳住I2C总线,准备发送或接收数据

5、 */ /* 结束总线函数 函数原型: void Stop_I2c(); 功能: 结束I2C总线,即发送I2C结束条件. */void Stop_I2c() SDA=0; /*发送结束条件的数据信号*/ SCL=0; /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ Delay_I2c(); SDA=1; /*发送I2C总线结束信号*/ Delay_I2c(); SDA=0; /* 应答子函数函数原型: void Ack_I2c();功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)*/void Ack_I2c() uchar i; SCL=0;

6、 SDA=1; SCL=1; SDA=0; Delay_I2c(); /*时钟低电平周期大于4s while(SDA=1) & (i255) i+; SCL=0; SDA=1; /*清时钟线,钳住I2C总线以便继续接收 /* 应答子函数函数原型: void N_Ack_I2c();功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)*/void N_Ack_I2c() SCL=0; SDA=0; SCL=1; SDA=1; Delay_I2c(); SCL=0; SDA=0;/* 字节数据发送函数 函数原型: void SendByte(UCHAR c);功能: 将数据c发送出

7、去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。*/void Send_Byte(unsigned char c) unsigned char BitCnt; SCL=0; /时钟线为低电平数据会变 for(BitCnt=0;BitCnt8;BitCnt+) /*要传送的数据长度为8位*/ if(c&0x80) SDA=1; /*判断发送位*/ else SDA=0; c=c1; Delay_I2c(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ Delay

8、_I2c(); /*保证时钟高电平周期大于4s*/ SCL=0; Delay_I2c(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ Delay_I2c(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号 SCL=0; Delay_I2c();/* 读一字节数据接收函数 函数原型: UCHAR RcvByte();功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数应答从机。 */ unsigned char Rcv_Byte() unsigned char dat; unsigned char Bit

9、Cnt; dat=0; /SCL=0; /Nop(); SDA=1; Delay_I2c(); /*置数据线为输入方式*/ for(BitCnt=0;BitCnt8;BitCnt+) SCL=0; /*置时钟线为低,准备接收数据位*/ Delay_I2c(); /*时钟低电平周期大于4.7s*/SCL=1; /*置时钟线为高使数据线上数据有效*/ Delay_I2c(); dat=dat1;/ dat=(dat1)|SDA;/ if(SDA=1)dat=dat+1; /*读数据位,接收的数据位放入dat中 */ /强制加一,防止上卷,*/ SCL=0; Delay_I2c(); return(

10、dat);/* 函数原型: AD_chli() /功能: */ uchar AD_culi(char con) uint date; Start_I2c(); Send_Byte(0x90);/发送器件地址 Ack_I2c(); Send_Byte(con);/控制方式为输出 ,通道0 Ack_I2c(); Start_I2c(); Send_Byte(0x91); Ack_I2c(); date=Rcv_Byte(); N_Ack_I2c(); Stop_I2c(); return date;/* 函数原型: DA_chli() /功能: */ void DA_culi(uchar con,uchar dat) Start_I2c(); Send_Byte(0x90); Ack_I2c(); Send_Byte(con); Ack_I2c(); Send_Byte(dat); Ack_I2c(); Stop_I2c();void main() uchar shu=0; uint x,y; uchar we; Init_I2c(); while(1) x=AD_culi(0x01); a2=x/100; a1=x%100/10; a0=x%10; for(we=0;we3;we+) display(awe,we); DA_culi(0x40,shu);shu+; -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com