/*-----------------------------------------------
内容:通过定时器计时
时间:完成于2011年03月15日
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
code unsigned char tab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9
unsigned char second_shiwei;//秒的个位与十位
unsigned char second_gewei;
unsigned char minute_shiwei;//分的个位与十位
unsigned char minute_gewei;
unsigned char hour_shiwei; //时的个位与十位
连锁系统
unsigned char hour_gewei;
unsigned char i=0;
unsigned char j=0; //轮换输入时分秒 unsigned char setflag=1; //转换标志
unsigned char setflag1=1; //输入完成标志位
static unsigned char second=0,minute=0,hour=0,count;//定义时分秒以及100次计数器
sbit key1=P3^1; //每按一次加一
sbit key0=P3^0; //每按一次加十
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{
TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式1,16位定时
TH0=0xd8;
TL0=0xf0;
IP=0X01; //设置外中断0优先级
IT0=1; //外中断设置为边沿触发方式
IT1=1;
TR0=1; //打开定时开关
while(1)
{
P0=second_gewei;//显示秒
P2=7;
delay(300);
P0=second_shiwei;
P2=6;
delay(300);
细胞分离培养
P0=minute_gewei;//显示分
P2=4;
delay(300);
P0=minute_shiwei;
P2=3;
delay(300);
P0=hour_gewei; //显示小时
P2=1;
delay(300);
P0=hour_shiwei;
P2=0;
delay(300);
}
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
TH0=0xd8; //重新赋值
真空马桶 TL0=0xf0;
count++;
if (count==100) //100x10ms=1S,大致延时时间
电子定时器 {
count=0;
second++;
P0=0x40;//显示-
P2=5;
delay(300); //短暂延时
P0=0x40;
P2=2;
delay(300);
P0=0X00;
if(second==60)//判断是否到一分钟
{
second=0;
minute++;
}
if(minute==60) //判断是否到一小时
{
minute=0;
hour++;
second+=7;
}
if(hour==24) //判断是否到一天
{
hour=0;
}
}
second_gewei=tab[second%10];//分别取时分秒的十位与个位
second_shiwei=tab[second/10];
minute_gewei=tab[minute%10];
minute_shiwei=tab[minute/10];
hour_gewei=tab[hour%10];
hour_shiwei=tab[hour/10];
}
void int1(void) interrupt 2 //在外中断1中实现时分秒的修改
{
setflag1=1;
while(setflag1)
{ setflag=1;
if(i==0) //i的作用是改变修改的对象,时,分,秒
{
溶液聚合 while(setflag)
{
P0=tab[second%10];//只显示秒
P2=7;
delay(300);
P0=tab[second/10];
P2=6;
delay(300);
if(!key0) //修改秒,每按一次加1
{ delay(15000);
second++;
if(second>=60)//判断是不是超过60
{
second=0;
}
}
if(!key1) //修改秒,每按一下加10
{ delay(15000);
second+=10;
if(second>=60)玻璃磨边
{
second=0;
}
}
}
}
setflag=1; //重新赋值 以备下次使用
if(i==1)
{
while(setflag)
{
P0=tab[minute%10];
P2=4;
delay(300);
P0=tab[minute/10];
P2=3;
delay(300);
if(!key0)
{ delay(15000);
minute++;
if(minute>=60)
{
minute=0;
}
}
if(!key1)
{ delay(15000);
minute+=10;
if(minute>=60)