📄 4.1.c
字号:
#include <reg51.h>
//extern register char cputick;
unsigned char sec100,sec,sec5,min,hour,flag1,command,ACC1,temp,opto,cputick;
unsigned char i,digit,buffer[4],onHour1,onMin1,offHour1,offMin1;
char key,delay,count1;
char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};
main()
{
opto = 0xff;
cputick = 0;
hour = 18;
min = 0;
sec = 0;
key = -1;
flag1 = 0;
onHour1 = 18; // 18:30打开LED
onMin1 = 01;
offHour1 = 18; // 21:30 关闭LED
offMin1 = 02;
count1 = 0;
buffer[0] = 0x40;
buffer[1] = 0x40;
buffer[2] = 0x40;
buffer[3] = 0x40;
//void serinit(9600); //调用tiny模式
// while(1)
// {
// while ( cputick < 1)
// scanLED();
// cputick = 0;
//任务执行周期10ms
// time();
// timeToBuffer();
// blink();
// offmsd();
// keyexe();
// keydelay();
// comparetime();
// }
}
time()
//更新实时时钟
{
sec100++;
if (sec100 >= 100) // 100 * 10 ms = 1 s
{sec100 = 0;
flag1 |= 0x05; //置 0位,2位
temp = 50;
sec++;
if (sec >= 60)
{sec = 0;
flag1 |= 0x02; //置1位
min++;
if (min >= 60)
{min = 0;
hour++;
if (hour >= 24)
{hour = 0;
}
}
}
}
}
scanLED() //扫描LED和4个键
{
int i;
digit = 0x08;
key = -1;
for( i = 0; i < 4; i++) // 扫描
{
P3 = ~digit & opto; // 完成第2个
P1 = ~buffer[i];
// pause(1); //延迟
P1 = 0xff; // 关闭LED
if ((P3 & 0x10) == 0) // 如果键按下 P3.4 变低
key = i; // 存键值
digit>>=1; //下一个
}
}
timeToBuffer()
{
buffer[0] = convert[min%10];
buffer[1] = convert[min/10];
buffer[2] = convert[hour%10];
buffer[3] = convert[hour/10];
}
blink()
{
if((flag1 & 0x04) != 0) // 检查bit 2
{temp--;
if (temp != 0)
{
buffer[1] |= 0x80;
buffer[2] |= 0x80;
}
else( flag1 &= ~0x04);
}
}
keyexe()
{
if (key != -1)
{
if ((flag1 & 0x80) == 0) //延时 0.5 秒
{
flag1 |= 0x80;
delay = 50;
switch(key){
case (0): // 0 键
manualOnOff(); // 处理0 键
break;
case (1): //1键
savetimeOnOff1(); // 处理1键
break;
case (2): //2键
setmin(); //处理2键,设置分
break;
case (3): //3键
sethour(); //处理3键,设置小时
}
}
}
}
sethour()
{
hour++;
if ( hour== 24)
hour = 0;
}
setmin()
{
min++;
sec = 0;
if( min == 60 )
min = 0;
}
savetimeOnOff1()
{
count1++;
if (count1 == 1)
{
onHour1 = hour;
onMin1 = min;
buffer[0] = 0x00;
buffer[1] = 0x68;
buffer[2] = 0x78;
buffer[3] = 0x71;
showOnce();
}
else
{
count1 = 0;
savetimeOff1();
}
}
savetimeOff1()
{
offHour1 = hour;
offMin1 = min;
buffer[0] = 0x63;
buffer[1] = 0x63;
buffer[2] = 0x78;
buffer[3] = 0x71;
showOnce();
}
manualOnOff()
{
opto= ~opto | 0x7f; // 激活P3.7
if ((opto & 0x80) == 0)
{
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0x68;
buffer[3] = 0x78;
showOnce();
}
else
{
buffer[0] = 0;
buffer[1] = 0x63;
buffer[2] = 0x63;
buffer[3] = 0x78;
showOnce();
}
}
showOnce()
{
int i;
for(i=0;i<500;i++)
scanLED();
}
keydelay()
{
if ((flag1 & 0x80) !=0)
{
delay--;
if(delay == 0)
flag1 &= ~0x80;
}
}
comparetime()
{
if((flag1 & 0x01) != 0 )
{
flag1 &= ~0x01;
if(hour == onHour1 && min == onMin1)
opto = 0x7f; // 清P3.7
if(hour == offHour1 && min == offMin1)
opto = 0xff; // 关闭P3.7
}
}
offmsd()
{
if (buffer[3] == 0x3f)
buffer[3] = 0x00;
}
pause(j)
int j;
{
int i;
for (i = 0; i < j; i++)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -