您的位置 首页 电路

用51单片机做的电子时钟

程序如下:includereg52h>unsignedcharcodetable1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x

程序如下:
#include
unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76};//字码表0-9,最终一个是一横”-“
unsigned int i,a,b,c,d,flag,flag1;
unsigned int sec,min,h,nm,nh,nz;
unsigned int w,day,mon,year;
int miao1,miao2,miao3;
sbit keyled=P1^0;
sbit key2=P1^1;
sbit keyinc=P1^2;
sbit keymood=P1^3;
sbit BEEP=P1^4;
void second();
void minute();
void hour();
void time();
void riqi();
void xianshi();
void delay10ms();
void delay20ms();
void tiaoshi();
void miaobiao();
void miaotime();
void week();
void naozhong();
void shengyin();
//前几天刚用了下定时器,想起来之前用汇编写的时钟程序根本没有什么功用,所以这几天就用C再写了下
//这个时钟的功用是仿照我自己的手表写的,功用彻底相同,有秒表,闹钟,能够显现年月日及星期
/
{
if(min==nm&&h==nh)//时刻到了,闹钟响
{
shengyin(); //闹钟的声响程序
}
}
if(c==0||c==2)
{
if(keymood==0)
{
miao1=0;
miao2=0;
miao3=0;
}
}
while(b==1)//确保按键只按一次,没有重复按键
{tiaoshi();
goto B1; //假如b还等于1,刚重复扫描秒表界面
}
}
/
{ i=0;//将i清零,确保每次进入都是相同的
B2:if(nz==0)
{ if(min==nm&&h==nh)
{
shengyin();
}
}
naozhong();
while(b==2)
{ tiaoshi();
goto B2;
}
}
/
{ i=1;
B3:if(nz==0)
{ if(min==nm&&h==nh)
{
shengyin();
}
}
xianshi(); //显现程序,用i的巨细来分配,相当于调时、分、秒就显现时刻,调年月日就显现日期
while(b==3)
{tiaoshi();
goto B3;
}
}
/
{i=0;
if(nz==0)
{ if(min==nm&&h==nh)
{
shengyin();
}
}
second();
minute();
hour();
}
if(keyinc==0)
{ delay10ms();
if(keyinc==0)
{
B: riqi();
while(keyinc==0)
{
goto B;
}
}
}
if(keymood==0)
{
delay10ms();
if(keymood==0)
{
N: naozhong();
}
while(keymood==0)
{
goto N;
}
}
tiaoshi();
/
{
if(flag>10) //在flag>10的时分封闭一切的数码管,其他时刻敞开相应位,这样就能够到达闪耀的意图了
{
P3=0xff;
}
else
{
P3=0x7f;
}
}
else //假如i不等于1,刚正常显现,不会闪耀
{
P3=0x7f;
}
P2=table1[secge];
for(a=0;a<100;a++);
if(i==1)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xbf;
}
}
else//假如i不等于1,刚正常显现,不会闪耀
{
P3=0xbf;
}
P2=table1[secshi];
for(a=0;a<100;a++);
P3=0xdf;
P2=table1[10];
for(a=0;a<100;a++);
}
//*******************************分显现程序***************************
void minute()
{
int minge,minshi;
minge=min%10;
minshi=min/10;


if(i==2)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xef;
}
}
else
{
P3=0xef;
}
P2=table1[minge];
for(a=0;a<100;a++);

