求单片机数码管两个按键(开始⼀暂停,清零)秒表的程序及protues的图~ 共阳极...protues仿真也要

加急。。。今天下午就要交给老师了。。
2025-03-01 20:51:34
推荐回答(1个)
回答1:

//程序如下,建议仿真的时候把三极管最好去掉
//P3.2为开始和暂停,P3.3为清零,计时时间为99.99秒
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
uchar data da[4];
sbit k1=P3^2;
sbit k2=P3^3;
uint zs,xs;
uchar a,mov;
//延时子程序
void d(uint i)
{uint j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
//显示函数
void prt()
{
da[0]=zs/10;
da[1]=zs%10;
da[2]=xs/10;
da[3]=xs%10;
if(a==1) //控制小数点的位置
P0=num[da[a]]+0x80;
else
P0=num[da[a]];
d(5);
P2<<=1;
P0=0xff;
a++;
if(a>3) {a=0; P2=0x10;}
}
//按键子函数
void key()
{
if(!k1)
{d(5);
while(!k1) {prt();}
TR2=~TR2;
}
if(!k2)
{d(5);
while(!k2) {prt();}
TR2=0;
zs=xs=0;
}
}

//定时器中断子函数
timer2() interrupt 5
{
TF2=0;
xs++;
if(xs==100)
{if(zs<99)
xs=0;
else xs=99;
zs++;
if(zs>99)
{zs=99;}
}
}
//主函数
void main()
{
RCAP2H=(65536-10000)/256;
RCAP2L=(65536-10000)%256;
TR2=0;
ET2=1;
EA=1;
P2=0x10;
while(1)
{prt();
key();
}
}
纯手打,望采纳···