📄 main.c
字号:
#include <regx52.h>
#include "KeyBoardService.h"
#include "seg.h"
unsigned char press_flag=0;
unsigned char key_value;
#define uchar unsigned char
uchar deta, sec, min, hour;
uchar display[4];
uchar i,xint_flag;
extern uchar modal;
unsigned int k,j;
unsigned int count_pt;
void T2Init()
{
T2MOD=0x01; //自动重装方式2
T2CON=0x00;
TH2=0x4c;
TL2=0x00;
RCAP2H=0x4c; //50ms定时0x4c00 修改至54ms 10%
RCAP2L=0x00;
ET2=1;
}
void Int0Init()
{
EX0=1;
IT0=1;
PX0=1;
}
void TInit()
{
TMOD=0x31; //T0方式1 60ms键盘扫描 T1方式2控制EX0
TH0=0x28;
TL0=0x00;
ET0=1;
TR0=1;
// TH1=
}
void Init()
{
T2Init();
TInit();
Int0Init();
}
void T0_Int() interrupt 1
{
TH0=0x28;
TL0=0x00;
key_value = P1|0x1f;
if(key_value != 0xff)
{
if(press_flag == 0)
press_flag=1;
else if(press_flag == 1)
press_flag = 2;
}
else press_flag = 0;
}
void T2_Int() interrupt 5
{
EA=0;
TF2=0;
deta++;
if(deta >= 20)
{
sec++;
deta = 0;
}
if(sec >= 60)
{
sec = 0;
min++;
}
if(min >= 60)
{
min = 0;
hour++;
}
if(hour >= 24)
{
hour = 0;
}
if(modal == 0)
{
if(xint_flag != 1)
{
display[3] = min%10;
display[2] = min/10;
display[1] = hour%10;
display[0] = hour/10;
}
}
EA = 1;
}
void Int0() interrupt 0
{
EA = 0;
xint_flag = 1;
EA = 1;
}
void LCDdisplay()
{
count_pt++;
for(i=0; i<4; i++)
{
WriteCsData(4);
WriteSegData(display[i]);
WriteCsData(i);
}
if(modal == 1)
{
WriteCsData(4);
WritePoint(1);
WriteCsData(1);
}
else if(modal == 0)
{
if(count_pt > 2000) //display[3]会再次被点亮
{
count_pt = 0;
}
else if(count_pt < 1000)
{
WriteCsData(4);
WritePoint(1);
WriteCsData(1);
}
else
{
}
}
}
void delay(unsigned int k)
{
while(--k)
for(j = 255; j>0; j--);
}
void main()
{
Init();
TR2=1;
EA=1;
while(1)
{
if(hour > 8 && hour < 22)
{
EX0=0;
}
else EX1=1;
if(xint_flag == 1)
{
P1_0=~P1_0;
delay(10);
}
KeyBoardService();
LCDdisplay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -