📄 main.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define schar unsigned char
#define uint unsigned int
sbit P3_5= P1^1;
sbit P1_2= P1^2;//定义信号引脚
char DATA_7SEG [11]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF,};//0~9
uchar hour=0,min=0,sec=0;
uchar deda=0;
schar t_hour=8;
schar t_min=30;
bit d_05s=0;
uchar set=0;
uchar m=0;
uchar syh,sym;
void delay(uint k);
void conv();
void p_out();
void dirve (schar hm1,uchar hm2);
void tdata1(schar hm3);
void tdata2(schar hm4);
void conv()
{
if (deda<=100)d_05s=1;
else d_05s=0;
if (deda>=201){sec++;deda=0;}
if (sec==60){min++;sec=0;}
if (min==60){hour++;min=0;}
if (hour==24){hour=0;}
}
void delay (uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<121;j++){;}}
}
void drive(schar hm1,uchar hm2)
{
if(hm1/10>=1)
{tdata1(hm1); P1=0xef;delay(1);}
if(d_05s==1)
{SBUF=DATA_7SEG[hm1%10]&0x7F;
while(TI==0);
TI=0;
P1=0xdf;delay(1);}
else
{tdata2(hm1);P1=0xdf;delay(1);}
tdata1(hm2);P1=0xbf;delay(1);
tdata2(hm2);P1=0x7f;delay(1);}
void dispsy()
{
if(min<=t_min)
{
sym=t_min-min;
syh=t_hour-hour;
}
else {sym=(60-min+t_min);syh=t_hour-hour-1;}
drive(syh,sym);
}
void time()
{
conv();
if(sec%5<=2)
{
P3_5=1;drive(hour,min);
}
else {
P3_5=0;dispsy();
}
P_out();
}
void init_timer()
{
TMOD=0x01;
TH0=-(5221/256);
TL0=-(5221%256);
IE=0x82;
TR0=1;
}
void scan_key()
{
delay(1);
if(P1_2==0)set++;
if(set>=2)set=0;
while(P1_2==0);
}
void zd(void) interrupt 1
{ TH0=-(5221/256);
TL0=_(5221%256);
deda++;
}
void time1_adj()
{
if(P1_1==0)delay(1);
if(P1_1==0)t_hour--;
if(t_hour<0)t_hour=23;
for(m=0;m<100;m++)
{
drive(t_hour,t_min);
}
if(P1_0==0)delay(1);
if(P1_0==0)t_min=t_min-1;
if(t_min<=0)t_min=60;
for(m=0;m<100;m++)
{
drive(t_hour,t_min);
}
}
void tdata1(schar hm3)
{
SUB=DATA_7SEG[hm3/10];
while(TI==0);
TI=0;
}
void tdata2(schar hm4)
{
SUB=DATA_7SEG[hm4%10];
while(TI==0);
TI=0;
}
///////
void P_out()
{
if (hour>=t_hour&&min>=t_min)
{TR0=0;EA=0;P3_7=0;
dirve(t_hour,t_min);
}
else P3_7=1;
}
//////////////////////
void main()
{
init_timer();
while(1)
{
if(P1_2==0)scan_key();
switch(set)
{case 0:time();break;
case 1:time1_adj();break;
default:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -