?? venus.c
字號:
case 2:{;}break;
}
}break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:{
move_data(&lcd_buf[1],&lcd_buf[0],7); //YIWEI
lcd_buf[7]=i|0x10;
move_data(&lcd_buf,&xtcs_x[counter_new][0],8); //SAVE
print_e(MENU_DIS[counter_new]);
}break;
}
print_fill(menu_add[counter_old],0x00,0x8,0x9);
}
}
gzsd() //故障設(shè)定
{
unsigned char code TABLE01[5]={24,25,26,27,0xFF};//故障設(shè)定
unsigned char code TABLE02[15]={29,30,0xfe,0xfe,0xfe,29,30,0xfe,0xfe,0xfe,0xfe,31,32,0xFF};//系統(tǒng)電壓
unsigned int code MENU_DIS[18]={154,163,172,
214,223,232,
274,283,292,
334,343,352,
394,403,412,
454,463,472,
};//菜單顯示位置數(shù)組
unsigned char xdata gzsd_x[18][9]; //設(shè)置數(shù)據(jù)存放數(shù)組
unsigned int xdata menu_add[18]; //激活塊地址數(shù)組 menu_add=(MENU_DIS/30)*240+(MENU_DIS%30)
unsigned char i,counter_old,counter_new;
bit off,first_char;
off=1;
first_char=1;
load_data(cshsj_page,&gzsd_c,0,&gzsd_x,162); //裝初始設(shè)置數(shù)據(jù)
menu_add[0]=(MENU_DIS[0]/30)*240+(MENU_DIS[0]%30);
menu_add[1]=(MENU_DIS[1]/30)*240+(MENU_DIS[1]%30);
menu_add[2]=(MENU_DIS[2]/30)*240+(MENU_DIS[2]%30);
menu_add[3]=(MENU_DIS[3]/30)*240+(MENU_DIS[3]%30);
menu_add[4]=(MENU_DIS[4]/30)*240+(MENU_DIS[4]%30);
menu_add[5]=(MENU_DIS[5]/30)*240+(MENU_DIS[5]%30);
menu_add[6]=(MENU_DIS[6]/30)*240+(MENU_DIS[6]%30);
menu_add[7]=(MENU_DIS[7]/30)*240+(MENU_DIS[7]%30);
menu_add[8]=(MENU_DIS[8]/30)*240+(MENU_DIS[8]%30);
menu_add[9]=(MENU_DIS[9]/30)*240+(MENU_DIS[9]%30);
menu_add[10]=(MENU_DIS[10]/30)*240+(MENU_DIS[10]%30);
menu_add[11]=(MENU_DIS[11]/30)*240+(MENU_DIS[11]%30);
menu_add[12]=(MENU_DIS[12]/30)*240+(MENU_DIS[12]%30);
menu_add[13]=(MENU_DIS[13]/30)*240+(MENU_DIS[13]%30);
menu_add[14]=(MENU_DIS[14]/30)*240+(MENU_DIS[14]%30);
menu_add[15]=(MENU_DIS[15]/30)*240+(MENU_DIS[15]%30);
menu_add[16]=(MENU_DIS[16]/30)*240+(MENU_DIS[16]%30);
menu_add[17]=(MENU_DIS[17]/30)*240+(MENU_DIS[17]%30);
counter_new=0x0;
counter_old=0x0;
lcd_cls(lcd_page1);
lcd_cls(lcd_page2);
load_data(0,&TABLE01,0,&lcd_buf,5);
print_c16(0x8);
load_data(0,&TABLE02,0,&lcd_buf,15);
print_c16(0x1E6);
lcd_buf[0]=0x35; //U
lcd_buf[1]=0x41; //a
lcd_buf[2]=0xff;
print_e(151);
lcd_buf[0]=0x35; //U
lcd_buf[1]=0x42; //b
lcd_buf[2]=0xff;
print_e(211);
lcd_buf[0]=0x35; //U
lcd_buf[1]=0x43; //c
lcd_buf[2]=0xff;
print_e(271);
lcd_buf[0]=0x29; //I
lcd_buf[1]=0x41; //a
lcd_buf[2]=0xff;
print_e(331);
lcd_buf[0]=0x29; //I
lcd_buf[1]=0x42; //b
lcd_buf[2]=0xff;
print_e(391);
lcd_buf[0]=0x29; //I
lcd_buf[1]=0x43; //c
lcd_buf[2]=0xff;
print_e(451);
move_data(&gzsd_x[0][0],&lcd_buf,9);
print_e(MENU_DIS[0]);
move_data(&gzsd_x[1][0],&lcd_buf,9);
print_e(MENU_DIS[1]);
move_data(&gzsd_x[2][0],&lcd_buf,9);
print_e(MENU_DIS[2]);
move_data(&gzsd_x[3][0],&lcd_buf,9);
print_e(MENU_DIS[3]);
move_data(&gzsd_x[4][0],&lcd_buf,9);
print_e(MENU_DIS[4]);
move_data(&gzsd_x[5][0],&lcd_buf,9);
print_e(MENU_DIS[5]);
move_data(&gzsd_x[6][0],&lcd_buf,9);
print_e(MENU_DIS[6]);
move_data(&gzsd_x[7][0],&lcd_buf,9);
print_e(MENU_DIS[7]);
move_data(&gzsd_x[8][0],&lcd_buf,9);
print_e(MENU_DIS[8]);
move_data(&gzsd_x[9][0],&lcd_buf,9);
print_e(MENU_DIS[9]);
move_data(&gzsd_x[10][0],&lcd_buf,9);
print_e(MENU_DIS[10]);
move_data(&gzsd_x[11][0],&lcd_buf,9);
print_e(MENU_DIS[11]);
move_data(&gzsd_x[12][0],&lcd_buf,9);
print_e(MENU_DIS[12]);
move_data(&gzsd_x[13][0],&lcd_buf,9);
print_e(MENU_DIS[13]);
move_data(&gzsd_x[14][0],&lcd_buf,9);
print_e(MENU_DIS[14]);
move_data(&gzsd_x[15][0],&lcd_buf,9);
print_e(MENU_DIS[15]);
move_data(&gzsd_x[16][0],&lcd_buf,9);
print_e(MENU_DIS[16]);
move_data(&gzsd_x[17][0],&lcd_buf,9);
print_e(MENU_DIS[17]);
while (off)
{
move_data(&gzsd_x[counter_new][0],&lcd_buf,9);
print_fill(menu_add[counter_new],0xff,0x8,0x8);
counter_old=counter_new;
i=getchar();
switch (i)
{
case LEFT:{ first_char=1;
if (counter_new==0) {counter_new=17;}
else {counter_new--;}
}break;
case ENTER:
case RIGHT:{ first_char=1;
if (counter_new<17) {counter_new++;}
else {counter_new=0x0;}
}break;
case UP:{ first_char=1;
if (counter_new>2) {counter_new=counter_new-3;}
else {counter_new=counter_new+15;}
}break;
case DOWN:{ first_char=1;
if (counter_new<15) {counter_new=counter_new+3;}
else {counter_new=counter_new-15;}
}break;
case ESC:{off=0;}break;
case START:{
switch (counter_new)
{
case 0:{;}break;
case 1:{;}break;
case 2:{;}break;
}
}break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:{
if (first_char)
{first_char=0;
lcd_buf[0]=0x00;
lcd_buf[1]=0x00;
lcd_buf[2]=0x00;
lcd_buf[3]=0x00;
lcd_buf[4]=0x00;
lcd_buf[5]=0x00;
lcd_buf[6]=0x00;
lcd_buf[7]=i|0x10;
move_data(&lcd_buf,&gzsd_x[counter_new][0],8); //SAVE
print_e(MENU_DIS[counter_new]);
}
else
{
move_data(&lcd_buf[1],&lcd_buf[0],7); //YIWEI
lcd_buf[7]=i|0x10;
move_data(&lcd_buf,&gzsd_x[counter_new][0],8); //SAVE
print_e(MENU_DIS[counter_new]);
}
}break;
}
print_fill(menu_add[counter_old],0x00,0x8,0x8);
}
}
long d_to_hex(unsigned char xdata *k)
{
unsigned char i,j;
float n,m;
n=0;
j=7;
for (i=0;i<8;i++)
{
if (k[i]==0xe) {j=i;break;}
}
for (i=7;i>j;i--)
{
n=n+(k[i]&0xf);
n=n/10;
}
m=0;
for (i=0;i<j;i++)
{
if (k[i]>=0x10) {m=m*10+(k[i]&0xf);}
}
m=m+n;
for (i=0;i<8;i++)
{
if (k[i]==0xd) {m=-m;break;}
}
return (m*0x10000);
}
/*---------------------------------------------
I2C總線驅(qū)動程序(用兩個普通IO模擬I2C總線)
----------------------------------------------*/
#define SDA P30
#define SCL P31
#define true 1
#define false 0
/*--------------------------------------------------------------------------------
調(diào)用方式:void I2CStart(void)
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void I2CStop(void)
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL=0; SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SDA=1;
EA=1;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:bit WaitAck(void)
函數(shù)說明:私有函數(shù),I2C專用,等待從器件接收方的應(yīng)答
---------------------------------------------------------------------------------*/
bit WaitAck(void)
{
unsigned char errtime=255;//因故障接收方無ACK,超時值為255。
SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
while(SDA)
{
errtime--;
if (!errtime) {I2CStop();return false;}
}
SCL=0;
return true;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void SendAck(void)
函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時,應(yīng)答信號。
---------------------------------------------------------------------------------*/
void SendAck(void)
{
SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void SendNotAck(void)
函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時,非應(yīng)答信號。
--------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void I2CSendByte(unsigned char x)
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
void I2CSendByte(unsigned char x)
{
unsigned char i=8;
while (i--)
{
SCL=0;_nop_();
SDA=(bit)(x&0x80); x<<=1; _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:uchar I2CReceiveByte(void)
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
unsigned char I2CReceiveByte(void)
{
unsigned char i=8;
unsigned char j=0;
SDA=1;
while (i--)
{
j<<=1;
SCL=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
j|=SDA;
}
SCL=0;
return j;
}
//---------------------------------------------------------------------------
//開始PCF8563T驅(qū)動程序
/*--------------------------------------------------------------------------------
調(diào)用方式:void GetPCF8563(unsigned char *buff)
函數(shù)說明:讀取時鐘芯片PCF8563的時間
一次讀取秒、分、小時、日、星期、月(世紀)、年共7個值放入緩沖區(qū)buff
---------------------------------------------------------------------------------*/
void GetPCF8563(unsigned char *buff)
{
unsigned char i;
I2CStart();
I2CSendByte(0xA2);
WaitAck();
I2CSendByte(0x2); //從秒開始讀
WaitAck();
I2CStart();
I2CSendByte(0xA3);
WaitAck();
for (i=0;i<7;i++)
{
buff[i]=I2CReceiveByte();
if (i<6) SendAck();//除最后一個字節(jié)外,其他都要從MASTER發(fā)應(yīng)答。
}
SendNotAck();
I2CStop();
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void SetPCF8563(unsigned char timetype,unsigned char value)
函數(shù)說明:調(diào)整時鐘。timetype是要改的時間類型,value是新設(shè)置的時間值(BCD格式)。
0x02:秒/0x03:分/0x04:小時/0x05:日/0x06:星期/0x07:月(世紀)/0x08:年
---------------------------------------------------------------------------------*/
void SetPCF8563(unsigned char timetype,unsigned char value)
{
I2CStart();
I2CSendByte(0xA2);
WaitAck();
I2CSendByte(timetype);
WaitAck();
I2CSendByte(value);
WaitAck();
I2CStop();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -