📄 keydisp.c
字号:
#include "KeyDisp.h"
#include "DS1302.h"
volatile unsigned char mode=0; //模式选择 0、显示时分 1、显示月日 2、显示温度
volatile unsigned char change=0; //允许修改 0、禁止修改 1、允许修改
volatile unsigned char ajust=0; //改变的段位选择 0、前两位(mode=0为时;mode=1为月) 1、后两位(mode=0为分;mode=1为日)
extern volatile char datetime[];
extern volatile char wendu[];
code unsigned char seg[13]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,0xf7,0xf0,0xFF}; //0,1,2,3,4,5,6,9,-,°,熄灭
code unsigned char w[4]={0x7F,0xBE,0xDF,0xEF}; //位选,依次从左到右1、2、3、4
void delay(unsigned int i)
{
unsigned char j;
while(i-- !=0)
{
for(j=0;j<120;j++);
}
}
void beep(unsigned int t)
{
spk=0;
delay(t);
spk=1;
delay(1);
}
unsigned char read_keys()
{
unsigned char keys;
P0 = 0xff;
keys = P0;
return (keys);
}
void KeyProcess()
{
unsigned char key,keymode,keyset,keyup,keydown;
key = read_keys();
if(key!=0xff)
{
delay(110);
key = read_keys();
if(key!=0xff)
{
beep(100);
keymode = key & 0x08;
keyset = key & 0x04;
keyup = key & 0x02;
keydown = key & 0x01;
if((keymode==0)&&(keyset!=0)) //key1键按下
{
mode++;
if(mode>=3) mode=0;
}
if((keyset==0)&&(keymode!=0)) //key2键按下
{
if(ajust==0) ajust=1;
else ajust=0;
}
if((keymode==0)&&(keyset==0)) //key1和key2同时按下
{
if(change==0) change=1;
else change=0;
}
if(keyup == 0) //key3键按下
{
if((change==1)&&(mode==0)&&(ajust==0)) //模式0,小时++
{
datetime[2]++;
if(datetime[2]>=24) datetime[2]=0;
datetime[2]=datetime[2]/10*16+datetime[2]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x84,datetime[2]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==1)&&(ajust==0)) //模式1,月++
{
datetime[4]++;
if(datetime[4]>12) datetime[4]=0;
datetime[4]=datetime[4]/10*16+datetime[4]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x88,datetime[4]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==0)&&(ajust==1)) //模式0,分++
{
datetime[1]++;
if(datetime[1]>=60) datetime[1]=0;
datetime[1]=datetime[1]/10*16+datetime[1]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x82,datetime[1]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==1)&&(ajust==1)) //模式1,日++
{
datetime[3]++;
if(datetime[3]>31) datetime[3]=1;
datetime[3]=datetime[3]/10*16+datetime[3]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x86,datetime[3]);
write_DS1302(0x8e,0x80);
}
}
if(keydown == 0) //key4键按下
{
if((change==1)&&(mode==0)&&(ajust==0)) //模式0,小时--
{
datetime[2]--;
if(datetime[2]<0) datetime[2]=23;
datetime[2]=datetime[2]/10*16+datetime[2]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x84,datetime[2]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==1)&&(ajust==0)) //模式1,月--
{
datetime[4]--;
if(datetime[4]<1) datetime[4]=12;
datetime[4]=datetime[4]/10*16+datetime[4]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x88,datetime[4]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==0)&&(ajust==1)) //模式0,分--
{
datetime[1]--;
if(datetime[1]<0) datetime[1]=59;
datetime[1]=datetime[1]/10*16+datetime[1]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x82,datetime[1]);
write_DS1302(0x8e,0x80);
}
if((change==1)&&(mode==1)&&(ajust==1)) //模式1,日--
{
datetime[3]--;
if(datetime[3]<1) datetime[3]=31;
datetime[3]=datetime[3]/10*16+datetime[3]%10;
write_DS1302(0x8e,0x00);
write_DS1302(0x86,datetime[3]);
write_DS1302(0x8e,0x80);
}
}
}
}
}
void display()
{
switch(mode)
{
case 0: //HR:Min
{
P3=w[0];P1=seg[datetime[2]/10];delay(1);P1=0xFF;P3=0xFF;
P3=w[1];P1=seg[datetime[2]%10]&0xdF;delay(1);P1=0xFF;P3=0xFF;
P3=w[2];P1=seg[datetime[1]/10];delay(1);P1=0xFF;P3=0xFF;
P3=w[3];P1=seg[datetime[1]%10];delay(1);P1=0xFF;P3=0xFF;
break;
}
case 1: //MOUTH:DATE
{
P3=w[0];P1=seg[datetime[4]/10];delay(1);P1=0xFF;P3=0xFF;
P3=w[1];P1=seg[datetime[4]%10]&0xdF;delay(1);P1=0xFF;P3=0xFF;
P3=w[2];P1=seg[datetime[3]/10];delay(1);P1=0xFF;P3=0xFF;
P3=w[3];P1=seg[datetime[3]%10];delay(1);P1=0xFF;P3=0xFF;
break;
}
case 2: //温度
{
P3=w[0];P1=seg[wendu[0]];delay(1);P1=0xFF;P3=0xFF;
P3=w[1];P1=seg[wendu[1]]&0xDF;delay(1);P1=0xFF;P3=0xFF;
P3=w[2];P1=seg[wendu[2]];delay(1);P1=0xFF;P3=0xFF;
P3=w[3];P1=seg[11];delay(1);P1=0xFF;P3=0xFF;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -