简易可调电子表
时间:10-02
整理:3721RD
点击:
该程序简单明了 也可能存在不足之处 欢迎指正
#include<reg52.h>
char code table[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
char num,miao,fen,shi,tt,num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit k0=P3^4; //功能键
sbit k1=P3^5; //加
sbit k2=P3^6; //减
/*************延时函数*************/
void delay (int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************显示时分秒函数*******/
void display_sfm(char add0,char add1,char add3,char add4,char add6,char add7,char miao,char fen,char shi)
{
dula=1;
P0=table[miao%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add0];
wela=0;
delay(1);
dula=1;
P0=table[miao/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add1];
wela=0;
delay(1);
dula=1;
P0=table[fen%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add3];
wela=0;
delay(1);
dula=1;
P0=table[fen/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add4];
wela=0;
delay(1);
dula=1;
P0=table[shi%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add6];
wela=0;
delay(1);
dula=1;
P0=table[shi/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add7];
wela=0;
delay(1);
}
/*********显示时分秒之间的间隔-函数********/
void display_jiange()
{
dula=1;
P0=0x40;
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=0x40;
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
}
/***********初始化函数**********/
void init()
{
num=0;
miao=50;
fen=58;
shi=23;
TMOD=0x01;
TH0=(65530-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/********按键函数***********/
void keyscan()
{
if(k0==0) //功能键按下
{
delay(5);
if(k0==0)
{
while(!k0);
delay(5);
while(!k0);
num++;
if(num==5)
num=1;
}
switch(num)
{
case 1:TR0=0; //功能键按一下:关闭定时,led1亮,调节秒钟
P1=0xfe;break;
case 2:P1=0xfd;break;//功能键按两下:led2亮,调节分钟
case 3:P1=0xfb;break;//功能键按三下:led3亮,调节时钟
case 4:TR0=1; //功能键按四下:灯全灭,定时开启
P1=0xff;break;
default:break;
}
}
if(num!=0)
{
if(k1==0) //加键按下
{
delay(5);
if(k1==0)
{
while(!k1);
delay(5);
while(!k1);
if(num==1) //秒加
{
miao++;
if(miao==60)
miao=0;
}
if(num==2) //分加
{
fen++;
if(fen==60)
fen=0;
}
if(num==3) //时加
{
shi++;
if(shi==24)
shi=0;
}
}
}
if(k2==0)
{
delay(5);
if(k2==0) //减键按下
{
while(!k2);
delay(5);
while(!k2);
if(num==1) //秒减
{
miao--;
if(miao==-1)
miao=59;
}
if(num==2) //分减
{
fen--;
if(fen==-1)
fen=59;
}
if(num==3) //时减
{
shi--;
if(shi==-1)
shi=23;
}
}
}
}
}
/*********定时函数***********/
void timer0() interrupt 1
{
TH0=(65530-50000)/256;
TL0=(65535-50000)%256 ;
tt++;
}
void main()
{
init();
while(1)
{
display_jiange();
keyscan();
if(tt==18)
{
tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
display_sfm(0,1,3,4,6,7,miao,fen,shi);
}
}
#include<reg52.h>
char code table[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
char num,miao,fen,shi,tt,num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit k0=P3^4; //功能键
sbit k1=P3^5; //加
sbit k2=P3^6; //减
/*************延时函数*************/
void delay (int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************显示时分秒函数*******/
void display_sfm(char add0,char add1,char add3,char add4,char add6,char add7,char miao,char fen,char shi)
{
dula=1;
P0=table[miao%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add0];
wela=0;
delay(1);
dula=1;
P0=table[miao/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add1];
wela=0;
delay(1);
dula=1;
P0=table[fen%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add3];
wela=0;
delay(1);
dula=1;
P0=table[fen/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add4];
wela=0;
delay(1);
dula=1;
P0=table[shi%10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add6];
wela=0;
delay(1);
dula=1;
P0=table[shi/10];
dula=0;
P0=0xff;
wela=1;
P0=table1[add7];
wela=0;
delay(1);
}
/*********显示时分秒之间的间隔-函数********/
void display_jiange()
{
dula=1;
P0=0x40;
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=0x40;
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
}
/***********初始化函数**********/
void init()
{
num=0;
miao=50;
fen=58;
shi=23;
TMOD=0x01;
TH0=(65530-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/********按键函数***********/
void keyscan()
{
if(k0==0) //功能键按下
{
delay(5);
if(k0==0)
{
while(!k0);
delay(5);
while(!k0);
num++;
if(num==5)
num=1;
}
switch(num)
{
case 1:TR0=0; //功能键按一下:关闭定时,led1亮,调节秒钟
P1=0xfe;break;
case 2:P1=0xfd;break;//功能键按两下:led2亮,调节分钟
case 3:P1=0xfb;break;//功能键按三下:led3亮,调节时钟
case 4:TR0=1; //功能键按四下:灯全灭,定时开启
P1=0xff;break;
default:break;
}
}
if(num!=0)
{
if(k1==0) //加键按下
{
delay(5);
if(k1==0)
{
while(!k1);
delay(5);
while(!k1);
if(num==1) //秒加
{
miao++;
if(miao==60)
miao=0;
}
if(num==2) //分加
{
fen++;
if(fen==60)
fen=0;
}
if(num==3) //时加
{
shi++;
if(shi==24)
shi=0;
}
}
}
if(k2==0)
{
delay(5);
if(k2==0) //减键按下
{
while(!k2);
delay(5);
while(!k2);
if(num==1) //秒减
{
miao--;
if(miao==-1)
miao=59;
}
if(num==2) //分减
{
fen--;
if(fen==-1)
fen=59;
}
if(num==3) //时减
{
shi--;
if(shi==-1)
shi=23;
}
}
}
}
}
/*********定时函数***********/
void timer0() interrupt 1
{
TH0=(65530-50000)/256;
TL0=(65535-50000)%256 ;
tt++;
}
void main()
{
init();
while(1)
{
display_jiange();
keyscan();
if(tt==18)
{
tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
display_sfm(0,1,3,4,6,7,miao,fen,shi);
}
}