?? jiankong.c
字號:
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 + -