请教各位高手一个问题:利用定时器中断实现实时时钟,显示时:分:秒。

请教各位高手一个问题:利用定时器中断实现实时时钟,显示时:分:秒。,第1张

定时器乱友中断是设定定时时间腔耐,到了该时间,就进行处理一次。

可以处理按键扫描,动态显示,时钟累加等。

外部中断,是与外接接触,哗圆槐当中断引脚为低电平时,进入中断。

如果单片机没有专门的键盘中断,可以使用外部中断来做键盘中断。

你这个提问还是不太清楚,中断时钟,有两种,一个是不利用DS1302,一个是利用它。还有,你到底用早亩什么显示呢?所以,紧密点,恩,我现在有两个,一个是不利用DS1302用数码管显示,一个是利用DS1302用1602显示,希望对你有帮助……

如果你要,就联系我吧!

先给你一个数码管的显示的:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

unsigned char table[]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71,0x80}

sbit led1=P1^0sbit led2=P1^1

uchar num=0,num1=0,i=0,j=0,k=0

void dsande (long int t1,uchar t2)//显示t1和延时t2函数de:delay,an:and,ds:display

{

uchar t3

long int y=t1

for(t2>0t2--,y=t1)

for(t3=7y!=0t3--,y/=10)

{

P0=0

P2=(P2&0xf8)|t3//择位

P0=table[y%10]//这种从低位开始扫描,就只需求关茄睁丛于十的余数,前面的for自然的降位给它,丢最后颤樱一个数字

}

}

void main()

{ long int a

TMOD=0x11

TH0=(65536-50000)/256

TL0=(65536-50000)%256//为第一次做准备,赋值

TH1=(65536-50000)/256//这是为数码管显示做的准备

TL1=(65536-50000)%256

EA=1//开启总中断

ET0=1//开启定时器0

ET1=1

TR1=1

TR0=1//启动定时器0 //始终执行中断与主函数无关了

while(1)

{ if(i==60)//写在中断里面也行,但这个本身的误差来自程序执行的时间误差

{i=0

j++

if(j==60)

{j=0,k++

if(k==24)

k=0

}

}

a=k*10000+j*100+i

dsande(a,1)

}

}

void T1_time() interrupt 3

{

TH1=(65536-50000)/256

TL0=(65536-50000)%256

num1++

if(num1==20)

{

num1=0

i++

/*if(i==60)

{i=0

j++

if(j==60)

{j=0,k++

if(k==24)

k=0

}

}*/

}

}

void T0_time() interrupt 1 //隔50ms跑过来到中断程序里来,

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

num++

if(num==20)//50ms*20为1s

{

num=0

led1=~led1//实现灯的闪动

led2=~led2

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12315025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存