计时到60秒归零的单片机程序

2025-03-30 19:03:02
推荐回答(1个)
回答1:

//功能:

#include"reg51.h"

#define uchar unsigned char

#define uint unsigned int

//函数名:delay1()

//函数功能:T1在工作方式1下的1s延时函数,采用查询方式实现                   

//形式参数:无

//返回值:无

void delay1s()

{

 uchar i;

 for(i=0;i<20;i++)    //设置20次循环次数

 {

  TH1=(65536-50000)/256;  //重新设置T1计数初值高8位,定时时间50ms

  TL1=(65536-50000)%256;  //重新设置T1计数初值低8位

  TR1=1;      //启动T1

  while(!TF1);    //查询计数是否溢出,即定时50ms时间到,TF1

  TF1=0;      //50ms定时时间到,将T1溢出标志位TF1清零 

 }

}

//函数名:disp

//函数功能:将i的值显示在两个静态数码管上

//形式参数:i,取值范围0~99

//返回值:无

void disp(uchar i)

{

 uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

 // 定义数码管显示的数值

 P1=led[i/10];   //显示i高位

 P2=led[i%10];   //显示i低位

}

void main()

{

 uchar miao=60;     //秒定义计数器

 TMOD=0x10;      //设置T1为工作方式1

 TH1=(65536-50000)/256;   //设置T1计数初值高8位,定时时间50ms

 TL1=(65536-50000)%256;   //重新设置T1计数初值低8位

 TR1=1;       //启动定时器开始计数

 while(1)

 {

  disp(miao);     //显示秒计数器值

  delay1s();     //调用1s延时函数

  miao--;      //秒计数器加1

  if(miao==0)miao=60;  //秒计数到0后,则重新返回60计数

 }

}