51单片机 秒表设计 怎么用按键控制开始 停止和清零?

如题所述

#include<reg52.h>

sbit AA=P3^4;//数码管显示用IO端口
sbit BB=P3^5;
sbit CC=P3^6;
sbit DD=P3^7;

sbit X=P2^7;//启动按钮
sbit Y=P2^6;//停止按钮
sbit Z=P2^5;//清零按钮

int aa,temp;
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极
//char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
void delay(int x); //延迟函数声明
void display(int d); //显示函数声明
/*******************************************************************************/
/*******************************************************************************/
void main()
{
temp=0;
TMOD=0x01;//设置定时器工作方式
TH0=(65536-922)/256;//1毫秒
TL0=(65536-922)%256;//定时器装初始值
EA=1;//开总中断
ET0=1;//开定时器 0 的中断
while(1)
{
if(X==0){TR0=1;}//开启定时器,开始计数
if(Y==0){TR0=0;}//关闭定时器,暂停计数
if(Z==0){temp=0;}//清零计数器
display(temp); //调用显示子函数
}
}
/*******************************************************************************/
/*******************************************************************************/
void delay(int x) //延迟子函数
{
int y;
for(;x>0;x--)
for(y=80;y>0;y--);
}
/*******************************************************************************/
/*******************************************************************************/
void display(int d) //显示子函数
{
char d1,d2,d3,d4;
d4=d%10; //取个位 %求余
d3=(d/10)%10; //取十位
d2=(d/100)%10; //取百位
d1=(d/1000)%10; //取千位

P1=table[d4]; AA=0; delay(1); AA=1;//个位显示
P1=table[d3]; BB=0; delay(1); BB=1;//十位显示
P1=table[d2]; CC=0; delay(1); CC=1;//百位显示
P1=table[d1]; DD=0; delay(1); DD=1;//千位显示
}
/*******************************************************************************/
/*******************************************************************************/
此程序本人编写的,绝对可用,只要你连接正确
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-10
//定义IO和变量
sbit start = P1^1;
sbit stop = P1^2;
sbit reset = P1^3;
bit flag_start;//计数标志位
uint sec;//秒
//按键功能
if(start==0)
flag_start=0;
if(stop==0)
flag_start=1;
if(reset==0)
{flag_start=0;sec=0;}
//计数程序
if(flag_start)
{sec++;}本回答被网友采纳
相似回答