打印

为什么p0输出的是0xa1

[复制链接]
505|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2018-9-7 12:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^4;
sbit sda=P3^5 ;
void delay()
{;;}
void delay1(uchar x)
{
        uchar i,j;
        for(i=x;i>0;i--);
        for(j=100;j>0;j--);
}

void start()  //起始信号
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();        
}
void stop()        //停止信号
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void ask()         //应答
{
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))
        i++;
        scl=0;
        delay();
}
void write_byte(uchar date)        //写入一个字节
{
        uchar i,temp;
        temp=date;
//        scl=0;
        //delay();
        for(i;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay();
                sda=CY;
                delay();
                scl=1;
                delay();
        }
        scl=0;
        delay();
        sda=1;
        delay();        
}
uchar read_byte() //读取一个字节
{
        uchar i,j,k;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i;i<8;i++)
        {
                scl=1;
                delay();
                j=sda;
                k=(k<<1)|j;
                scl=0;
                delay();        
        }
        delay();
        return k;
}
void init()                   //初始化
{
        scl=1;
        sda=1;
}
void write_add(uchar address,uchar date)//指定地址写数据
{
        start();
        write_byte(0xa0);
        ask();
        write_byte(address);
        ask();
        write_byte(date);
        ask();
        stop();
}
uchar read_add(uchar address)        //指定地址读
{
        uchar date;
        start();
        write_byte(0xa0);
        ask();
        write_byte(address);
        ask();
   start();
   write_byte(0xa1);
   ask();
   date=read_byte();
   stop();
   return date;               
}
void main()
{
        init();
        write_add(3,0xaa);
        delay1(1000);
        P0=read_add(3);
        while(1);
}分析分析为什么p0输出的是0xa1;并且改变write_byte(0Xa1)括号里的参数,P0输出改变
沙发
wangzsa| | 2018-9-7 13:02 | 只看该作者


时序有问题。

使用特权

评论回复
板凳
zhuww|  楼主 | 2018-9-7 13:05 | 只看该作者
哪个位置的时序有问题

使用特权

评论回复
地板
guoyt| | 2018-9-7 13:09 | 只看该作者


对照手册查。

使用特权

评论回复
5
zhuww|  楼主 | 2018-9-7 13:11 | 只看该作者
对了,我和另外写的一样的程序对了,程序指令和时序都一样,就是结果不一样,困惑@_@

使用特权

评论回复
6
hanwe| | 2018-9-7 13:14 | 只看该作者
这是液晶的程序??????????????????????

使用特权

评论回复
7
zhuww|  楼主 | 2018-9-7 13:17 | 只看该作者
结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

893

主题

8252

帖子

1

粉丝