基于51单片机的闹钟程序

更新时间:2023-06-05 10:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

简洁.易懂

#include<reg52.h>
sbit k10=P1^0;
sbit k11=P1^1;
sbit k12=P1^2;
sbit k13=P1^3;
unsigned char shizhong=0,fenzhong=0,miaozhong=0,
shizhong1,fenzhong1,miaozhong1,
shizhong2,fenzhong2,miaozhong2,
shi=0,fen=0,miao=0,
shi1,shi2,fen1,fen2,miao1,miao2,
i=0,xuanze=0;
unsigned char code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int time);
void pingmu();
void naozhong();
void chufa();
void key1();
void key2();
void key3();
void xianshi();
void xianshi1();
//--------------------------------------------------//主函数
main()
{
shizhong=12;
TMOD = 0X01;
TCON = 0X10;
TH0 = 0X4C;
TL0 = 0X00;
IE = 0x82;
while(1)
{
key1();
key2();
key3();
pingmu();
chufa();
switch(xuanze)
{
case 0: xianshi();break;
case 1: naozhong();break;
default: ; break;
}
while(fenzhong==fen&&shizhong==shi)
{
chufa();
P0=0xbf;
P2=0x00;
}
}
}
//--------------------------------------------------//时针自加键
void key1()
{
if(xuanze==0)
{
if(k10==0)
{
delay(1000);
if(k10==0)
{
while(k10==0)
{
xianshi();
}
shizhong++;
if(shizhong==24)
shizhong=0;
}
}
}
else
{
if(k10==0)
{
delay(1000);
if(k10==0)
{
while(k10==0)
{
xianshi1();
}
shi++;
if(shi==24)
shi=0;
}
}
}
}
//--------------------------------------------------//分针自加键
void key2()
{
if(xuanze==0)
{
if(k11==0)
{
delay(1000);
if(k11==0)
{
while(k11==0)
{
xianshi();
}
fenzhong++;
if(fenzhong==60)
fenzhong=0;
}
}
}
else
{
if(k11==0)
{
delay(1000);
if(k11==0)
{
while(k11==0)
{
xianshi1();
}
fen++;
if(fen==60)
fen=0;
}
}
}
}
//--------------------------------------------------//秒针自加键
void key3()
{
if(xuanze==0)
{
if(k12==0)
{
delay(1000);
if(k12==0)
{
while(k12==0)
{
xianshi();
}
miaozhong++;
if(miaozhong==60)
miaozhong=0;
}
}
}
else
{
if(k12==0)
{
delay(1000);
if(k12==0)
{
while(k12==0)
{
xianshi1();
}
miao++;
if(miao==60)
miao=0;
}
}
}
}

//--------------------------------------------------//计算函数
void chufa()
{
shizhong1 = shizhong/10;
shizhong2 = shizhong%10;
fenzhong1 = fenzhong/10;
fenzhong2 = fenzhong%10;
miaozhong1 = miaozhong/10;
miaozhong2 = miaozhong%10;
shi1 = shi/10;
shi2 = shi%10;
fen1 = fen/10;
fen2 = fen%10;
miao1 = miao/10;
miao2 = miao%10;

}
//--------------------------------------------------//时钟显示函数
void xianshi
()
{
P0 = a[shizhong1];
P2 = 0x7f;
delay(300);
P0 = a[shizhong2];
P2 = 0xbf;
delay(300);
P0 = 0xbf;
P2 = 0xdf;
delay(300);
P0 = a[

简洁.易懂

fenzhong1];
P2 = 0xef;
delay(300);
P0 = a[fenzhong2];
P2 = 0xf7;
delay(300);
P0 = 0xbf;
P2 = 0xfb;
delay(300);
P0 = a[miaozhong1];
P2 = 0xfd;
delay(300);
P0 = a[miaozhong2];
P2 = 0xfe;
delay(300);
P2 = 0xff; //把所有的三极管关闭,否则最后一个数码管多显示一会
}
//--------------------------------------------------//延时函数
void delay(unsigned int time)
{
while(time--);
}
//--------------------------------------------------//中断函数
void time() interrupt 1
{
TH0 = 0X4C;
TL0 = 0X00;
i++;
if(i==20)
{
i = 0;
miaozhong++;
if(miaozhong==60)
{
miaozhong=0;
fenzhong++;
if(fenzhong==60)
{
fenzhong=0;
shizhong++;
if(shizhong==24)
{
shizhong=0;
}
}
}
}
}
//--------------------------------------------------//屏幕选择函数
void pingmu()
{
if(k13==0)
{
delay(1000);
if(k13==0)
{
while(k13==0)
{
;
}
xuanze++;
if(xuanze==2)
xuanze=0;
}
}
}
//--------------------------------------------------//闹钟
void naozhong()
{
key1();
key2();
key3();
xianshi1();
}
//--------------------------------------------------//闹钟显示函数
void xianshi1()
{
P0 = a[shi1];
P2 = 0x7f;
delay(300);
P0 = a[shi2];
P2 = 0xbf;
delay(300);
P0 = 0xbf;
P2 = 0xdf;
delay(300);
P0 = a[fen1];
P2 = 0xef;
delay(300);
P0 = a[fen2];
P2 = 0xf7;
delay(
300);
P0 = 0xbf;
P2 = 0xfb;
delay(300);
P0 = a[miao1];
P2 = 0xfd;
delay(300);
P0 = a[miao2];
P2 = 0xfe;
delay(300);
P2 = 0xff;
}

本文来源:https://www.bwwdw.com/article/5de1.html

Top