📄 key.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key_set = P1^4;
sbit key_rset = P1^5;
sbit key_up = P1^6;
sbit key_down = P1^7;
bit key_set_s,key_rset_s,key_up_s,key_down_s;
uchar key_set_flag;
uchar time_tmp[7];
uchar i;
void key(void)
{
//设定键按下,第一次跳年,同时年闪烁,第二次调月,月闪烁,一次类推
if(key_set == 0)
{
delay(300);
if(key_set == 0)
{
delay(300);
key_set_s = 1;
}
}
if(key_set == 1 && key_set_s == 1)
{
key_set_s = 0;
key_set_flag++;
if(key_set_flag >= 8)
key_set_flag = 1;
time_tmp[0] = year;
time_tmp[1] = moon;
time_tmp[2] = date;
time_tmp[3] = week;
time_tmp[4] = hour;
time_tmp[5] = min;
time_tmp[6] = sec;
}
//确认键按下,正常显示
if(key_rset == 0)
{
delay(300);
if(key_rset == 0)
{
delay(300);
key_rset_s = 1;
}
}
if(key_rset == 1 && key_rset_s == 1)
{
key_rset_s = 0;
key_set_flag = 0;
for(i = 0;i < 8;i++)
{
DEC_BCD_conv(time_tmp[i]);
}
write_ds1302_add_dat(0x8e,0x00); //写允许
write_ds1302_add_dat(0x8c,time_tmp[0]); //写年
write_ds1302_add_dat(0x86,time_tmp[1]); //写月
write_ds1302_add_dat(0x88,time_tmp[2]); //写日
write_ds1302_add_dat(0x8a,time_tmp[3]); //写周
write_ds1302_add_dat(0x84,time_tmp[4]); //写时
write_ds1302_add_dat(0x82,time_tmp[5]); //写分
write_ds1302_add_dat(0x80,time_tmp[6]); //写秒
write_ds1302_add_dat(0x8e,0x80);
}
//加键按下
if(key_up == 0)
{
delay(300);
if(key_up == 0)
{
delay(300);
key_up_s = 1;
}
}
if(key_up == 1 && key_up_s == 1)
{
key_up_s = 0;
time_tmp[key_set_flag - 1]++;
}
if(key_down == 0)
{
delay(300);
if(key_down == 0)
{
delay(300);
key_down_s = 1;
}
}
if(key_down == 1 && key_down_s == 1)
{
key_down_s = 0;
time_tmp[key_set_flag - 1]--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -