📄 key._c
字号:
/************************************************************
FileName: KEY.c
Description: 键盘模块,实现时间的调整和参数的设置
Function List:
1.inchour() //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
2.incmin() //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
3.dechour() //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
4.decmin() //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
5.canbi0() //参比的正负设置
6.incanbizhengshu() //参比的整数加1
7.incanbixiaoshu() //参比的小数加1
8.decanbizhengshu() //参比的整数减1
9.decanbixiaoshu() //参比的小数减1
10.getkey() //获取按键值
11.getkeylock() //锁定按键并获取按键值
12.checkkey() //键盘处理函数
***************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "key.h"
#include "lcd.h"
#include "1302.h"
#include "6675.h"
#include "main.h"
extern unsigned char entercount,leftcount,rightcount;
extern unsigned char position1302,hh,mm,positioncanbi,canbianjian;
extern unsigned int time_array[6],canbi_array[5];
void inchour(void) //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
{
time_array[1]++;
if((time_array[0]==0x02)&&(time_array[1]==0x04))
{
time_array[1]=0x00;
time_array[0]=0x00;
}
if((time_array[0]!=0x02)&&(time_array[1]==0x0A))
{
time_array[0]++;
time_array[1]=0x00;
}
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
void incmin(void) //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
{
time_array[3]++;
if(time_array[3]==0x0A)
{
time_array[3]=0x00;
time_array[2]++;
if(time_array[2]==0x06)
time_array[2]=0x00;
}
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
void dechour(void) //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
time_array[1]--;
if((time_array[0]==0x00)&&(time_array[1]==-1))
{
time_array[1]=0x03;
time_array[0]=0x02;
}
if((time_array[0]!=0x00)&&(time_array[1]==-1))
{
time_array[1]=0x09;
time_array[0]--;
}
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
void decmin(void) //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
time_array[3]--;
if(time_array[3]==-1)
{
time_array[3]=0x09;
time_array[2]--;
if(time_array[2]==-1)
time_array[2]=0x05;
}
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
void canbi0(void) //参比的正负设置
{
if(leftcount%2==0)
Bmp8x16(0x04,0x38,zhenghao);
else
Bmp8x16(0x04,0x38,fuhao);
}
void incanbizhengshu(void) //参比的整数加1
{
canbi_array[2]++;
if((canbi_array[1]==0x09)&&(canbi_array[2]==0x09))
{
canbi_array[1]=0x00;
canbi_array[2]=0x00;
}
if((canbi_array[1]!=0x09)&&(canbi_array[2]==0x0A))
{
canbi_array[1]++;
canbi_array[2]=0x00;
}
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
void incanbixiaoshu(void) //参比的小数加1
{
canbi_array[4]++;
if((canbi_array[3]==0x09)&&(canbi_array[4]==0x09))
{
canbi_array[3]=0x00;
canbi_array[4]=0x00;
}
if((canbi_array[3]!=0x09)&&(canbi_array[4]==0x0A))
{
canbi_array[3]++;
canbi_array[4]=0x00;
}
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
void decanbizhengshu(void) //参比的整数减1
{
canbi_array[2]--;
if((canbi_array[1]==0x00)&&(canbi_array[2]==-1))
{
canbi_array[1]=0x09;
canbi_array[2]=0x09;
}
if((canbi_array[1]!=0x00)&&(canbi_array[2]==-1))
{
canbi_array[2]=0x09;
canbi_array[1]--;
}
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
void decanbixiaoshu(void) //参比的小数减1
{
canbi_array[4]--;
if((canbi_array[3]==0x00)&&(canbi_array[4]==-1))
{
canbi_array[3]=0x09;
canbi_array[4]=0x09;
}
if((canbi_array[3]!=0x00)&&(canbi_array[4]==-1))
{
canbi_array[4]=0x09;
canbi_array[3]--;
}
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
unsigned char getkey(void)
{
unsigned char keycode;
if((PINB&0xbc)!=0xbc)
{
Delay10ms(35);
if((PINB&0Xbc)!=0Xbc)
{
keycode=PINB&0xbc;
while((PINB&0xbc)!=0Xbc);
}
}
return keycode;
}
unsigned char getkeylock(void)
{
unsigned char keycode;
while((PINB&0xbc)==0xbc);
Delay10ms(35);
if((PINB&0xbc)!=0xbc)
{
keycode=PINB&0xbc;
while((PINB&0Xbc)!=0Xbc);
}
return keycode;
}
void checkkey(void)
{
unsigned char i,key,hour,min,sec;
key=getkey();
if(key==enter)
{
if(entercount==0)
{
Draw_NtoArab_rev(0x00,0x28,time_array[0]);
Draw_NtoArab_rev(0x00,0x30,time_array[1]);
while(1)
{
key=getkeylock();
if(key==enter)
{
hh=(time_array[0]<<4)|time_array[1];
mm=(time_array[2]<<4)|time_array[3];
pDS1302_Write(mDS1302_CONTROL_Reg,0x00);
wait;
pDS1302_Write(mDS1302_HOUR_Reg,hh);
pDS1302_Write(mDS1302_MIN_Reg,mm);
pDS1302_Write(mDS1302_CONTROL_Reg,0x80);
wait;
entercount++;
break;
}
else if(key==up)
{
if(position1302==zuo)
inchour();
else
incmin();
}
else if(key==down)
{
if(position1302==zuo)
dechour();
else
decmin();
}
else if(key==left)
{
position1302=zuo;
Draw_NtoArab_rev(0x00,0x28,time_array[0]);
Draw_NtoArab_rev(0x00,0x30,time_array[1]);
Draw_NtoArab(0x00,0x40,time_array[2]);
Draw_NtoArab(0x00,0x48,time_array[3]);
}
else
{
position1302=zhong;
Draw_NtoArab_rev(0x00,0x40,time_array[2]);
Draw_NtoArab_rev(0x00,0x48,time_array[3]);
Draw_NtoArab(0x00,0x28,time_array[0]);
Draw_NtoArab(0x00,0x30,time_array[1]);
}
}
}
else //进入参比设置
{
Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);
while(1)
{
key=getkeylock();
if(key==enter)
{
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
canbianjian=canbi_array[1]*1000+canbi_array[2]*100+canbi_array[3]*10+canbi_array[4];
break;
}
else if(key==up)
{
if(positioncanbi==can1)
incanbizhengshu();
else
incanbixiaoshu();
}
else if(key==down)
{
if(positioncanbi==can1)
decanbizhengshu();
else
decanbixiaoshu();
}
else if(key==left)
{
positioncanbi=can1;
Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);
Draw_NtoArab(0x04,0x58,canbi_array[3]);
Draw_NtoArab(0x04,0x60,canbi_array[4]);
}
else
{
positioncanbi=can2;
Draw_NtoArab_rev(0x04,0x58,canbi_array[3]);
Draw_NtoArab_rev(0x04,0x60,canbi_array[4]);
Draw_NtoArab(0x04,0x40,canbi_array[1]);
Draw_NtoArab(0x04,0x48,canbi_array[2]);
}
}
entercount=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -