#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) ;
/**********************************/
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>