//功能:00~99的简易秒表设计,两个静态数码管,定时器采用 <查询方式>
#include "reg51.h"
void delay1s() //函数功能:在T1工作方式1下的1s延时函数,采用查询方式实现
{
unsigned char 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=1
TF1=0; //50ms定时时间到,将T1溢出标志位TF1清零
}
}
//函数名:disp(unsigned char i)
//函数功能:将i的值显示在两个静态连接的数码管上
//形式参数:i,取值范围0~99
void disp(unsigned char i)
{
unsigned char led[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
//定义0~9显示码,共阳极数码管
P1=led[i/10]; //显示i高位
P2=led[i%10]; //显示i低位
}
void main()
{
unsigned char miao=0; //秒计数器定义
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==100)miao=0; //秒计数计满,则从0开始计数
}
}
|