#include <reg5240.h>
#include <string.h>
#include <intrins.h>
#include <math.h>
#include "keyboard.h"
#include "lcd.h"
#include "pcf8563.h"
#include "rs232.h"
#include"IC.h"
extern unsigned char rx_buf[10];
extern unsigned char SendData[8];
extern unsigned char table_rx[10];
extern unsigned char TIME[7];
extern char code KEY_CODE[24];
unsigned char DISP_BUF[4][24];
unsigned char ml[2]={0x10,0x05};
unsigned char key_pin1[6]={0x38,0x38,0x38,0x38,0x38,0x38};
unsigned char key_pin[6];
unsigned char ss[4]={0x30,0x30,0x30,0x30};
unsigned char qian[3]={0x30,0x30,0x36};
unsigned char key_index,key,status_flag,key_num=0,i,SEL_OPTION,m=0;
unsigned int zonge=600,xiaofeie=0,yue=600;
unsigned char flag=0,flag_1=0;
//===============================================
//菜单显示部分
//===============================================
extern bit XS_MODE_FLAG;
extern char code WELCOME[4][24];
extern char code CHAKA[4][24];
extern char code SMIMA[4][24];
extern char code CSMIMA[4][24];
extern char code XUANZHE[4][24];
extern char code SJINE[4][24];
extern char code YUEBUZU[4][24];
extern char code XSYUE[4][24];
extern char code QUEREN[4][24];
extern char code JIAOYI[4][24];
extern char code WANC[4][24];
extern char code CUOWU[4][24];
//==============================================================
//延时x微妙
//==============================================================
void delay_us(unsigned int x)
{
unsigned int i;
for(i=0;i<x;i++)
_nop_();
}
//==============================================================
//延时x毫妙
//==============================================================
void delay_ms(unsigned int x)
{
unsigned int i;
for(i=0;i<x;i++)
delay_us(1000);
}
//==============================================================
//延时x妙
//==============================================================
void delay_s(unsigned int x)
{
unsigned int i;
for(i=0;i<x;i++)
delay_ms(1000);
}
//==============================================================
//描述:
// 比较两个十六进制数组是否相同
//参数:
// s1——数组1的首地址
// s2——数组2的首地址
// length——数组的长度
//==============================================================
unsigned char compare_two_array(unsigned char *s1,unsigned char *s2,unsigned char length)
{
unsigned char i;
i=0;
while( (*(s1+i)==*(s2+i))&& (i<length) )
i++;
if(i==length)
return 1;
else
return 0;
}
//==============================================================
//描述:
// 两个十六进制数组拷贝
//参数:
// s1——源串
// s2——目的串
// length——拷贝长度
//==============================================================
void copy_between_two_array(unsigned char *s1,unsigned char *s2,unsigned char length)
{
unsigned char i;
for(i=0;i<length;i++)
*(s2+i)=*(s1+i);
}
void disp_buf_load(unsigned char *p1,unsigned char start_line,unsigned char x)
{
unsigned char i,j;
for(i=0;i<x;i++)
{
for(j=0;j<24;j++)
DISP_BUF[start_line+i][j]=*(p1+i*24+j);
}
}
void clear()
{
unsigned char j;
key_num=0;
m=0;
for(j=0;j<6;j++)
key_pin[j]=0x20;
for(j=1;j<4;j++)
ss[j]=0x30;
}
unsigned char shumima()
{
all_screen_display(&SMIMA[0][0]);
while(1)
{
key_index=keyboard_scan_task();
if(key_index==0xff)
continue;
else
{
key=KEY_CODE[key_index];
if(key==0x1b) //cancle
{
clear();
return 0;
break;
}
else if(key==0x08) //Backspace
{
switch(key_num)
{
case 1:key_pin[0]=0x20;location_display(3,23,0x20,0);key_num--;break;
case 2:key_pin[0]=key_pin[1];key_pin[1]=0x20;location_display(3,22,0x20,0);key_num--;break;
case 3:key_pin[0]=key_pin[1];key_pin[1]=key_pin[2];key_pin[2]=0x20;location_display(3,21,0x20,0);key_num--;break;
case 4:key_pin[0]=key_pin[1];key_pin[1]=key_pin[2];key_pin[2]=key_pin[3];key_pin[3]=0x20;location_display(3,20,0x20,0);key_num--;break;
case 5:key_pin[0]=key_pin[1];key_pin[1]=key_pin[2];key_pin[2]=key_pin[3];key_pin[3]=key_pin[4];key_pin[4]=0x20;location_display(3,19,0x20,0);key_num--;break;
case 6:key_pin[0]=key_pin[1];key_pin[1]=key_pin[2];key_pin[2]=key_pin[3];key_pin[3]=key_pin[4];key_pin[4]=key_pin[5];key_pin[5]=0x20;location_display(3,18,0x20,0);key_num--;break;
default:break;
}
}
else if( (key>=0x30) && (key<=0x39) )
{
key_pin[key_num++]= key;
location_display(3,24-key_num,'*',0);
}
else if(key==0x0d)
{
if(key_num==6 && compare_two_array(&key_pin1[0],&key_pin[0],6)) //密码正确
{
return 1;
break;
}
else
{
all_screen_display(&CSMIMA[0][0]);
key_num=0;
for(i=0;i<6;i++)
key_pin[i]=0x20;
continue;
}
}
}
}
}
void qr()
{
while(1)
{
key_index=keyboard_scan_task();
if(key_index==0xff)
{
disp_buf_load(&QUEREN[0][0],0,4);
DISP_BUF[2][15]=ss[1];
DISP_BUF[2][14]=ss[2];
DISP_BUF[2][13]=ss[3];
all_screen_display( & DISP_BUF[0][0]);
}
else
{
key=KEY_CODE[key_index];
if(key==0x1b)
{
SEL_OPTION=0x20;
clear();
break;
}
else if(key==0x0d)
{
all_screen_display(&JIAOYI[0][0]);
delay_ms(5000);
zonge=(qian[2]-0x30)*100+(qian[1]-0x30)*10+(qian[0]-0x30);
xiaofeie=(ss[3]-0x30)*100+(ss[2]-0x30)*10+(ss[1]-0x30);
yue=yue-xiaofeie;
qian[0]=yue%10+0x30;
qian[1]=yue/10%10+0x30;
qian[2]=yue/100+0x30;
all_screen_display(&WANC[0][0]);
delay_ms(1000);
// IDC_TUIKA();
flag_1=1;
break;
}
}
// delay_ms(1);
}
}
void jiayou()
{
all_screen_display(&SJINE[0][0]);
while(1)
{
key_index=keyboard_scan_task();
if(key_index==0xff)
continue;
else
{
key=KEY_CODE[key_index];
if(key==0x1b)
{
SEL_OPTION=0x20;
clear();
location_display(3,21,0x20,0);location_display(3,22,0x20,0);location_display(3,23,0x20,0); //cancel
break;
}
else if(key==0x08)
{
if(m==3)
{
m=m-1;
ss[1]=ss[2];ss[2]=ss[3];ss[3]=0x30;
location_display(3,23,ss[1],0);
location_display(3,22,ss[2],0);
location_display(3,21,0x20,0);
}
else if(m==2)
{
m=m-1;
ss[1]=ss[2];ss[2]=0x30;
location_display(3,23,ss[1],0);
location_display(3,22,0x20,0);
}
else if(m==1)
{
m=m-1;
ss[1]=0x30;
location_display(3,23,0x20,0);
}
} //clear
else if( (key>=0x30) && (key<=0x39) )
{
m++;
switch(m)
{
case 1:ss[1]=key;location_display(3,23,ss[1],0);key=0xff;break;
case 2:ss[2]=ss[1];ss[1]=key;location_display(3,22,ss[2],0);location_display(3,23,ss[1],0);key=0xff;break;
case 3:ss[3]=ss[2];ss[2]=ss[1];ss[1]=key;location_display(3,21,ss[3],0);location_display(3,22,ss[2],0);location_display(3,23,ss[1],0);key=0xff;break;
default:break;
}
}
else if(key==0x0d)
{
if(((ss[3]-0x30)*100)<yue && ((ss[3]-0x30)*100+(ss[2]-0x30)*10+(ss[1]-0x30)>0))
qr();
else if((ss[3]==0x30) && (ss[2]==0x30) && (ss[1]==0x30))
all_screen_display(&CUOWU[0][0]);
else
{
m=0;
ss[1]=0x30;ss[2]=0x30;ss[3]=0x30;
all_screen_display(&YUEBUZU[0][0]);
}
}
}
if(flag_1==1)
{
flag_1=0;
break;
}
}
}
//===============================================================
//主程序