求大神写一下单片机at89c52控制秒表电路循环显示0到99的程序

如题所述

我写的是共阳极,你想共阴极,自己改RXD和TDX输入电平以及P2码值就好。

根据你题目要求连接的。两个LED动态显示,交替间隔时间常量stime我设的50ms,因为我是仿真软件,间隔太短显示不出交替效果,你用板子测试的话,可以把间隔调小。

另外你题目暂停按钮连在普通引脚, 如果按钮直接连外部中断0来实现暂停会更敏感。

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

#define duan P2

#define stime 50 //LED交替闪烁间隔时间

void init();

void pause();

sbit wei1=P3^0;

sbit wei2=P3^1;

sbit s2=P1^4;

sbit s3=P1^6;

//共阳极

void delay(uint xms);

uint g=0;

uint s=0;

uint count=0;

uint ispause=0;

void main()

{

uchar nums[10]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x98};

init();

while(1)

{

if(s2==0 && ispause==0)

{

if(s2==0)

{

while(s2==0);

ispause=1;

pause();

}

}

else if(s3==0 && ispause==1)

{

if(s3==0)

{

while(s3==0);

ispause=0;

pause();

}

}

if(s==0)

{

duan=nums[g];

wei1=0;

wei2=1;

}

else

{

duan=nums[s];

wei1=1;

wei2=0;

delay(stime);

duan=nums[g];

wei1=0;

wei2=1;

delay(stime);

}

}

}

void pause()

{

EA=~EA;

}

void init()

{

TMOD=0x02; //T0 工作模式2 自动装填8位 200us

TH0=0x38;

TL0=0x38;

EA=1;

ET0=1;

TR0=1;

}

void ct() interrupt  1

{

if(count<5000)

count++;

else

{

count=0;

if(g==9)

{

g=0;

if(s==9)

s=0;

else

s++;

}

else

g++;

}

}

void delay(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=112;j>0;j--);

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-06-06
就给5分,也太少了,这个问题哪怕你给200分也没人给你做的
第2个回答  2018-06-02
你的电路上是无法分辨出这个数码管是共阴还是共阳的。追问

我也不懂。能不能你重新做一个 配上图和程序

相似回答