C51单片机运用定时器T0中断实现电子时钟
上面是电路原理图
下面是程序源代码:
/*****************************************************************************
功能描述:运用定时器T0实现电子时钟
**************************************************************************/
#include"reg52.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit p32=P3^2;
sbit p33=P3^3;
uchar num;
uint number,number0,number1;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void tiaoz();
void delay()
{
uint b;
for(b=300;b>0;b--);
}
void time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
//tiaoz();
}
//以下屏蔽内容为 利用两个外部中断来调整“时,分”
/*void tiaof() interrupt 0 //分针调整
{
if(p32==0)
{
delay();
if(p32==0)
{
number=0;
number0++;
while(!p32);
if(number0>=60)
number0=0;
}
}
}
void tiaos() interrupt 2 //时针调整
{
if(p33==0)
{
delay();
if(p33==0)
{
number=0;
number1++;
while(!p33);
if(number1>=24)
number1=0;
}
}
}
*/
//运用独立按键来调整“时,分”
void tiaoz0()
{
if(p32==0)
{
delay();
if(p32==0)
{
number=0;
number0++;
while(!p32);
if(number0>=60)
number0=0;
}
}
if(p33==0)
{
delay();
if(p33==0)
{
number=0;
number1++;
while(!p33);
if(number1>=24)
number1=0;
}
}
}
void tiaoz() //调整子程序
{
if(num==20) //如果20次到了则说明一秒时间到
{
num=0;
number++;
if(number==60) //如果number=60说明满一分钟,则向分钟数加一
{
number=0;
number0++;
if(number0==60) //如果number0=60说明60分钟已经满,向时加一
{
number0=0;
number1++;
if(number1==24) //如果number1>24,则从0开始
number1=0;
}
}
}
P0=table[number1/10]; //时的十位
P2=0;
delay();
P0=table[number1%10]; //时的个位
P2=1;
delay();
P0=table[10];
P2=2;
delay();
P0=table[number0/10]; //分的十位
P2=3;
delay();
P0=table[number0%10]; //分的个位
P2=4;
delay();
P0=table[10];
P2=5;
delay();
P0=table[number/10]; //取出秒的十位并且显示该数
P2=6;
delay(); //秒的十位
P0=table[number%10]; //送秒的个位给最后一只数码管
P2=7; //打开数码管8 秒的个位
delay();
}
void main()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
//外部中断启动
/* EX0=1;
IE1=1;
EX1=1;
IE0=1;
*/
ET0=1;
TR0=1;
while(1)
{
tiaoz0();
tiaoz();
}
}
C51单片机定时器T0电子时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)