if(i==2)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xf7;
}
}
else
{
P3=0xf7;
}
P2=table1[minshi];
for(a=0;a<100;a++);
P3=0xfb;
P2=table1[10];
for(a=0;a<100;a++);
}
//*********************************时显现程序*************************
void hour()
{
int hourge,hourshi;
hourge=h%10;
hourshi=h/10;

if(i==3)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfd;
}
}
else
{
P3=0xfd;
}
P2=table1[hourge];
for(a=0;a<100;a++);
if(i==3)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfe;
}
}
else
{
P3=0xfe;
}
P2=table1[hourshi];
for(a=0;a<100;a++);
}
//*****************************年、月、日显现程序************************
void riqi()
{
int dayge,dayshi;
int monge,monshi;
int yearge,yearshi;
dayge=day%10;
dayshi=day/10;
if(i==4)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0x7f;
}
}
else
{
P3=0x7f;
}
P2=table1[dayge];
for(a=0;a<100;a++);
if(i==4)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xbf;
}
}
else
{
P3=0xbf;
}
P2=table1[dayshi];
for(a=0;a<100;a++);
P3=0xdf;
P2=table1[10];
for(a=0;a<100;a++);
monge=mon%10;
monshi=mon/10;
if(i==5)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xef;
}
}
else
{
P3=0xef;
}
P2=table1[monge];
for(a=0;a<100;a++);
if(i==5)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xf7;
}
}
else
{
P3=0xf7;
}
P2=table1[monshi];
for(a=0;a<100;a++);
P3=0xfb;
P2=table1[10];
for(a=0;a<100;a++);
yearge=year%10;
yearshi=year/10;
if(i==6)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfd;
}
}
else
{
P3=0xfd;
}
P2=table1[yearge];
for(a=0;a<100;a++);
if(i==6)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfe;
}
}
else
{
P3=0xfe;
}
P2=table1[yearshi];
for(a=0;a<100;a++);
}
//*****************************星期显现程序****************************
void week()
{
if(i==7)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xef;
}
}
else
{
P3=0xef;
}
P2=table1[w];
for(a=0;a<100;a++);
}
//*****************************秒表显现程序************************
void miaobiao()
{
int miao1ge,miao1shi;
int miao2ge,miao2shi;
int miao3ge,miao3shi;
miao1ge=miao1%10;
miao1shi=miao1/10;
P3=0x7f;
P2=table1[miao1ge];
for(a=0;a<100;a++);
P3=0xbf;
P2=table1[miao1shi];
for(a=0;a<100;a++);
P3=0xdf;
P2=table1[10];
for(a=0;a<100;a++);
miao2ge=miao2%10;
miao2shi=miao2/10;
P3=0xef;
P2=table1[miao2ge];
for(a=0;a<100;a++);
P3=0xf7;
P2=table1[miao2shi];
for(a=0;a<100;a++);
P3=0xfb;
P2=table1[10];
for(a=0;a<100;a++);
miao3ge=miao3%10;
miao3shi=miao3/10;
P3=0xfd;
P2=table1[miao3ge];
for(a=0;a<100;a++);
P3=0xfe;
P2=table1[miao3shi];
for(a=0;a<100;a++);
}
//****************************闹钟显现程序************************
void naozhong()
{
int nmge,nmshi;
int nhge,nhshi;
nmge=nm%10;
nmshi=nm/10;
if(i==1||i==3||i==5||i==7)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xef;
}
}
else
{
P3=0xef;
}
P2=table1[nmge];
for(a=0;a<100;a++);
if(i==1||i==3||i==5||i==7)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xf7;
}
}
else
{
P3=0xf7;
}
P2=table1[nmshi];
for(a=0;a<100;a++);
P3=0xfb;//显现一横
P2=table1[10];
for(a=0;a<100;a++);
nhge=nh%10;
nhshi=nh/10;
if(i==2||i==4||i==6)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfd;
}
}
else
{
P3=0xfd;
}
P2=table1[nhge];
for(a=0;a<100;a++);
if(i==2||i==4||i==6)
{
if(flag>10)
{
P3=0xff;
}
else
{
P3=0xfe;
}
}
else
{
P3=0xfe;
}
P2=table1[nhshi];
for(a=0;a<100;a++);
P3=0xdf; //显现H
P2=table1[11];
for(a=0;a<100;a++);
}
//*******************************调时显现***********************
void xianshi()
{
if(i>3&&i<7)
{
riqi();
}
else if(i==7)
{
week();
}
else
{
second();
minute();
hour();
}
}
//***********************************闹钟声响程序****************
void shengyin()
{
BEEP=~BEEP;
for(a=0;a<10;a++);
}
//***************************时钟加1程序*******************************
void time()
{
if(flag==90)
{
flag=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
day++;
if(day==31)
{
day=0;
mon++;
if(mon==12);
{
mon=0;
year++;
}
}
}
}
}
}
}
//****************************秒表加1程序****************
// flag1标志位主要是为秒表而设的
void miaotime()//秒表加时程序
{

if(flag1==1)
{
flag1=0;
miao1++;
if(miao1==100)
{
miao1=0;
miao2++;
if(miao2==60)
{
miao2=0;
miao3++;
if(miao3==60)
{
miao3=0;
}
}
}
}
}
//************************调时程序*******************************
void tiaoshi()//
{
if(keyinc==0&&keymood==0)
{
delay10ms();
if(keyinc==0&&keymood==0)
{
nz++;
if(nz==2)
{
nz=0;
}
}
while(keyinc==0&&keymood==0);
}
//********************
if(keymood==0)
{
delay10ms();
if(keymood==0)
{
i++;
if(i==8)
{
i=1;
}
}
while(keymood==0);
}
//******************************
if(key2==0)
{
for(a=0;a<2000;a++);
if(key2==0)
{
b++;
if(c>0||i>0)//只需调了秒表,再按一次key2键就能够退回到正常时刻显现界面
{
if(key2==0)
{
b=0;
c=0;
}
}
//***
if(b==4)
{
b=0;
}
}

while(key2==0);
}
//****************************************
//**********
if(b==2&&(i==1||i==3||i==5||i==7)) //调闹钟的分
{
if(keyinc==0)
{
nm++;
if(nm==60)
nm=0;
}
while(keyinc==0);
}
//
if(b==2&&(i==2||i==4||i==6))//调闹钟的时
{
if(keyinc==0)
{
nh++;
if(nh==24)
{
nh=0;
}
}
while(keyinc==0);
}
//**********************
if(b==1)
{
if(keyinc==0)
{
delay10ms();
if(keyinc==0)
{
c++;
if(c==3)
{
c=1;
}
}
while(keyinc==0);
}
}

//*******************************************************
if(i==1)
{

if(keyinc==0)
{
delay10ms();
if(keyinc==0)
{
sec=0;
}
while(keyinc==0);
}
}
if(i==2&&keyinc==0)
{
for(a=0;a<5000;a++);
if(keyinc==0)
{
min++;
}
if(min==60)
{
min=0;
}
delay10ms();
}
//***************
if(i==3&&keyinc==0)
{
for(a=0;a<5000;a++);
if(keyinc==0)
{
h++;
}
if(h==24)
{
h=0;
}
while(keyinc==0);
}
//******************
if(i==4&&keyinc==0)
{
for(a=0;a<5000;a++);
if(keyinc==0)
{
day++;
if(day==31)
{
day=0;
}
}
while(keyinc==0);
}
//
if(i==5&&keyinc==0)
{
for(a=0;a<5000;a++);
if(keyinc==0)
{
mon++;
if(mon==13)
{
mon=0;
}
}
while(keyinc==0);
}
//
if(i==6&&keyinc==0)
{
for(a=0;a<5000;a++);
if(keyinc==0)
{
year++;
}
while(keyinc==0);
}
//
if(i==7&&keyinc==0)
{
delay10ms();
if(keyinc==0)
{
w++;
}
while(keyinc==0);
}
}
//*****************************延时程序******************************
void delay10ms() //延时10MS子程序,在消除键盘的颤动
{
for(a=0;a<5000;a++);
}
//******************************************************
void delay20ms()//延时20MS,在调时刻的时分,按下超越20MS就能够被以为重复按键
{
for(a=0;a<10000;a++);
}
//*******************************中止服务程序************************
void timer1() interrupt 3
{
TH1=(65535-10000)/256;//核算初值
TL1=(65535-10000)%256;
flag++;
time();
if((c==1&&i==0)||(c==1&&(i==2||i==4||i==6)))
{
flag1++;
}
miaotime();
}
程序主要功用有时刻显现,秒表,闹钟,年月日及星期显现,根本与一般的电子手表相同。还应该有个灯,按键现已画出来了,程序部分没有写,不过比较简单,就没有写了。当然还有一些当地要再改下,像闹钟应该还有个懒人形式,关闹钟也没有到达料想的作用,当然闹钟的声响就更不用说了,怎样都调不到手表上的那种洪亮的声响。先这样,今后再尽力!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/260875.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部