找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1855|回复: 2
收起左侧

求助,PCF8591模块程序那里写的不对

[复制链接]
ID:227636 发表于 2017-8-14 20:36 | 显示全部楼层 |阅读模式
用PCF8591模块,连接单片机,1602液晶显示,大师们帮忙看看那里写的不对,液晶只显示0000,初学者,谢谢!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P2^6;
sbit sda=P2^7;
sbit rs=P2^0;
sbit rw=P2^1;
sbit lcden=P2^2;
uchar date;
uchar code table[]="0123456789";
void i2cinit();
void i2cstart();
void i2crespons();
void i2cstop();
void i2cwritebyte(uchar date);
uchar i2creadbyte();
void readi2c();
void write_com(uchar com);
void write_date(uchar date);
void lcdinit();
void lcdplay();
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
        {
                for(y=110;y>0;y--);
        }
}
void i2cinit()
{
        scl=1;
        delay(5);
        sda=1;
        delay(5);
}
void i2cstart()
{
        sda=1;
        delay(5);
        scl=1;
        delay(5);
        sda=0;
        delay(5);
}
void i2crespons()
{
        uchar i=0;
        scl=1;
        delay(5);
        while(sda==1&&i<255)
        {
                i++;
        }
        scl=0;
        delay(5);
}
void i2cstop()
{
        sda=0;
        delay(5);
        scl=1;
        delay(5);
        sda=1;
        delay(5);
}
void i2cwritebyte(uchar date)
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay(5);
                sda=CY;
                delay(5);
                scl=1;
                delay(5);
        }
        scl=0;
        delay(5);
        sda=1;
        delay(5);
}
uchar i2creadbyte()
{
        uchar i,k;
        scl=0;
        delay(5);
        sda=1;
        for(i=0;i<8;i++)
        {
                scl=1;
                delay(5);
                k=(k<<1|sda);
                scl=0;
                delay(5);
        }
        return k;
}
void readi2c()
{
        uchar date;
        i2cinit();
        i2cstart();
        i2cwritebyte(0x90);
        i2crespons();
        i2cwritebyte(0x01);
        i2crespons();
        i2cwritebyte(0x91);
        i2crespons();
        date=i2creadbyte();
        i2cstop();
       
       
}
void write_com(uchar com)
{
        rs=0;       
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
       
}
void write_date(uchar date)
{
        rs=1;       
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void lcdinit()
{
        rw=0;
        write_com(0x38);
        write_com(0x0c);
               
}
void lcdplay()
{
        uchar qian,bai,shi,ge;
        lcdinit();
        qian=date/1000;
        bai=date%1000/100;
        shi=date%100/10;
        ge=date%10;
        write_com(0x80+0x00);
        write_date(table[qian]);
        write_com(0x80+0x01);
        write_date(table[bai]);
        write_com(0x80+0x02);
        write_date(table[shi]);
        write_com(0x80+0x03);
        write_date(table[ge]);

}
void main()
{
        readi2c();
        while(1)
        {
               
                lcdplay();       
        }       
}
回复

使用道具 举报

ID:227639 发表于 2017-8-14 21:30 | 显示全部楼层
你参考这个例程

PCF8563芯片时序程序.doc

227.5 KB, 下载次数: 10

回复

使用道具 举报

ID:111634 发表于 2017-8-25 17:17 | 显示全部楼层
本帖最后由 zl2168 于 2017-8-25 17:18 编辑

实例85  PCF8591 I2C串行A-D(1602显示)
实例85 PCF8591 I2C串行A-D.rar (57.96 KB, 下载次数: 10)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表