单片机的可调秒表时钟程序

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

#include

unsigned char i=0,count,second,minute,hour,key;

unsigned char time[8];

unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};// 显示段码值012345679-

unsigned char code seg[]={0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮

////////////////////////////////////////////////////////

sbit LED0=P1^0;

sbit LED1=P1^1;

sbit LED2=P1^2;

sbit LED3=P1^3;

sbit LED4=P1^4;

sbit LED5=P1^5;

sbit LED6=P1^6;

sbit LED7=P1^7;

sbit S1=P3^0;

sbit S4=P3^1;

sbit S7=P3^2;

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出TL0=0x00;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

void Init_Timer1(void)

{

TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH1=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出TL1=0x00;

EA=1; //总中断打开

ET1=1; //定时器中断打开

TR1=1; //定时器开关打开

}

void delay(unsigned int i)//延时函数

{

while(i--);

}

void keyscan()//键盘扫描函数,使用行列反转扫描法{

if(S1==0)

{

LED2=0;

while(S1==0);

LED2=1;

hour++;

}

if(S4==0)

{

LED3=0;

while(S4==0);

LED3=1;

minute++;

}

if(S7==0)

{

LED4=0;

while(S7==0);

LED4=1;

second++;

}

}

void main()

{

hour=12;minute=35;

Init_Timer0();

Init_Timer1();

time[2]=10;

time[5]=10;

while(1)

{

keyscan();//调用键盘扫描,

}

}

void Timer1_isr(void) interrupt 3 using 1 {

TH1 = 0xF8;

TL1 = 0x30;

P0=dofly[time[i]];//取显示数据

P2=seg[i]; //取段码

i++;

if(i==8)

{

i=0;

LED0=~LED0;

}

}

void Timer0_isr(void) interrupt 1 using 1 {

TH0 = 0xD8;

TL0 = 0xF0;

count++;

if (count==100)

{

count=0;

second++;

LED7=~LED7;

}

if (second==60)

{

second=0;

minute++;

}

if (minute==60)

{

minute=0;

hour++;

}

if (hour==24)

{

hour=0;

}

time[7]=second%10;

time[6]=second/10;

time[4]=minute%10;

time[3]=minute/10;

time[1]=hour%10;

time[0]=hour/10; }

相关文档
最新文档