📄 mian.c
字号:
/*---------------------------------------
; Clock
;
; Auther : 王轩骞
; File Name : main.c
; Target MCU : STC 89C58RD
; Frequency : 11.0592Mhz
; Revision : 1.0
;
;--------------------------------------*/
#include <stdio.h>
#include <AT89X51.H>
/**************声明变量****************/
sbit BUTTOM_SET = P1^0;
sbit BUTTOM_SEL = P1^1;
sbit BUTTOM_ADJ = P1^2;
sbit SPEAKER = P3^4;
char code SEG[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
unsigned char s1,s2,h1,h2,tmp;
unsigned char ts1,ts2,th1,th2;
unsigned char timer_count;
unsigned char beep;
bit sel;
bit sts;
bit ck;
unsigned char *p;
/**************声明函数****************/
void main(void);
void sys_init(void);/*初始化函数*/
void display(void);/*显示函数*/
void delay(unsigned char j);/*延时函数*/
void second(void);
void flash(void);
void keyboard(void);
void keyboard2(void);
void adj_mode(void);
buttom(unsigned char i);
/**************主函数*****************/
void main(void)
{
sys_init();
display();
while(1);
}
/**************初始化******************/
void sys_init(void)
{
SCON = 0x00;
TCON = 0x03;
TMOD = 0x11;
EA = 1;
EX0 = 0;
EX1 = 0;
ET0 = 1;
ET1 = 0;
ES = 0;
TL0 = 0xB0;
TH0 = 0x3C;
TR0 = 1;
timer_count = 18;
s1 = 0;
s2 = 0;
h1 = 0;
h2 = 0;
ts1 = 0;
ts2 = 1;
th1 = 0;
th2 = 0;
sel = 1;
sts = 0;
ck = 0;
beep = 0;
p = &s1;
}
/**************入口程序*****************/
void display(void)
{
for(;;)
{
if(sts == 0)
{
keyboard();
}
else if(sts == 1)
{
keyboard2();
}
if(ck == 0)
{
P0 = SEG[s1];
P2 = 0x7F;
delay(20);
P0 = SEG[10];
P0 = SEG[s2];
P2 = 0xBF;
delay(20);
P0 = SEG[10];
P0 = SEG[h1];
P2 = 0xDF;
delay(20);
P0 = SEG[10];
P0 = SEG[h2];
P2 = 0xEF;
delay(20);
P0 = SEG[10];
}
else if(ck == 1)
{
P0 = SEG[ts1];
P2 = 0x7F;
delay(20);
P0 = SEG[10];
P0 = SEG[ts2];
P2 = 0xBF;
delay(20);
P0 = SEG[10];
P0 = SEG[th1];
P2 = 0xDF;
delay(20);
P0 = SEG[10];
P0 = SEG[th2];
P2 = 0xEF;
delay(20);
P0 = SEG[10];
}
}
}
/**************延时程序****************/
void delay(unsigned char j)
{
do
{ }
while(j--);
return;
}
/***************扫键1程序**************/
void keyboard(void)
{
if(BUTTOM_SET == 0)
{
if(buttom(0) == 1)
{
adj_mode();
sts = 1;
}
}
else
{}
return;
}
/**************进入调整模式***************/
void adj_mode(void)
{
ET0 = 0;
TR0 = 0;
p = &s1;
timer_count = 5;
TL1 = 0xB0;
TH1 = 0x3C;
ET1 = 1;
TR1 = 1;
return;
}
/**************菜单调整***************/
void keyboard2(void)
{
if( ck == 0)
{
if(BUTTOM_SET == 0)
{
if(buttom(0) == 1)
{
TR0 = 0;
TR1 = 0;
if(sel == 0)
{
*p = tmp;
sel = 1;
}
p = &ts1;
ck = 1;
TR0 = 1;
TR1 = 1;
}
return;
}
else if(BUTTOM_SEL == 0)
{
if(buttom(1) == 1)
{
if(sel == 0)
{
*p = tmp;
sel = 1;
}
if(p == &s1)
{ p = &s2; }
else if(p == &s2)
{ p = &h1; }
else if(p == &h1)
{ p = &h2; }
else if(p == &h2)
{ p = &s1; }
}
return;
}
else if(BUTTOM_ADJ == 0)
{
if(buttom(2) == 1)
{
if(sel == 0)
{
*p = tmp;
sel = 1;
}
if(p == &s2)
{
if( *p == 5)
{
*p = 0;
}
else
{
(*p)++;
}
}
else
{
if( *p == 9)
{
*p = 0;
}
else
{
(*p)++;
}
}
}
return;
}
}
else if( ck == 1)
{
if(BUTTOM_SET == 0)
{
if(buttom(0) == 1)
{
ET1 = 0;
TR1 = 0;
if(sel == 0)
{
*p = tmp;
sel = 1;
}
p = &s1;
ck = 0;
sts = 0;
TL0 = 0xB0;
TH0 = 0x3C;
ET0 = 1;
TR0 = 1;
}
return;
}
else if(BUTTOM_SEL == 0)
{
if(buttom(1) == 1)
{
if(sel == 0)
{
*p = tmp;
sel = 1;
}
if(p == &ts1)
{ p = &ts2; }
else if(p == &ts2)
{ p = &th1; }
else if(p == &th1)
{ p = &th2; }
else if(p == &th2)
{ p = &ts1; }
}
return;
}
else if(BUTTOM_ADJ == 0)
{
if(buttom(2) == 1)
{
if(sel == 0)
{
*p = tmp;
sel = 1;
}
if(p == &ts2)
{
if( *p == 5)
{
*p = 0;
}
else
{
(*p)++;
}
}
else
{
if( *p == 9)
{
*p = 0;
}
else
{
(*p)++;
}
}
}
return;
}
}
}
/***************去抖动*****************/
buttom(unsigned char i)
{
delay(5);
if(i == 0)
{
if(BUTTOM_SET == 0)
{
do{ SPEAKER = 0; }
while(BUTTOM_SET == 0);
SPEAKER = 1;
delay(5);
if(BUTTOM_SET == 0)
{ return(0); }
}
else
{ return(0); }
}
else if(i == 1)
{
if(BUTTOM_SEL == 0)
{
do{ SPEAKER = 0; }
while(BUTTOM_SEL == 0);
SPEAKER = 1;
delay(5);
if(BUTTOM_SEL == 0)
{ return(0); }
}
else
{ return(0); }
}
else if(i == 2)
{
if(BUTTOM_ADJ == 0)
{
do{ SPEAKER = 0; }
while(BUTTOM_ADJ == 0);
SPEAKER = 1;
delay(5);
if(BUTTOM_ADJ == 0)
{ return(0); }
}
else
{ return(0); }
}
delay(10);
return(1);
}
/***************读秒程序***************/
void second(void) interrupt 1
{
EA = 0;
ET0 = 0;
TR0 = 0;
if(timer_count == 0)
{
timer_count = 18;
if(s1 == 9 && s2 == 5 && h1 == 9 && h2 == 9)
{
h2=0;h1=0;s2=0;s1=0;
}
else if(s1 == 9 && s2 == 5 && h1 ==9)
{
h2++;h1=0;s2=0;s1=0;
}
else if(s1 == 9 && s2 == 5)
{
h1++;s2=0;s1=0;
}
else if(s1 == 9)
{
s2++;s1=0;
}
else
{
s1++;
}
if(beep==0)
{ SPEAKER=1; }
else
{ beep--; }
if(s1==ts1)
{
if(s2==ts2)
{
if(h1==th1)
{
if(h2==th2)
{
SPEAKER=0;
beep=5;
}
}
}
}
}
else
{ timer_count--; }
TL0 = 0xB0;
TH0 = 0x3C;
TR0 = 1;
ET0 = 1;
EA = 1;
}
/**************闪烁*******************/
void flash(void) interrupt 3
{
EA = 0;
ET1 = 0;
TR1 = 0;
if(timer_count == 0)
{
if( sel == 1)
{
tmp = *p;
*p = 10;
sel = 0;
}
else if(sel == 0)
{
*p = tmp;
sel = 1;
}
timer_count = 5;
}
else
{ timer_count--; }
TL1 = 0xB0;
TH1 = 0x3C;
TR1 = 1;
ET1 = 1;
EA = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -