51单片机数码管电子时钟C程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//**单片机stc89c52,8位共阴数码管 12M晶振**//

//*******P0位选,P2段选*******//

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x40,0xff};

uchar n;

uchar hh,mm,ss;

uchar nhh,nmm,nss;

uint year;

uchar day,mon,week;

uchar hhs,hhg,mms,mmg,sss,ssg;

uchar days,dayg,mons,mong;

uchar nhhs,nhhg,nmms,nmmg,nsss,nssg;

uchar set1=1,set2=1;

sbit dula=P3^3;

sbit fm=P3^2;

sbit k1=P3^4;

sbit k2=P3^5;

sbit k3=P3^6;

sbit k4=P3^7;

uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年

uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年

void jishi();

void baoshi();

void alarm();

void set_time();

void set_alarm();

void set_mdw();

void key_change();

void key_set();

void delay(int m) //延时程序,延时m*0.5ms

{

uint i;

uint j;

for (i=0;i

{

for(j=0;j<500;j++){}

}

}

void timer0() interrupt 1

{

TMOD=0x01;

TH0=0x3c;

TL0=0xb1;

n++;

jishi();

}

main()

{

TMOD=0x01;

TH0=0x3c;

TL0=0xb1;

TR0=1;

EA=1;

ET0=1;

hh=12;mm=00;ss=00;

nhh=7;nmm=30;nss=0;

year=2012;mon=01;day=01;week=7;

while(1)

{

hhs=hh/10%10;//时分秒

hhg=hh%10;

mms=mm/10%10;

mmg=mm%10;

sss=ss/10%10;

ssg=ss%10;

nhhs=nhh/10%10;//闹钟

nhhg=nhh%10;

nmms=nmm/10%10;

nmmg=nmm%10;

nsss=nss/10%10;

nssg=nss%10;

days=day/10%10;//月日

dayg=day%10;

mons=mon/10%10;

mong=mon%10;

key_change(); //k1按键扫描

key_set(); //k2按键扫描

set_time(); //设置时间

set_mdw(); //设置月日星期

set_alarm(); //设置闹钟

if(set1==1) //正常走时显示

{

dula=1;P2=tab[hhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[hhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位

dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[mms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[mmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[sss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[ssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}

if(set1==2) //设置时间

{

dula=1;P2=tab[hhs];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[hhg]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10];dula=0;P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[mms];dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff; //分十位dula=1;P2=tab[mmg];dula=0;P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[sss]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[ssg]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位

}

if(set1==3) //正常显示月日-星期

{

dula=1;P2=tab[mons];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[mong]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10]; dula=0; P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[days]; dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff;//分十位dula=1;P2=tab[dayg]; dula=0; P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位

dula=1;P2=tab[10];dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[week]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位

}

if(set1==4) //设置月日-星期

{

dula=1;P2=tab[mons];dula=0;P2=0xff;P0=0xef;delay(1);P0=0xff;//时十位dula=1;P2=tab[mong]; dula=0;P2=0xff;P0=0xdf;delay(1); P0=0xff;//时个位dula=1;P2=tab[10]; dula=0; P2=0xff; P0=0xbf;delay(1); P0=0xff;//"-" dula=1;P2=tab[days]; dula=0; P2=0xff;P0=0x7f;delay(1);P0=0xff;//分十位dula=1;P2=tab[dayg]; dula=0; P2=0xff; P0=0xfe;delay(1); P0=0xff;//分个位

dula=1;P2=tab[10];dula=0;P2=0xff;P0=0xfd;delay(1); P0=0xff;//"-" dula=1;P2=tab[10]; dula=0;P2=0xff;P0=0xfb;delay(1); P0=0xff;//秒十位dula=1;P2=tab[week]; dula=0;P2=0xff;P0=0xf7;delay(1);P0=0xff;//秒个位}

相关文档
最新文档