📄 mypro.c
字号:
keytmp = namekey(); //读键值
switch ( keytmp)
{
case 1 : //上键,减少数字
switch ( KeyPosition )//光标起始位置
{
case 0: //光标在年的十位
if ( year10 >= 9 ) //9+1=0
year10 = 0;
else
year10++;
df(4,Yp[0],year10,1);
utime[0] = year10;
break;
case 1: //光标在年的个位
if ( year1 >= 9 )
year1 = 0;
else
year1++;
df(4,Yp[1],year1,1);
utime[1] = year1;
break;
case 2: //光标在月的十位
if ( month10 >= 1 ) //月_十位=0,1
month10 = 0;
else
month10++;
df(4,Yp[2],month10,1);
utime[2] = month10;
break;
case 3: //光标在月的个位
if ( month1 >= 9 )
month1 = 0;
else
month1++;
df(4,Yp[3],month1,1);
utime[3] = month1;
break;
case 4: //光标在日的十位
if ( day10 >= 3 ) //日_十位=0,1,2,3
day10 = 0;
else
day10++;
df(4,Yp[4],day10,1);
utime[4] = day10;
break;
case 5: //光标在日的个位
if ( day1 >= 9 )
day1 = 0;
else
day1++;
df(4,Yp[5],day1,1);
utime[5] = day1;
break;
case 6: //光标在时的十位
if ( hour10 >= 2 ) //时_十位=0,1,2
hour10 = 0;
else
hour10++;
df(4,Yp[6],hour10,1);
utime[6] = hour10;
break;
case 7: //光标在时的个位
if ( hour1 >= 9 )
hour1 = 0;
else
hour1++;
df(4,Yp[7],hour1,1);
utime[7] = hour1;
break;
case 8: //光标在分的十位
if ( minute10 >= 5 ) //分_十位=0,1,2,3,4,5
minute10 = 0;
else
minute10++;
df(4,Yp[8],minute10,1);
utime[8] = minute10;
break;
case 9: //光标在分的个位
if ( minute1 >= 9 )
minute1 = 0;
else
minute1++;
df(4,Yp[9],minute1,1);
utime[9] = minute1;
break;
}
break;
case 2 : //下键,增加数字
switch ( KeyPosition )
{
case 0: //光标在年的十位
if ( year10 == 0 )
year10 = 9;
else
year10--;
df(4,Yp[0],year10,1);
utime[0] = year10;
break;
case 1: //光标在年的个位
if ( year1 == 0 )
year1 = 9;
else
year1--;
df(4,Yp[1],year1,1);
utime[1] = year1;
break;
case 2: //光标在月的十位
if ( month10 == 0 ) //月_十位=0,1
month10 = 1;
else
month10--;
df(4,Yp[2],month10,1);
utime[2] = month10;
break;
case 3: //光标在月的个位
if ( month1 == 0 )
month1 = 9;
else
month1--;
df(4,Yp[3],month1,1);
utime[3] = month1;
break;
case 4: //光标在日的十位
if ( day10 == 0 ) //日_十位=0,1,2,3
day10 = 3;
else
day10--;
df(4,Yp[4],day10,1);
utime[4] = day10;
break;
case 5: //光标在日的个位
if ( day1 == 0 )
day1 = 9;
else
day1--;
df(4,Yp[5],day1,1);
utime[5] = day1;
break;
case 6: //光标在时的十位
if ( hour10 == 0 ) //时_十位=0,1,2
hour10 = 2;
else
hour10--;
df(4,Yp[6],hour10,1);
utime[6] = hour10;
break;
case 7: //光标在时的个位
if ( hour1 == 0 )
hour1 = 9;
else
hour1--;
df(4,Yp[7],hour1,1);
utime[7] = hour1;
break;
case 8: //光标在分的十位
if ( minute10 == 0 ) //分_十位=0,1,2,3,4,5
minute10 = 5;
else
minute10--;
df(4,Yp[8],minute10,1);
utime[8] = minute10;
break;
case 9: //光标在分的个位
if ( minute1 == 0 )
minute1 = 9;
else
minute1--;
df(4,Yp[9],minute1,1);
utime[9] = minute1;
break;
}
break;
case 3 : //右移键
if ( KeyPosition == 9) //光标停留在分的个位
{
df(4,Yp[KeyPosition],utime[KeyPosition],0); //将该位数字正显
KeyPosition = 0; //该值复0,即将光标移到首位(年之十位)
df(4,Yp[KeyPosition],utime[KeyPosition],1);//将首位数字反显
break ;
}
else
df(4,Yp[KeyPosition],utime[KeyPosition],0); //将该位数字正显
KeyPosition++;
df(4,Yp[KeyPosition],utime[KeyPosition],1); //将该位数字反显
break;
case 4:
Time_Dispose_Set(); //返回键,确认已设置的时间,并返回主菜单
lcd_init();
program_1(); //返回主菜单
return;
}
}
}
void Time_Dispose_Set() //将年、月、日、时、分各位数字显示缓存区的数合并,并保存
{
P8563_Store[0] = minute10<<4 | minute1; //分=十位分*16+个位分
P8563_Store[1] = hour10<<4 | hour1; //时=十位时*16+个位时
P8563_Store[2] = day10<<4 | day1; //日=十位日*16+个位日
P8563_Store[3] = month10<<4 |month1; //月=十位月*16+个位月
P8563_Store[4] = year10<<4 | year1; //年=十位年*16+个位年
P8563_settime(); //数字送器件8563内部寄存器
}
//写时间修改值
void P8563_settime()
{
ISendByte3(0xa2,0x00,0x00);
ISendByte3(0xa2,0x03,P8563_Store[0]);//分
ISendByte3(0xa2,0x04,P8563_Store[1]);//时
ISendByte3(0xa2,0x05,P8563_Store[2]);//日
ISendByte3(0xa2,0x07,P8563_Store[3]);//月
ISendByte3(0xa2,0x08,P8563_Store[4]);//年
}
//刷新时间
void time()
{
Time_Dispose_Read(); //读PCF8563万年历时间
dxz(0,96,2,0);
dxz(0,102,0,0);
//dxz(0,100,10,0);
dxz(0,108,year10,0); //显示年月日
dxz(0,114,year1,0);
dxz(0,120,10,0);
dxz(0,126,month10,0);
dxz(0,132,month1,0);
dxz(0,138,10,0);
dxz(0,144,day10,0);
dxz(0,150,day1,0);
dxz(0,162,hour10,0); //显示时分
dxz(0,168,hour1,0);
dxz(0,174,11,0);
dxz(0,180,minute10,0);
dxz(0,186,minute1,0);
}
//读出的数据分离赋值给各显示缓冲区
void Time_Dispose_Read()
{
P8563_gettime();
minute1 = P8563_Store[0] & 0x0f;
minute10 = P8563_Store[0]>>4 & 0x07;
hour1 = P8563_Store[1] & 0x0f;
hour10 = P8563_Store[1]>>4 & 0x03;
day1 = P8563_Store[2] & 0x0f;
day10 = P8563_Store[2]>>4 & 0x03;
month1 = P8563_Store[3] & 0x0f;
month10 = P8563_Store[3]>>4 & 0x01;
year1 = P8563_Store[4] & 0x0f;
year10 = P8563_Store[4]>>4 & 0x0f;
}
//读入时间到内部缓冲区----外部调用
void P8563_gettime()
{
P8563_Read();
if(P8563_Store[0]==0)
P8563_Read(); /*如果为分=0,为防止时间变化,再读一次*/
}
//内部函数,读入时间到内部缓冲区
void P8563_Read()
{
P8563_Store[0]=IRcvByte2(0xa2,0x03);/*分*/
P8563_Store[1]=IRcvByte2(0xa2,0x04);/*时*/
P8563_Store[2]=IRcvByte2(0xa2,0x05);/*日*/
P8563_Store[3]=IRcvByte2(0xa2,0x07);/*月*/
P8563_Store[4]=IRcvByte2(0xa2,0x08);/*年*/
}
void test() //启动进入测试程序
{
uchar key = 0;
EX1=1; //开外部中断,INT1---1mA到,INT0---故障报警
EX0=1;
disanping(); //测试中
//升压
if ( !daFlag ) //1mA到,外部中断1响应中断,置flag为1
{
while( daCount < 1024 ) //判断10位DAC寄存器内值是否达到最大值1024,即已到5V
{
if ( read2543(1) < 2048 ) //升压速度以高压电流达到500μA为界限
{
daCount = daCount + 16;
tlc5615(daCount); //全速升压
delay1ms(10);
Shipin_UI_dispose(); //处理电流电压读数 显示
disanping();
}
else
{
daCount = daCount + 8;
tlc5615(daCount); //半速升压
delay1ms(10);
Shipin_UI_dispose();
disanping();
}
}
if(daCount >= 1024)
shipin_error_dispose(); //电压到30KV 电流未达1mA 处理程序
}
delay1ms(255);
delay1ms(255);
delay1ms(255);
delay1ms(255);
disiping(); //测试结果
do //等待返回键被按下
{key=namekey();}
while(key!=4);
program_1();
}
void disanping() //测试界面
{
battery(); //显示电池电量
time(); //显示实时时间
dh(0,0,33,0); //正在测试中:
dh(0,16,34,0);
dh(0,32,10,0);
dh(0,48,11,0);
dh(0,64,35,0);
df(0,80,24,0);
df(3,58,25,0); //U=XX.XKV
df(3,70,26,0); //=
df(3,98,22,0); //.
df(3,118,27,0); //K
df(3,126,28,0); //V
df(6,58,29,0); //I=XXXuA
df(6,70,26,0); //=
df(6,118,30,0); //u
df(6,126,31,0); //A
}
void xianshi() //显示测试过程的电压电流
{
df(3,82,TmpBuf[0],0); //显示电压
df(3,90,TmpBuf[1],0);
df(3,106,TmpBuf[2],0);
df(6,82,TmpBuf[3],0); //显示电流
df(6,90,TmpBuf[4],0);
df(6,98,TmpBuf[5],0);
df(6,106,TmpBuf[6],0);
}
void disiping() //测试结果
{
lcd_init() ; //清上一屏
battery(); //显示电池电量
time(); //显示实时时间
dh(0,0,10,0); //测试结果:
dh(0,16,11,0);
dh(0,32,37,0);
dh(0,48,38,0);
df(0,64,24,0);
df(3,46,25,0); //U1mA=XX.XKV
dxz(4,54,12,0);
dxz(4,62,13,0);
dxz(4,70,14,0);
df(3,82,26,0);
df(3,130,27,0);
df(3,138,28,0);
df(6,46,29,0); //I,I0.75U= uA
dxz(7,52,15,0); //0.
dxz(7,60,16,0); //7
dxz(7,66,17,0); //5
dxz(7,72,18,0); //U
df(6,82,26,0); //=
df(6,130,30,0); //u
df(6,138,31,0); //A
}
void history()//进入历史查询
{
uchar key = 0;
ET0 = 0; //关定时器0中断,不显示时间和电池电量
Dis_history();//进入历史查询界面
do //等待返回键被按下
{key=namekey();}
while(key!=4);
program_1();
}
void Dis_history() //历史查询显示内容
{
lcd_init() ; //清上一屏
dh(0,52,24,0); //历史数据
dh(0,68,32,0);
dh(0,76,25,0);
dh(0,92,32,0);
dh(0,100,26,0);
dh(0,116,32,0);
dh(0,124,27,0);
//显示8*8点阵数字1. U=27.5KV I=25μA 17:25
dxz(2,0,1,0); //1
dxz(2,8,19,0);//.
// dxz(2,16,20,0);//空格
dxz(2,16,18,0);//U
dxz(2,24,21,0);//=
dxz(2,32,2,0);//2
dxz(2,40,7,0);//7
dxz(2,48,19,0);//.
dxz(2,56,5,0);//5
dxz(2,62,22,0);//K
dxz(2,70,23,0);//V
dxz(2,78,20,0);//空格
dxz(2,86,24,0);//I
dxz(2,94,21,0);//=
dxz(2,102,2,0);//2
dxz(2,110,5,0);//5
dxz(2,118,25,0);//u
dxz(2,126,14,0);//A
dxz(2,132,20,0);//空格
dxz(2,140,20,0);//空格
dxz(2,148,1,0);//1
dxz(2,156,7,0);//7
dxz(2,164,11,0);//:
dxz(2,172,2,0);//2
dxz(2,180,5,0);//5
//显示8*8点阵数字1. U=27.5KV I=25μA 17:25
dxz(3,0,2,0); //1
dxz(3,8,19,0);//.
// dxz(2,16,20,0);//空格
dxz(3,16,18,0);//U
dxz(3,24,21,0);//=
dxz(3,32,2,0);//2
dxz(3,40,7,0);//7
dxz(3,48,19,0);//.
dxz(3,56,5,0);//5
dxz(3,62,22,0);//K
dxz(3,70,23,0);//V
dxz(3,78,20,0);//空格
dxz(3,86,24,0);//I
dxz(3,94,21,0);//=
dxz(3,102,2,0);//2
dxz(3,110,5,0);//5
dxz(3,118,25,0);//u
dxz(3,126,14,0);//A
dxz(3,132,20,0);//空格
dxz(3,140,20,0);//空格
dxz(3,148,1,0);//1
dxz(3,156,7,0);//7
dxz(3,164,11,0);//:
dxz(3,172,2,0);//2
dxz(3,180,5,0);//5
//显示8*8点阵数字1. U=27.5KV I=25μA 17:25
dxz(4,0,3,0); //1
dxz(4,8,19,0);//.
// dxz(2,16,20,0);//空格
dxz(4,16,18,0);//U
dxz(4,24,21,0);//=
dxz(4,32,2,0);//2
dxz(4,40,7,0);//7
dxz(4,48,19,0);//.
dxz(4,56,5,0);//5
dxz(4,62,22,0);//K
dxz(4,70,23,0);//V
dxz(4,78,20,0);//空格
dxz(4,86,24,0);//I
dxz(4,94,21,0);//=
dxz(4,102,2,0);//2
dxz(4,110,5,0);//5
dxz(4,118,25,0);//u
dxz(4,126,14,0);//A
dxz(4,132,20,0);//空格
dxz(4,140,20,0);//空格
dxz(4,148,1,0);//1
dxz(4,156,7,0);//7
dxz(4,164,11,0);//:
dxz(4,172,2,0);//2
dxz(4,180,5,0);//5
//显示8*8点阵数字1. U=27.5KV I=25μA 17:25
dxz(5,0,4,0); //1
dxz(5,8,19,0);//.
// dxz(2,16,20,0);//空格
dxz(5,16,18,0);//U
dxz(5,24,21,0);//=
dxz(5,32,2,0);//2
dxz(5,40,7,0);//7
dxz(5,48,19,0);//.
dxz(5,56,5,0);//5
dxz(5,62,22,0);//K
dxz(5,70,23,0);//V
dxz(5,78,20,0);//空格
dxz(5,86,24,0);//I
dxz(5,94,21,0);//=
dxz(5,102,2,0);//2
dxz(5,110,5,0);//5
dxz(5,118,25,0);//u
dxz(5,126,14,0);//A
dxz(5,132,20,0);//空格
dxz(5,140,20,0);//空格
dxz(5,148,1,0);//1
dxz(5,156,7,0);//7
dxz(5,164,11,0);//:
dxz(5,172,2,0);//2
dxz(5,180,5,0);//5
//显示8*8点阵数字1. U=27.5KV I=25μA 17:25
dxz(6,0,5,0); //1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -