📄 jiankong.c.bak
字号:
DISPLAY_D3 = dataA&0x08;
DISPLAY_D2 = dataA&0x04;
DISPLAY_D1 = dataA&0x02;
DISPLAY_D0 = dataA&0x01;
DISPLAY_WR = 0x0;
DISPLAY_WR = 0x1;
}
void ClearScreen() //Clear Screen
{
uint i, j;
uchar y = 0, yHigh = 0;
for(i = 0; i < 480; i ++)
{
WriteAddrToLcd(0, 0);
WriteAddrToLcd(1, 0);
WriteAddrToLcd(2, y);
WriteAddrToLcd(3, yHigh);
//multiWrite
for(j = 0; j < 80; j ++)
WriteMultiDataToLcd(6, 0xFF);
if(y == 255)
{
y = 0;
yHigh = 1;
}
else
y ++;
}
}
void SetPosXY(uint x, uint y) //Set position
{
WriteAddrToLcd(0, x&0x00ff);
WriteAddrToLcd(1, (x&0x0300) >> 8);
WriteAddrToLcd(2, y&0x00ff);
WriteAddrToLcd(3, (y&0x0100) >> 8);
}
void WriteMultiWord(uint x, uint y, uint xNum, uint yNum, uchar *pData) //write word at Screen
{
uint i, j;
//
for(i = 0; i < yNum; i ++)
{
//write addr
SetPosXY(x, y);
for(j = 0; j < xNum; j ++)
WriteMultiDataToLcd(6, pData[i*xNum + j]);
y ++;
}
}
void Write3Digit(uint x, uint y, uchar num) //write word at Screen
{
uchar i, digit, posX = x, posY = y;
//
digit = num/100;
for(i = 0; i < 15; i ++)
{
//write addr
SetPosXY(posX, posY);
WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
posY ++;
}
posY = y;
posX = x + 10;
digit = (num%100)/10;
for(i = 0; i < 15; i ++)
{
//write addr
SetPosXY(posX, posY);
WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
posY ++;
}
posY = y;
posX = x + 20;
digit = (num%100)%10;
for(i = 0; i < 15; i ++)
{
//write addr
SetPosXY(posX, posY);
WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
posY ++;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//I2C
////////////////////////////////////////////////////////////////////
//起动总线函数原型: void Start_I2c()
//功能: 启动I2C总线,即发送I2C起始条件
////////////////////////////////////////////////////////////////////
void Start_I2c()
{
SDA=1; //发送起始条件的数据信号
_Nop();
SCL=1;
_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //起始条件建立时间大于4.7us,延时
SDA=0; //发送起始信号
_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); // 起始条件锁定时间大于4μs
SCL=0; //钳住I2C总线,准备发送或接收数据
_Nop(); _Nop();
}
//////////////////////////////////////////////////////////////////////
//结束总线函数原型: void Stop_I2c();
//功能: 结束I2C总线,即发送I2C结束条件
///////////////////////////////////////////////////////////////////////
void Stop_I2c()
{
SDA=0; //发送结束条件的数据信号
_Nop();
SCL=1; //发送结束条件的时钟信号
_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //结束条件建立时间大于4μs
SDA=1; //发送I2C总线结束信号
_Nop(); _Nop(); _Nop(); _Nop(); _Nop();
}
/////////////////////////////////////////////////////////////////////
//字节数据传送函数原型: void SendByte(uchar c);
//功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
// 此状态位进行操作.(不应答或非应答都使ack=0 假)
// 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
//////////////////////////////////////////////////////////////////////
void SendByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位
{
if((c<<BitCnt)&0x80) SDA=1; //判断发送位
else SDA=0;
_Nop();
SCL=1; //置时钟线为高,通知被控器开始接收数据位
_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //保证时钟高电平周期大于4μs
SCL=0;
}
_Nop(); _Nop();
SDA=1; //8位发送完后释放数据线,准备接收应答位
_Nop(); _Nop();
SCL=1;
_Nop(); _Nop(); _Nop();
if(SDA==1) ack=0;
else ack=1; //判断是否接收到应答信号
SCL=0;
_Nop(); _Nop();
}
//////////////////////////////////////////////////////////////////////////
//字节数据接收函数原型: uchar RcvByte();
//功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
// 发完后请用应答函数。
///////////////////////////////////////////////////////////////////////////
uchar RcvByte()
{
uchar retc = 0;
uchar BitCnt;
SDA=1; //置数据线为输入方式
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0; //置时钟线为低,准备接收数据位
_Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //时钟低电平周期大于4.7μs
SCL=1; //置时钟线为高使数据线上数据有效
_Nop(); _Nop();
retc = retc<<1;
if(SDA==1) retc=retc+1; //读数据位,接收的数据位放入retc中
_Nop(); _Nop();
}
SCL=0;
_Nop(); _Nop();
return(retc);
}
///////////////////////////////////////////////////////////////////////////
//应答子原型: void Ack_I2c(bit a);
//功能: 主控器进行应答信号,(可以是应答或非应答信号)
////////////////////////////////////////////////////////////////////////////
void Ack_I2c(bit a)
{
if(a==0) SDA=0; //在此发出应答或非应答信号
else SDA=1;
_Nop(); _Nop(); _Nop();
SCL=1;
_Nop(); _Nop(); _Nop(); _Nop();_Nop(); //时钟低电平周期大于4μs
SCL=0; //清时钟线,钳住I2C总线以便继续接收
_Nop(); _Nop();
}
/////////////////////////////////////////////////////////////////////////
//向无子地址器件发送字节数据函数原型: bit ISendByte(uchar sla,ucahr c);
//功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
// 如果返回1表示操作成功,否则操作有误。
//注意: 使用前必须已结束总线。
/////////////////////////////////////////////////////////////////////////
bit ISendByte(uchar sla,uchar c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0) return(0);
SendByte(c); //发送数据
if(ack==0) return(0);
Stop_I2c(); //结束总线
return(1);
}
//////////////////////////////////////////////////////////////////////////////
//向无子地址器件读字节数据函数原型: bit IRcvByte(uchar sla,ucahr *c);
//功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
// 址sla,返回值在c.
// 如果返回1表示操作成功,否则操作有误。
//注意: 使用前必须已结束总线。
///////////////////////////////////////////////////////////////////////////////
bit IRcvByte(uchar sla,uchar *c)
{
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0) return(0);
*c=RcvByte(); //读取数据
Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(1);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//watch dog
/*void x5045_outbyte(unsigned char wr_data)
{
unsigned char loop;
unsigned char tmp_x;
tmp_x=1;
for(loop=8;loop>0;loop--)
{
WD_SCK=0;
if((wr_data&(tmp_x<<(loop-1)))!=0)
{
WD_SI=1;
}
else
{
WD_SI=0;
}
WD_SCK=1;
}
WD_SI=0;
}
unsigned char x5045_inbyte(void)
{
unsigned char loop;
unsigned char tmp_x;
tmp_x=0;
for(loop=8;loop>0;loop--)
{
WD_SCK=1;
WD_SCK=0;
tmp_x<<=1;
if(WD_SO!=0)
{
tmp_x+=1;
}
}
return tmp_x;
}
void x5045_wren_cmd()
{
WD_SCK=0;
WD_CS=0;
x5045_outbyte(WREN);
WD_SCK=0;
WD_CS=1;
}
unsigned char x5045_rdsr_cmd()
{
unsigned char tmp_x;
WD_SCK=0;
WD_CS=0;
x5045_outbyte(RSDR);
tmp_x=x5045_inbyte();
WD_SCK=0;
WD_CS=1;
return tmp_x;
}
void x5045_wip_poll(void)
{
unsigned char loop;
unsigned char tmp_x;
for(loop=0;loop<MAX_POLL;loop++)
{
tmp_x=x5045_rdsr_cmd();
if((tmp_x&0x01)==0)
{
return;
}
}
}
void x5045_wrsr_cmd()
{
WD_SCK=0;
WD_CS=0;
x5045_outbyte(WRSR);
x5045_outbyte(STATUS_REG);
WD_SCK=0;
WD_CS=1;
x5045_wip_poll();
}*/
/*void x5045_page_write(unsigned int address,unsigned char *p,unsigned char number)
{
unsigned char loop;
unsigned char d1,d2;
unsigned char *k;
k=p;
WD_SCK=0;
WD_CS=0;
number&=0x1f;
d1=(address>>8)&0x01;
d1<<=3;
d1|=WRITE;
d2=(address&0x00ff);
x5045_outbyte(d1);
x5045_outbyte(d2);
for(loop=0;loop<number;loop++)
{
x5045_outbyte(*k);
k++;
}
WD_SCK=0;
WD_CS=1;
x5045_wip_poll();
return;
}
void x5045_page_read(unsigned int address,unsigned char *p,unsigned char number)
{
unsigned char loop;
unsigned char d1,d2;
unsigned char *k;
k=p;
WD_SCK=0;
WD_CS=0;
number&=0x1f;
d1=(address>>8)&0x01;
d1<<=3;
d1|=READ;
d2=(address&0x00ff);
x5045_outbyte(d1);
x5045_outbyte(d2);
for(loop=0;loop<number;loop++)
{
*k=x5045_inbyte();
k++;
}
WD_SCK=0;
WD_CS=1;
return;
}*/
/*void x5045_rst_wdog()
{
//WD_WP=1;
WD_CS=0;
WD_CS=1;
//WD_WP=1;
return;
}
/////////////////////
void x5045_initial()
{
//WD_WP=1;
WD_CS=1;
WD_SO=1;
WD_SCK=0;
WD_SI=0;
x5045_wren_cmd();
x5045_wrsr_cmd();
//WD_WP=1;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -