51单片机电子时钟程序

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

#include

#include

sbit LS138A=P2^2;

sbit LS138B=P2^3;

sbit LS138C=P2^4;

sbit LED_alarm=P3^5; //闹钟指示灯

sbit led_naozhongonoff=P3^4;//闹铃响(LED亮)

sbit P0_1=P0^1;

sbit P0_2=P0^2;

sbit P0_3=P0^3;

sbit P3_0=P3^0;

sbit P3_1=P3^1;

unsigned char code Disp_Tab[] = {0x3f, 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char coun=0,coun1=0,sec=0,min=0,hour=0;

unsigned char timer_hour=0,timer_min=0,timer_sec=0;

unsigned char flag=0,flag1=0,flag2=0;

unsigned char temp=0,num=0,dingshi_num=0;

unsigned char alarm_hour=0,alarm_min=0,alarm_sec=0;

void init_t0();

void init_t1();

void set_time();

void dingshi_end();

void alarm_adjust();

void dingshi_start();

unsigned char key_scan();

void delay_ms(unsigned char i);

void disp_led(unsigned char hour,unsigned char min,unsigned char sec );

void init_t0()

{

TMOD|=0x01;

TH0=0x3c;

TL0=0xb0;

}

void init_t1()

{

TMOD|=0x10;

TH1=0x3c;

TL1=0xb0;

}

void delay_ms(unsigned char i)

{

unsigned int j;

for(i;i>0;i--)

for(j=200;j>0;j--);

}

void delay_disp()

{

unsigned char i,j, LedOut[6],hour1,min1,sec1;

if(flag1==0&&flag2==0)

{hour1=hour;min1=min;sec1=sec;}

if(flag2)

{hour1=timer_hour;min1=timer_min;sec1=timer_sec;}

if(flag1==1)

{hour1=alarm_hour;min1=alarm_min;sec1=alarm_sec;}

LedOut[0]=Disp_Tab[hour1/10];

LedOut[1]=Disp_Tab[hour1%10]|0x80; //0x7f小数点LedOut[2]=Disp_Tab[min1/10];

LedOut[3]=Disp_Tab[min1%10]|0x80;

LedOut[4]=Disp_Tab[sec1/10];

LedOut[5]=Disp_Tab[sec1%10];

for(j=4;j>0;j--)

{

for( i=0; i<6; i++)

{

switch(i)

{

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

case 4:LS138A=0; LS138B=0; LS138C=1; break;

case 5:LS138A=1; LS138B=0; LS138C=1; break;

}

P1 = LedOut[i];

delay_ms(2);

}

}

}

unsigned char key_scan()

{

unsigned char j,k;

j=0x10;

for(k=0;k<4;k++)

{

P0=~j;

if(P0_1==0) {delay_disp();if(P0_1==0) return k; break;}

if(P0_2==0) {delay_disp();if(P0_2==0) return k+4;break;}

if(P0_3==0) {delay_disp();if(P0_3==0) return k+8;break;}

j=j<<1;

}

if(P0_1&&P0_2&&P0_3)

return 66;

}

void disp_led(unsigned char hour,unsigned char min,unsigned char sec ) {

unsigned char i, LedOut[6];

LedOut[0]=Disp_Tab[hour/10];

LedOut[1]=Disp_Tab[hour%10]|0x80; //0x7f小数点

LedOut[2]=Disp_Tab[min/10];

LedOut[3]=Disp_Tab[min%10]|0x80;

LedOut[4]=Disp_Tab[sec/10];

LedOut[5]=Disp_Tab[sec%10];

for( i=0; i<6; i++)

{

switch(i)

{

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

case 4:LS138A=0; LS138B=0; LS138C=1; break;

case 5:LS138A=1; LS138B=0; LS138C=1; break;

相关文档
最新文档