请教 关于ADS1118的程序问题 :返回的数据不对 抱歉我只有35分

2019-07-15 14:27发布

#include<STC15W4K.h>
unsigned char SPI_SPIF=0;//传输标志位
short int hc;//缓存
/*************************************************/
sbit E=P0^2;
sbit RS=P0^0;
sbit RW=P0^1;
sbit RST=P1^3;
unsigned char xssj[3];
void ys(unsigned int yssj);
void mjc()//忙不忙啊大哥  这个是属于读数据使用需要看时图
{
        char jc;
        P2=0xff;
        E=0;//使能
        RS=0;//高电平是对数据进行操作,低电平时为命令操作
        RW=1;//读写控制
        E=1;
        jc=P2^7;
        while(jc==0)
        jc=P2^7;        //P2^7为0时 跳出
}
void xsj(unsigned char sj)//写数据
{
       
       
        mjc();
        E=0;
        RS=1;
        RW=0;
        E=1;
        P2=sj;
        ys(500);
        E=0;
}
void xzr(unsigned char zr)//写指令
{
        mjc();
        E=0;
        RS=0;
        RW=0;
        E=1;
        P2=zr;
        ys(500);
        E=0;
       
}
void csh128()//初始化128
{
        ys(1000);
        xzr(0x30);//初始一使用什么指令,是什么8io口还是4io口;
        ys(500);
        xzr(0x0c);//初始二怎么显示(开启显示,光标什么样子)
        ys(100);
        xzr(0x01);//初始三清屏,因为上次显示数据是存储在液晶里面的
        ys(1000);
        xzr(0x06);//初始四显示方向,从什么方向开始显示,******总结就是1用什么指令 2开启屏幕 3清屏 4这次怎么显示
        ys(500);
}




/*************************************************/

void cshdk()//初始化io
{
        P0M1 = 0;   P0M0 = 0;
        P1M1 = 0;   P1M0 =0;
        P2M1 = 0;   P2M0 =0;
}
void cshSPI()//初始化SPI
{
        SPDAT=0;//消除数据寄存器的数据
        SPSTAT=0xc0;//清除状态
        SPCTL=0Xd7;//设置主机和从机模式 设置时钟

}
void ys(unsigned int yssj)
{
        int cfbl;
        for(;yssj>0;yssj--)
                for(cfbl=0;cfbl<115;cfbl++);
}

/*void kqzd()//开启SPI中断
{
       
        EA=1;
        ESPI=1;
        //while(!(SPSTAT & 0x80));
        //hc=SPDAT;
}
void SPIzd(void) interrupt 9//SPI中断,传输完成后取数据
{
        ys(10);
        SPSTAT |= 0xC0;//
        hc=SPDAT;//获取数据
        ys(100);
        SPDAT=0x0000;
}*/

void xrsj(signed int sj)//交换数据
{
       
        P12=0;
        SPDAT=sj;
        while(!(SPSTAT & 0x80));
        SPSTAT |= 0xC0;
        P12=1;
        ys(100);
        hc=SPDAT;
}

void main()
{
       
        //kqzd();
        /***************************************/
       
        cshdk();
        csh128();
        ys(500);
        xzr(0x80);

        /***************************************/
        cshdk();
        cshSPI();
        xrsj(0xd5e3);
       
        while(1)
        {
       
                ys(1000);
                xrsj(0x0000);
                /**********************************/
                //hc=0x0002;//显示测试没问题
                xssj[0]=(hc&0x00ff)+'0';
                xssj[1]=(hc>>8)+'0';
               
                xsj(xssj[0]);
                ys(500);
                xsj(xssj[1]);
                 while(1) ;
                /**********************************/
        }

}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
初学小弟
2019-07-15 19:36
本帖最后由 初学小弟 于 2016-4-12 12:23 编辑

