#include <reg51.h>
#include "LCD1602.h"
#include "uart.h"
#include "i2c.h"
#define uchar unsigned char
#define uint unsigned int
#define NOACK 0xaa
uchar LMH=0; //高低速
uchar FILESTATE=0;//文件状态
uchar filechoice=0;
uchar filenum=0;
uchar filenum1=0; //文件序号
uchar filename=0; //文件名
uchar filetotal=0; //文件总数
uint num ;
uint time;
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
unsigned char key_val(unsigned char key)
{
switch(key)
{
case 0xff: return 0;break;
case 0xee: return 1;break;
case 0xed: return 2;break;
case 0xeb: return 3;break;
case 0xe7: return 4;break;
case 0xde: return 5;break;
case 0xdd: return 6;break;
case 0xdb: return 7;break;
case 0xd7: return 8;break;
case 0xbe: return 9;break;
case 0xbd: return 10;break;
case 0xbb: return 11;break;
case 0xb7: return 12;break;
case 0x7e: return 13;break;
case 0x7d: return 14;break;
case 0x7b: return 15;break;
case 0x77: return 16;break;
default: return 0;break;
}
}
unsigned char key_scan(void)
{
unsigned char row, col;
P1 = 0xF0;
row = P1&0xF0;
row = row&0xF0;
P1 = 0x0F;
col = P1&0x0F;
col = col&0x0F;
return(row|col);
}
uchar key()
{
uchar keyvalue,keyvalue1;
keyvalue=key_scan();
if(keyvalue)
{
Delay1ms(50);
keyvalue1=key_scan(); //去抖动
if(keyvalue==keyvalue1){
return key_val(keyvalue);
}
}
return 0;
}
void Uart_init(void)
{
TMOD=0x20;
TH1=0xFD;//9600 11.0592MHz
TL1=0xFD;
TH1=0xF3; //2400 12MHz
//TL1=0xF9; //9600 , 12MHz
PCON=0x00;
TR1=1;
SCON=0x50;
}
/*
void Uart_init(void)
{
TMOD=0x20;
TH1=0xE6;
TL1=0xE6; //1200 , 12MHz
PCON=0x00;
TR1=1;
SCON=0x50;
}
*/
// 查询方式从串口接收数据
uchar Uart_getchar(void)
{
uint i=0;
while(!RI){i++;if(i>0x2fff)return 0;}//
RI=0;
return SBUF;
}
// 查询方式向串口发送数据
void Uart_putchar(uchar ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
// 向串口发送一个字符串
void Uart_putString(char *pt)
{
while(*pt)
Uart_putchar(*pt++);
}
//向串口发送一个整型数
void Uart_put_uint(uint num)
{
uchar a;
a=(num>>8)&0xff;
Uart_putchar(a);
a=num&0xff;
Uart_putchar(a);
}
//从串口接收一个整型数
uint Uart_get_uint(void)
{
uint num;
num=Uart_getchar();
num=num<<8;
num+=Uart_getchar();
return num;
}
//浮点数显示
void floatDisplay(uint t,uchar i)
{
uchar a[6];
a[0]=(t/10000)%10+'0'; //取得整数值到数组
a[1]=(t/1000)%10+'0'; //取得整数值到数组
a[2]=(t/100)%10+'0';
a[3]=(t/10)%10+'0';
a[4]=(t/1)%10+'0';
a[5]='\0';
switch(i)
{
case 0:LCD_Print(2,0,a);break;
case 1:LCD_Print(11,0,a);break;
case 2:LCD_Print(2,1,a);break;
default:break;
}
}
//显示单个数字函数************************************************************************
void LCD_Printnum(unsigned char x, unsigned char y,unsigned char num)
{
uchar a[2];
a[1]='\0';
a[0]=num+'0';
LCD_Print(x,y,a);
}
//XYZ坐标界面显示
void xyzDisplay(uchar i)
{
uint len,lastlen;
uchar count;
uchar j=0;
LCD_Print(0,0,"X:00000 Y:00000");
if(LMH==0)LCD_Print(0,1,"Z:00000 LOW");
else if(LMH==1)LCD_Print(0,1,"Z:00000 HI ");
count=key();
RI=0;
lastlen=len=0;
while(count!=10&&count!=14)
{
switch(count)
{
case 2: //开胶
if(i==0)
{
Uart_putchar('k');
while(count==key());
Uart_putchar('k'); //关胶
}
break;
case 3: //X+
RI=0;
Uart_putchar('5');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,0);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 12: //X-
RI=0;
Uart_putchar('6');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,0);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 8: //Y+
RI=0;
Uart_putchar('7');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,1);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 4: //Y-
RI=0;
Uart_putchar('8');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,1);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 15: //Z+
RI=0;
Uart_putchar('9');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,2);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 11: //Z-
RI=0;
Uart_putchar('a');
while(count==key())
{
RI=0;
Uart_putchar('y');
len=Uart_get_uint();
floatDisplay(len,2);
}
for(j=0;j<5;j++)Uart_putchar('x');
break;
case 7: //复位
Uart_putchar('2');
while(Uart_getchar()=='0');
floatDisplay(0,0);
floatDisplay(0,1);
floatDisplay(0,2);
break;
case 16: //SHF
while(count==key());
if(LMH==1)
{
LCD_Print(13,1,"LOW");
Uart_putchar('b');
LMH=0;
}
else if(LMH==0)
{
LCD_Print(13,1,"HI ");
Uart_putchar('b');
LMH=1;
}
break;
}
count=key();
}
if(i)
{
if(count==10)Uart_putchar('f'); //取消零点
else if(count==14)Uart_putchar('e');; //确定零点
}
}
//循环界面显示
void cycDisplay(uchar *p,uchar i)
{
switch(i)
{
case 0:LCD_Printnum(2,1,p[i]);break;
case 1:LCD_Printnum(3,1,p[i]);break;
case 2:LCD_Printnum(4,1,p[i]);break;
case 3:LCD_Printnum(5,1,p[i]);break;
case 4:LCD_Printnum(10,1,p[i]);break;
case 5:LCD_Printnum(11,1,p[i]);break;
case 6:LCD_Printnum(12,1,p[i]);break;
case 7:LCD_Printnum(14,1,p[i]);break;
default:break;
}
if(i<4) LCD_Write(LCD_COMMAND,0x80|(i+2)|0x40); //重新定位光标位置
else if(i==7) LCD_Write(LCD_COMMAND,0x80|(i+7)|0x40);
else LCD_Write(LCD_COMMAND,0x80|(i+6)|0x40);
}
//循环设置
void cycset()
{
uchar numflag=0; //循环加工次数选择标志
uchar timeflag=0; //间隔时间选择标志
uchar count = 0;
uchar t=0;
uchar a[8]={0,0,0,0,0,0,0,0};
uchar i;
num=AT24C02_read(filenum*5+1)<<8;
num+=AT24C02_read(filenum*5+2);
time=AT24C02_read(filenum*5+3)<<8;
time+=AT24C02_read(filenum*5+4);
t=a[0]=(num/1000)%10; //取得整数值到数组
t=a[1]=(num/100)%10;
t=a[2]=(num/10)%10;
t=a[3]=num%10;
t=a[4]=(time/1000)%10; //取得整数值到数组
t=a[5]=(time/100)%10;
t=a[6]=(time/10)%10;
t=a[7]=(time)%10;
LCD_Print(0,1,"N=**** T=***.*S");
LCD_SetDisplay(LCD_SHOW|LCD_CURSOR); //开启显示, 开光标显示
for(i=0;i<8;i++)cycDisplay(a,i);
i=0;
LCD_Write(LCD_COMMAND,0x80|(i-0x40));
count=key();
while(count!=10&&count!=14)
{
cycDisplay(a,i);
if(count)
{
while(count==key());
switch(count)
{
case 12: //X+
if(i<8)i++;
if(i==8) i=0;
break;
case 3: //X-
if(i>0)i--;
else if(i==0) i=7;
break;
case 8: //Y+
if(a[i]<10)a[i]++;
if(a[i]==10) a[i]=0;
break;
case 4: //Y-
if(a[i]>0)a[i]--;
else if(a[i]==0)a[i]=9;
break;
default:break;
}
}
count=key();
}
if(count==14)
{