单片机 定时器实现24小时时钟程序

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

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制

sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制

sbit LS138C = P2^4; //定义138译码器的输入脚C由

sbit k1=P2^0;

sbit k2=P2^1 ;

sbit k3=P2^5;

bit flag;

uchar sec=0,min=0,hour=12;

uchar count_10ms, DelayCNT;

int m=1;

//此表为LED 的字模, 共阴数码管0-9 -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

void delay(uint z)

{

int x,y;

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

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

}

void timer()

{

TMOD=0x01;

TH0=0xdc;TL0=0x00;

EA=1;ET0=1;TR0=1;

}

void key()

{ int t;

if(k1==0)

{

delay(30);

if(k1==0)

{ while(!k1);

t++;

m=t%2;

}

}

}

/************主函数**********************/ main()

{ unsigned int i ;

unsigned int LedOut[10];

timer();

while(1) //进入循环状态

{

if(m==0)

{

if(k2==0)

{

delay(30);

if(k2==0)

while(!k2);

hour++;

}

if(hour>=24)

hour=0;

if(k3==0)

{

delay(30);

if(k3==0)

while(!k3);

min++;

}

if(min>=60)

min=0;

}

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

LedOut[1]=Disp_Tab[hour%10];

LedOut[2]=Disp_Tab[10];

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

LedOut[4]=Disp_Tab[min%10];

LedOut[5]=Disp_Tab[10];

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

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

for( i=0; i<9; i++) //实现8位动态扫描循环

{

P0 = LedOut[i]; //将字模送到P0口显示

switch(i) //使用switch 语句控制位选也可以是用查表的方式学员可以试着自己修改

{

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;

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

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

}

delay(10);

}

}

}

void timer1() interrupt 1 // 中断函数

{

TH0=0xdc;TH0=0x00;

key();

if(m)

{

{

count_10ms++;

}

if(count_10ms==10)

{

count_10ms=0;

sec++;

if(sec>=60)

{

sec=0;

min++;

if(min>=60)

{

min=0;

hour++;

if(hour>=24)

{

hour=0;sec=0;min=0;

}

}

}

}

}

}

相关文档
最新文档