📄 shizhong.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar hour,minute,second,hour2,minute2,second2,count,num,num1,a,b,c,d,e,f,i,k,nao,date,month,nian,lowsec1,second1,higsec1;
uchar code xian[]="WELCOME TO CQUPT";
uchar code xingqi[]="MONTUEWEDTHUFRISATSUN";
uchar code table[]="2000-01-01 MON";
uchar code table1[]="00:00:00";
sbit lcdrs=P2^7;
sbit lcdrw=P2^6;
sbit lcde=P2^5;
sbit mod=P1^0; /*********设置键*******/
sbit add=P1^1; /*********调整键*******/
sbit swi=P1^2; /*********12/24模式转换键*****/
sbit sec=P1^3; /*********秒表键*******/
sbit buz=P1^5; /*********闹钟IO口定义******/
sbit clo=P1^4; /*********闹钟键********/
void xianshi(uchar i);
void lcd_com(uchar com);
void lcd_dat(uchar dat);
void display(uchar add,uchar dat);
void display1(uchar add,uchar dat);
void keyscan();
void delay(uint z);
void startlcd();
void starttimer();
void start();
void main()
{
start();
startlcd();
starttimer();
while(1)
{
keyscan();
}
}
void xianshi(uchar i)
{
k=3*i;
lcd_com(0x80+12);
lcd_dat(xingqi[k]);
lcd_dat(xingqi[k+1]);
lcd_dat(xingqi[k+2]);
}
void startlcd()
{
lcd_com(0x01);
lcd_com(0x38);
lcd_com(0x0c);
lcd_com(0x06);
lcd_com(0x80);
for(num=0;num<16;num++)
{
lcd_dat(xian[num]);
}
delay(3000);
lcd_com(0x01);
lcd_com(0x80);
for(num=0;num<15;num++)
{
lcd_dat(table[num]);
}
lcd_com(0x80+0x43);
for(num1=0;num1<8;num1++)
{
lcd_dat(table1[num1]);
}
}
void starttimer()
{
TMOD=0x11;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=1;
}
void start()
{
buz=1;
count=0;
second=0;
minute=0;
hour=0;
date=1;
month=1;
nian=0;
lowsec1=0;
second1=0;
higsec1=0;
second2=0;
minute2=0;
hour2=0;
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
i=0;
k=0;
nao=0;
}
void lcd_com(uchar com)
{
lcdrs=0;
lcdrw=0;
lcde=0;
P0=com;
lcde=1;
lcde=0;
delay(1);
}
void lcd_dat(uchar dat)
{
lcdrs=1;
lcdrw=0;
P0=dat;
lcde=1;
lcde=0;
lcdrs=0;
delay(1);
}
/**********************1602第二排显示****************/
void display(uchar add,uchar dat)
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
lcd_com(0x80+0x40+add);
lcd_dat(0x30+shi);
lcd_dat(0x30+ge);
}
/********************1602第一排显示*****************/
void display1(uchar add,uchar dat)
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
lcd_com(0x80+add);
lcd_dat(0x30+shi);
lcd_dat(0x30+ge);
}
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<123;y++);
}
/***********中断1为秒表的中断************/
void timer0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
lowsec1++;
if(lowsec1==100)
{
lowsec1=0;
second1++;
if(second1==60)
{
second1=0;
higsec1++;
if(higsec1==60)
{
higsec1=0;
}
display1(0,higsec1);
}
display1(3,second1);
}
display1(6,lowsec1);
}
/*******************中断2为时钟运行************/
void timer1() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
second++;
if(b==1)
{
if(hour>12)
{
hour=hour-12;
display(3,hour);
}
}
if(hour==hour2)
f=1;
if((minute==minute2)&&(f==1))
f=2;
if((second==second2)&&(f==2))
{
buz=0;
if(second>55)
nao=second-55;
nao=second+5;
}
if(nao==second)
{
buz=1;
f=0;
}
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
buz=0;
nao=2;
minute=0;
hour++;
if(b==1)
{
if(hour==12)
{
c++;
if(c%2==0)
{
c=0;
date++;
i++;
if(date==30&&month==2)
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(date==31&&(month==4||month==6||month==9||month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(date==32)
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(e==0)
{
display1(8,date);
xianshi(i);
}
}
}
if(hour==13)
hour=1;
}
else
{
if(hour==24)
{
hour=0;
date++;
i++;
if(date==30&&month==2)
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(date==31&&(month==4||month==6||month==9||month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(date==32)
{
date=1;
month++;
if(month==13)
{
month=1;
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(e==0)
display1(5,month);
}
if(e==0)
{
display1(8,date);
xianshi(i);
}
}
}
if(e==0)
display(3,hour);
}
if(e==0)
display(6,minute);
}
if(e==0)
display(9,second);
}
}
/****************按键功能程序****************/
void keyscan()
{
if(mod==0)
{
delay(10);
if(mod==0)
{
while(mod==0); //松手检测,必须
a++;
if(a==1)
{
TR1=0;
lcd_com(0x80+2);
lcd_com(0x0f);
}
if(a==2)
{
lcd_com(0x80+5);
lcd_com(0x0f);
}
if(a==3)
{
lcd_com(0x80+8);
lcd_com(0x0f);
}
if(a==4)
{
lcd_com(0x80+12);
lcd_com(0x0f);
}
if(a==5)
{
lcd_com(0x80+0x40+3);
lcd_com(0x0f);
}
if(a==6)
{
lcd_com(0x80+0x40+6);
lcd_com(0x0f);
}
if(a==7)
{
lcd_com(0x80+0x40+9);
lcd_com(0x0f);
}
if(a>=8)
{
a=0;
TR1=1;
lcd_com(0x0c);
}
}
}
if(clo==0)
{
delay(10);
if(clo==0)
{
while(clo==0); //松手检测,必须
e++;
if(e==1)
{
lcd_com(0x01);
lcd_com(0x80);
for(num1=0;num1<8;num1++)
{
lcd_dat(table1[num1]);
}
lcd_com(0x80);
lcd_com(0x0f);
}
if(e==2)
{
lcd_com(0x80+3);
lcd_com(0x0f);
}
if(e==3)
{
lcd_com(0x80+6);
lcd_com(0x0f);
}
if(e>=4)
{
e=0;
lcd_com(0x0c);
lcd_com(0x01);
lcd_com(0x80);
for(num=0;num<15;num++)
{
lcd_dat(table[num]);
}
lcd_com(0x80+0x43);
for(num1=0;num1<8;num1++)
{
lcd_dat(table1[num1]);
}
display1(2,nian);
display1(5,month);
display1(8,date);
display(3,hour);
display(6,minute);
display(9,second);
xianshi(i);
}
}
}
if(e!=0)
{
if(add==0)
{
delay(10);
if(add==0)
{
while(add==0);
if(e==1)
{
hour2++ ;
if(hour2==24)
hour2=0;
display1(0,hour2);
}
if(e==2)
{
minute2++;
if(minute2==60)
minute2=0;
display1(3,minute2);
}
if(e==3)
{
second2++ ;
if(second2==60)
second2=0;
display1(6,second2);
}
}
}
}
if(a!=0)
{
if(add==0)
{
delay(10);
if(add==0)
{
while(add==0);
if(a==1)
{
nian++;
if(nian==100)
nian=0;
display1(2,nian);
}
if(a==2)
{
month++;
if(month==13)
month=1;
display1(5,month);
}
if(a==3)
{
date++;
if(date==32)
date=1;
display1(8,date);
}
if(a==4)
{
i++;
if(i==7)
i=0;
xianshi(i);
}
if(a==5)
{
hour++ ;
if(hour==24)
hour=0;
display(3,hour);
}
if(a==6)
{
minute++;
if(minute==60)
minute=0;
display(6,minute);
}
if(a==7)
{
second++ ;
if(second==60)
second=0;
display(9,second);
}
}
}
}
if(swi==0)
{
delay(10);
if(swi==0)
{
while(swi==0);
b++;
if(b>=2)
{
b=0;
}
}
}
if(sec==0)
{
delay(10);
if(sec==0)
{
while(sec==0);
d++;
if(d==1)
{
TR1=0;
lcd_com(0x01);
lcd_com(0x80);
for(num1=0;num1<8;num1++)
{
lcd_dat(table1[num1]);
}
}
if(d==2)
{
TR0=1;
}
if(d==3)
{
TR0=0;
}
if(d>=4)
{
d=0;
lowsec1=0;
second1=0;
higsec1=0;
TR1=1;
lcd_com(0x01);
lcd_com(0x80);
for(num=0;num<15;num++)
{
lcd_dat(table[num]);
}
lcd_com(0x80+0x43);
for(num1=0;num1<8;num1++)
{
lcd_dat(table1[num1]);
}
display1(2,nian);
display1(5,month);
display1(8,date);
display(3,hour);
display(6,minute);
display(9,second);
xianshi(i);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -