ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STC89C52实时用PCF8591采集温度四位数码管显示

2020-06-03 12:56:41  阅读:392  来源: 互联网

标签:dat SCL STC89C52 Delay10us unsigned char 数码管 PCF8591 SDA


一、主函数如下:

#include <reg52.h>    //此文件中定义了单片机的一些特殊功能寄存器
#include"fpc8591.h"
#include"i2c.h"
#include "74hc595.h"


/*******************************************************************************
* 函 数 名       : main
* 函数功能         : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
    unsigned int temp; 
    while(1)
    {
        temp=Read_D(0);//pcf8591通道0采集温度
        LED4_data(temp);
        LED4_Display();
    }        
}

二、现象如下:

三、四位数码管显示部分程序:

void LED_OUT(uchar X)
{
    uchar i;
    for(i=8;i>=1;i--)
    {
        if (X&0x80) DIO=1; else DIO=0;
        X<<=1;
        HCSCLK = 0;
        HCSCLK = 1;
    }
}

四位数码管显示完整程序见:https://www.cnblogs.com/wlei5206/p/13036832.html

 

四、PCF8591模数部分程序:

unsigned char Read_D(unsigned char Channel)
{
    unsigned char dat;
    I2cStart();
    I2cSendByte(0x90); //器件地址+0
    I2cAck(0);
    I2cSendByte(Channel); //控制字0x01表示通道1
    I2cAck(0);
    I2cStart();
    I2cSendByte(0x91); //器件地址+1,下一个字节要读取
    I2cAck(0);
    dat=I2cReadByte();
    I2cAck(0);
    I2cStop();
    // AD_led=0; //转换成功显示
    return dat;
}

PCF8591模数完整程序见:https://www.cnblogs.com/wlei5206/p/13024063.html

 

五、IIC驱动部分程序:

unsigned char I2cSendByte(unsigned char dat)
{
    unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。        
    for(a=0;a<8;a++)//要发送8位,从最高位开始
    {
        SDA=dat>>7;     //起始信号之后SCL=0,所以可以直接改变SDA信号
        dat=dat<<1;
        Delay10us();
        SCL=1;
        Delay10us();//建立时间>4.7us
        SCL=0;
        Delay10us();//时间大于4us        
    }
    SDA=1;
    Delay10us();
    SCL=1;
    while(SDA)//等待应答,也就是等待从设备把SDA拉低
    {
        b++;
        if(b>200)     //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
        {
            SCL=0;
            Delay10us();
            return 0;
        }
    }
    SCL=0;
    Delay10us();
     return 1;        
}

unsigned char I2cReadByte()
{
    unsigned char a=0,dat=0;
    SDA=1;            //起始和发送一个字节之后SCL都是0
    Delay10us();
    for(a=0;a<8;a++)//接收8个字节
    {
        SCL=1;
        Delay10us();
        dat<<=1;
        dat|=SDA;
        Delay10us();
        SCL=0;
        Delay10us();
    }
    return dat;        
}

IIC驱动完整程序见:https://www.cnblogs.com/wlei5206/p/13024116.html

 

标签:dat,SCL,STC89C52,Delay10us,unsigned,char,数码管,PCF8591,SDA
来源: https://www.cnblogs.com/wlei5206/p/13036420.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有