📄 clock.c
字号:
}
break;
default: break;
}
}
}
}
}
}
/***************************************************
键盘扫描函数
原型: void readkey(void);
功能: 当获得有效按键时,令getkey=1,keynum为按键值
****************************************************/
void readkey(void)
{
uchar M_key = 0;
first_row = 0;
second_row = 0;
M_key = KEY;
if(M_key != 0xff) //如果有连续两次按键按下,认为有有效按键按下。消除按键抖动
{
if(first_getkey == 0)
{
first_getkey = 1;
}
else //当有有效按键按下时,进一步识别是哪一个按键
{
if(keyon == 0) //防止按键冲突,当还有未释放的按键时不对其它按键动作响应
{
first_row = 0; //扫描第一行按键
second_row = 1;
M_key = KEY;
if(M_key != 0xff)
{
switch(M_key)
{
case 0xfe:
keynum = 0x00;
break;
case 0xfd:
keynum = 0x01;
break;
case 0xfb:
keynum = 0x02;
break;
case 0xf7:
keynum = 0x03;
break;
case 0xef:
keynum = 0x04;
break;
case 0xdf:
keynum = 0x05;
break;
case 0xbf:
keynum = 0x06;
break;
case 0x7f:
keynum = 0x07;
break;
}
}
else
{
second_row = 0; //扫描第二行按键
first_row = 1;
M_key = KEY;
switch(M_key)
{
case 0xfe:
keynum = 0x08;
break;
case 0xfd:
keynum = 0x09;
break;
case 0xfb:
keynum = 0x0a;
break;
case 0xf7:
keynum = 0x0b;
break;
case 0xef:
keynum = 0x0c;
break;
case 0xdf:
keynum = 0x0d;
break;
case 0xbf:
keynum = 0x0e;
break;
case 0x7f:
keynum = 0x0f;
break;
}
}
getkey = 1; //获得有效按键数值
keyon = 1; //防止按键冲突,当获得有效按键时将其置1
}
}
}
else
{
first_getkey = 0;
keyon = 0; //防止按键冲突,当所有的按键都释放时将其清0
}
}
/***************************************************
数码管显示函数
原型: void leddisp(void);
功能: 每次调用轮流显示一位数码管
****************************************************/
void leddisp(void)
{
switch(lednum) //选择需要显示的数码位
{
case 0:
if (aorc==1)
{ LED1 = segtab[led[0]]; }
else
{ LED1 = segtab[led[0]]-0x80; }
break;
case 1:
LED2 = segtab[led[1]];
break;
case 2:
LED3 = segtab[led[2]];
break;
case 3:
LED4 = segtab[led[3]];
break;
case 4:
LED5 = segtab[led[4]];
break;
case 5:
LED6 = segtab[led[5]];
break;
case 6:
if (alarm_on==1)
{
aorc=1;
if (alarm_count2!=0)
{
if (alarm_count1<500)//1秒闪烁一次,一次0.5秒
{
LED7 = segtab[led[6]]-0x80;
}
else if (alarm_count1<1000)
{
LED7 = segtab[led[6]];//这里的alarm_count1,alarm_count2全部由alarm中的决定,为了闪烁时消去小数点,比较烦琐
}
}
}
else
{ LED7 = segtab[led[6]]-0x80; }
break;
case 7:
LED8 = segtab[led[7]];
break;
}
if(lednum == 0) //更新需要现实的数码位
{
lednum = 7;
}
else
{
lednum = lednum-1;
}
}
/* 闹钟设置闪烁函数*/
void flash2(void)
{
if (aorc==1)
{
if (mode>=1)
{
count2++;
if (count2<250)//0。5秒亮一次,一次0.25秒
{
switch (mode)
{
case 0x00: break;
case 0x01:
led[4]=0x11;
led[5]=0x11;
break;
case 0x02:
led[6]=0x11;
led[7]=0x11;
break;
default: break;
}
}
else if (count2<500)
{
switch (mode)
{
case 0x00: break;
case 0x01:
led[0]=aaorp;
led[4]=aminute%10;
led[5]=aminute/10;
led[6]=ahour%10;
led[7]=ahour/10;
break;
case 0x02:
led[0]=aaorp;
led[4]=aminute%10;
led[5]=aminute/10;
led[6]=ahour%10;
led[7]=ahour/10;
break;
default: break;
}
}
else
{ count2 = 0; }
}
}
}
/*时钟设置闪烁函数*/
void flash1(void)
{
if (aorc==0)
{
if (mode>=1)
{
count1++;
if (count1<250)//0.5秒闪烁一次,一次0.25秒
{
switch (mode)
{
case 0x00: break;
case 0x01:
led[4]=0x11;
led[5]=0x11;
break;
case 0x02:
led[6]=0x11;
led[7]=0x11;
break;
case 0x03:
led[0]=0x11;
led[1]=0x11;
break;
default: break;
}
}
else if (count1<500)
{
switch (mode)
{
case 0x00: break;
case 0x01:
led[2]=aorp;
led[4]=second%10;
led[5]=second/10;
led[6]=minute%10;
led[7]=minute/10;
led[0]=hour%10;
led[1]=hour/10;
break;
case 0x02:
led[2]=aorp;
led[4]=second%10;
led[5]=second/10;
led[6]=minute%10;
led[7]=minute/10;
led[0]=hour%10;
led[1]=hour/10;
break;
case 0x03:
led[2]=aorp;
led[4]=second%10;
led[5]=second/10;
led[6]=minute%10;
led[7]=minute/10;
led[0]=hour%10;
led[1]=hour/10;
break;
default: break;
}
}
else
{ count1 = 0; }
}
}
}
/*闹铃函数*/
void alarm(void)
{
if (ahour==hour&&aminute==minute&&second==0&&aaorp==aorp)
{ alarm_on=1;}
if (alarm_on==1)//闹钟是否到时?
{
aorc=1;//显示闹钟
if (alarm_count2!=0)
{
alarm_count1++;
if (alarm_count1<500)//1秒闪烁一次,一次0.5秒
{
led[0]=aaorp;
led[4]=aminute%10;
led[5]=aminute/10;
led[6]=ahour%10;
led[7]=ahour/10;
}
else if (alarm_count1<1000)
{
led[0]=0x11;
led[4]=0x11;
led[5]=0x11;
led[6]=0x11;
led[7]=0x11;
}
else
{
alarm_count1 = 0;
alarm_count2--;
}
}
else
{
alarm_on = 0;
alarm_count2 = 10;
aorc=0;//闹铃完成后,显示时钟
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -