微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 实用制作:基于单片机的数显可调定时器

实用制作:基于单片机的数显可调定时器

时间:09-03 来源:互联网 点击:

for(;ms>0;ms--)

  for(j=0;j120;j++);

  }

  void tt0() interrupt 1 using 1//定时器T0中断子程序

  {

  TH0=(65535-50000)/256;

  TL0=(65535-50000)%256;

  if(count==1200) //50ms*1200=60s(秒)

  {

  count=0;

  if(hour==0minute==0)

  {

  P3_0=1; //继电器动作

  while(1){P1_7=0;}//充电完成 灯由闪烁变常亮

  }

  if(minute==0)

  {

  minute=60; hour--;

  if(hour>=9)hour=9;

  }

  minute--;

  if(minute>=59)minute=59;

  }

  buffer[0]=minute%10;//秒的低位放入显示缓冲区

  buffer[1]=minute/10;//秒的高位放入显示缓冲区

  buffer[2]=hour; //小时放入显示缓冲区

  count++;

  if(count%10==0)

  P1_7=!P1_7; //正在充电 充电指示灯每秒闪烁一次

  }

  void display()//数码管显示子程序

  {uchar i;

  for(i=2;i!=0xff;i--)

  {

  P0=buffer[i];

  P2=bbit[i];

  delay(10);

  P0=0XFF;

  }

  }

 void main()//主函数

  {

  P1=0xff; //初始化

  P3=0;

  TMOD=0x01;

  TH0=(65535-50000)/256;

  TL0=(65535-50000)%256;

  EA=1;

  ET0=1;

  while(1)

  {

  buffer[0]=minute%10;

  buffer[1]=minute/10;

  buffer[2]=hour;

  display();

  if(P1_0==0)//分钟“加十”

  {

  delay(5);

  if(P1_0==0)

  {minute+=10;if(minute>=59)minute=0;} while(P1_0==0);

  }

  if(P1_1==0)//分钟“减十”

  {

  delay(5);

  if(P1_1==0)

  {minute-=10;if(minute>=59)minute=0;}while(P1_1==0);

  }

  if(P1_3==0)//小时“加一”

  //P1_3和P1_2互换位置,完全是因为PCB布局的需要

  {

  delay(5);

  if(P1_3==0)

  {hour++;if(hour>=9)hour=9;} while(P1_3==0);

  }

  if(P1_2==0)//小时“减一”

  {

  delay(5);

  if(P1_2==0)

  {hour--;if(hour>=9)hour=9;}while(P1_2==0);

  }

  if(P1_4==0)break;

  //如果按下设置键,跳出本循环,定时开始

  }

  TR0=1;

  while(1)

  {

  display();

  }

  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top