#include<STC15W4K.h>
unsigned char SPI_SPIF=0;//传输标志位
short int hc;//缓存
/*************************************************/
sbit E=P0^2;
sbit RS=P0^0;
sbit RW=P0^1;
sbit RST=P1^3;
unsigned char xssj[3];
void ys(unsigned int yssj);
void mjc()//忙不忙啊大哥  这个是属于读数据使用需要看时图
{
        char jc;
        P2=0xff;
        E=0;//使能
        RS=0;//高电平是对数据进行操作,低电平时为命令操作
        RW=1;//读写控制
        E=1;
        jc=P2^7;
        while(jc==0)
        jc=P2^7;        //P2^7为0时 跳出
}
void xsj(unsigned char sj)//写数据
{
        
        
        mjc();
        E=0;
        RS=1;
        RW=0;
        E=1;
        P2=sj;
        ys(500);
        E=0;
}
void xzr(unsigned char zr)//写指令
{
        mjc();
        E=0;
        RS=0;
        RW=0;
        E=1;
        P2=zr;
        ys(500);
        E=0;
        
}
void csh128()//初始化128
{
        ys(1000);
        xzr(0x30);//初始一使用什么指令,是什么8io口还是4io口;
        ys(500);
        xzr(0x0c);//初始二怎么显示(开启显示,光标什么样子)
        ys(100);
        xzr(0x01);//初始三清屏,因为上次显示数据是存储在液晶里面的
        ys(1000);
        xzr(0x06);//初始四显示方向,从什么方向开始显示,******总结就是1用什么指令 2开启屏幕 3清屏 4这次怎么显示
        ys(500);
}




/*************************************************/

void cshdk()//初始化io
{
        P0M1 = 0;   P0M0 = 0;
        P1M1 = 0;   P1M0 =0;
        P2M1 = 0;   P2M0 =0;
}
void cshSPI()//初始化SPI
{
        SPDAT=0;//消除数据寄存器的数据
        SPSTAT=0xc0;//清除状态
        SPCTL=0Xd7;//设置主机和从机模式 设置时钟

}
void ys(unsigned int yssj)
{
        int cfbl;
        for(;yssj>0;yssj--)
                for(cfbl=0;cfbl<115;cfbl++);
}

/*void kqzd()//开启SPI中断
{
        
        EA=1;
        ESPI=1;
        //while(!(SPSTAT & 0x80));
        //hc=SPDAT;
}
void SPIzd(void) interrupt 9//SPI中断,传输完成后取数据
{
        ys(10);
        SPSTAT |= 0xC0;//
        hc=SPDAT;//获取数据
        ys(100);
        SPDAT=0x0000;
}*/

void xrsj(signed int sj)//交换数据
{
        
        P12=0;
        ys(500);
        SPDAT=(sj>>8);
        while(!(SPSTAT & 0x80));
        SPSTAT |= 0xC0;
        ys(500);
        hc=SPDAT;
        
        ys(500);
        SPDAT=(sj&0xff);
        while(!(SPSTAT & 0x80));
        SPSTAT |= 0xC0;
        ys(500);
        hc=(SPDAT<<8)|SPDAT;
        P12=1;
}

void main()
{
        
        //kqzd();
        /***************************************/
        
        cshdk();
        csh128();
        ys(500);
        xzr(0x80);

        /***************************************/
        P12=1;
        cshSPI();
        xrsj(0xd5e3);
        P12=1;
        while(1)
        {
                hc=0x8000;
                ys(1000);
                xrsj(0x0000);
                //hc=0x0002;
                /**********************************/
                ys(1000);
                xssj[0]=(hc&0x00ff)+'0';
                xssj[1]=(hc>>8)+'0';
               
                xsj(xssj[0]);
                ys(500);
                xsj(xssj[1]);
                 //while(1) ;
                /**********************************/
        }

}修改了下单片机的8位缓存


补充内容 (2016-4-12 20:35):
显示数据 //

一周热门 更多>