数字钟程序c语言,多功能数字钟C语言源程序.docx

#include #define uchar unsigned char

#define uint unsigned int

/*七段共阴管显示定义*/

uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,

0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};

/*定义并初始化变量*/

uchar seconde=0;

uchar minite=0;

uchar hour=0;

uchar mstcnt=0;

uchar years=13;

uchar months=6;

uchar days=29;

uchar mstcnt1=0;

uchar seconde1=0;

uchar minite1=0;

uchar hour1=0;

uchar slnum=0;

uchar flag=1,flag1=1;

sbit P3_0=P3^0; // second 调整定义

sbit P3_1=P3^1; //minite调整定义

sbit P3_2=P3^2; //hour调整定义

sbit P3_3=P3^3;

sbit P3_4=P3^4;

sbit P3_5=P3^5;

sbit P3_6=P3^6;

sbit LE=P3^7;

/*函数声明*/

void time_pro( ); //时间处理子程序

void display( ); //times显示子程序

void display1( ); //dates显示子程序

void display2( );

void keyscan( ); //键盘扫描子程序

void init();

/*****************************/

/*延时子程序*/

/****************************/

void delay (uint z)

{uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/**************************/

/*时间处理子程序*/

/**************************/

void time_pro( void)

{

if(seconde==60) //秒钟设为60进制

{ seconde=0;

minite++;

if( minite==60) //分钟设为60进制

{ minite=0;

hour++;

if(hour==24) //时钟设为24进制

{hour=0; }

}

}

}

/*****************************/

/*times显示子程序*/

/*****************************/

void display(void)

{

P2=0xfe;

P0=dispcode[hour/10]; //显示小时的十位

delay(5);

P2=0xfd;

P0=(dispcode[(hour%10)])|0X80; //显示小时的个位

delay(5);

P2=0xfb;

P0=dispcode[minite/10]; //显示分的十位

delay(5);

P2=0xf7;

P0=(dispcode[minite%10])|0X80; //显示分的个位

delay(5);

P2=0xef;

P0=dispcode[seconde/10]; //显示秒的十位

delay(5);

P2=0xdf;

P0=dispcode[seconde%10]; //显示秒的个位

delay(5);

}

/*****************************/

/*dates显示子程序*/

/*****************************/

void display1(void)

{

P2=0xfe;

P0=dispcode[years/10]; //显示小时的十位

delay(4);

P2=0xfd;

P0=(dispcode[(years%10)])|0X80; //显示小时的个位

delay(4);

P2=0xfb;

P0=dispcode[months/10]; //显示分的十位

delay(4);

P2=0xf7;

P0=(dispcode[months%10])|0X80; //显示分的个位

delay(4);

P2=0xef;

P0=dispcode[days/10]; //显示秒的十位

delay(4);

P2=0xdf;

P0=dispcode[days%10]; //显示秒的个位

delay(4);

}

void display2(void)

{

P2=0xfe;

P0=dispcode[hour1/10]; //显示小时的十位

delay(4);

P2=0xfd;

P0=(dispcode[(hour1%10)])|0X80; //显示小时的个位

delay(4);

P2=0xfb;

P0=dispcode[minite1/10]; //显示分的十位

delay(4);

P2=0xf7;

P0=(dispcode[minite1%10])|0X80; //显示分的个位

delay(4);

P2=0xef;

P0=dispcode[seconde1/10]; //显示秒的十位

delay(4);

P2=0xdf;

P0=dispcode[seconde1%10]; //显示秒的个位

delay(4);

}

/*******************************/

/*键盘扫描子程序*/

/*******************************/

void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次

{

TH0=0x3c;

TMOD = 0x11;

mstcnt++;

if(mstcnt==20)

{

seconde++;

mstcnt=0; //对计数单元的清零

}

}

void T1_time() interrupt 3

{

TH1=(65536-15536)/256;

TL1=(65536-15536)%256;

mstcnt1++;

if(mstcnt1==1)

{

mstcnt1=0;

seconde1++;

if(seconde1==99)

{

seconde1=0;

minite1++;

if(minite1==60)

{

minite1=0;

hour1++;

if(hour1==60)

{

hour1=0;

}

}

}

}

}

void keyscan (void)

{

if(P3_0==0) //按键1秒的调整

{

delay(10);

if(P3_0==0)

{ if(flag==1)

{

seconde++;

if(seconde==60)

{seconde=0; }

}

else if(flag==2)

{

days++;

if(days==32)

{

days=1;

}

}

else

{}

while(!P3_0);

}

}

if(P3_1==0) //按键2分的调整

{

delay(10);

if(P3_1==0)

{if(flag==1)

{

minite++;

if(minite==60)

{minite=0;}

}

else if(flag==2)

{months++;

if(months==13)

{

months=1;

}

}

else

{}

while(!P3_1);

}

}

if(P3_2==0) //按键3小时的调整

{

delay(30);

if(P3_2==0)

{ if(flag==1)

{

hour++;

if(hour==24)

{hour=0; }

}

else if(flag==2)

{

years++;

if(years==21)

{

years=13;

}

}

else

{}

while(!P3_2);

}

}

if(P3_3==0)

{

delay(10);

if(P3_3==0)

{

flag++;

if(flag==4)

{

flag=1;

}

while(!P3_3);

}

}

if(P3_4==0)

{

delay(10);

if(P3_4==0)

{

TR1=1;

}

}

if(P3_5==0)

{

delay(10);

if(P3_5==0)

{

TR1=0;

display2();

}

while(!P3_5);

}

if(P3_6==0)

{

delay(10);

if(P3_6==0)

{

hour1=0;

minite1=0;

seconde1=0;

}

while(!P3_5);

}

}

void init()

{

P1=0xff; //初始化p1口,全设为1

TMOD = 0x11; //time0为定时器,方式1

TH0=0x3c; //预置计数初值

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

TH1=(65536-15536)/256;

TL1=(65536-15536)%256;

ET1=1;

TR1=1;

}

/**************************/

/*主函数*/

/**************************/

void main(void)

{

init();

P1=0xff; //初始化p1口,全设为1

TMOD =0x11; //time0为定时器,方式1

TH0=0x3c; //预置计数初值

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

while (1)

{

keyscan( ); //按键扫描

time_pro( ); //时间处理

if(flag==1)

{

display( );//显示时间

}

else if(flag==2)

{

display1();

}

else

{

display2();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值