99秒表程序--基于单片机at89c51

更新时间:2023-05-24 12:38:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

/******99 秒表*******/、

/**---------------------------------最新文件信息---------------------------------------------------

功能:99 秒表

作 者:

单 位:

时 间:

描 述:晶振11.0952MHz;数码管采用共阴;

**-------------------------------------------------------------------------------------------------

******************************************************************************/

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table_duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示0~9;

/******单片机接口***********/

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

sbit key=P3^5;//按键

#define duanma P0//段码

#define weima P2//位码

/******全局变量************/

uchar miao=0;//秒

uchar flag=0;//秒中间变量

uchar keynum=0;//按键次数

bit key_flag=0;//按键标志

/*****中断初始化**********/

void InitTimer0()

{

TMOD = 0x01;//工作方式

TH0 = 0x4C;//高8 位

TL0 = 0x00;//低8 位

EA = 1;//总中断

ET0 = 1;//允许定时器0 中断

TR0 = 0;//启动定时器0

}

/**********延时函数**********

功能:延时若干ms

入口参数:t

出口参数:无

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

*****************************/

void delay_ms(uint t)

{

uint a,b,c;

for(c=t;c>0;c--)

{

for(b=102;b>0;b--)

for(a=3;a>0;a--);

}

}

/********秒显示函数***

功能:实现秒的显示

入口参数:无

出口参数:无

*****************************/

void miao_display()

{

if(flag>=20)

{

flag=0;//清零

miao++;//秒累加

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

if(miao>99) miao=0;//秒大于99 清零

}

weima=0xfe;//选择第1 位

duanma=table_duanma[miao%10];

delay_ms(1);//延时1ms

weima=0xfd;//选择第2 位

duanma=table_duanma[miao/10];

delay_ms(1);//延时1ms

}

/**********按键扫描及处理函数**********

功能:实现按键输入及处理

入口参数:无

出口参数:无

*****************************/

void scankey()

{

if((key==0)&&(key_flag==0))//判断是否有按键按键且按键标志是否为0

{

key_flag=1;//按键标志为1

}

if((key==1)&&(key_flag==1))//等待按键释放

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

{

key_flag=0;//按键标志清零

keynum++;//按键次数累加

if(keynum>3)keynum=1;//按键次数大于3 置1 switch(keynum)

{

case 1: TR0 = 1;//启动定时器0

break;

case 2: TR0 = 0;//关闭定时器0

break;

case 3: miao=0;//秒清零

break;

default:break;//不满足条件返回

}

}

}

/*******主函数**************

功能:

入口参数:无

出口参数:无

*****************************/

99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。

void main(void)

{

InitTimer0();//定时器初始化

while(1)

{

scankey();//按键扫描

miao_display();//秒显示

}

}

/**********定时器0 中断函数******** 功能:实现秒中间变量flag 的累加 入口参数:无

出口参数:无

*****************************/ void Timer0Interrupt(void) interrupt 1 {

TH0 = 0x4C;//高8 位

TL0 = 0x00;//低8 位

flag++;//flag 累加

}

本文来源:https://www.bwwdw.com/article/kr24.html

Top