如何用C51单片机做出以下程序 “秒表是倒计时,从100秒开始倒计时 用数码管实时显示当前计时值”

谢谢了

假设P0 P2接数码管,静态驱动,程序如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=100;
uchar time=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}

void main(void )//主程序
{
TMOD=0X01;
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
P0=table[num/10];
Delay1ms(2);
P2=table[num%10];
Delay1ms(2);
}
}
void TIMER0()interrupt 1//中断程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
num--;
}
if(num==0)
{
num=100;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-17

你等等,晚上做实物。看附件里这个行不,有程序,望采纳。

追问

就是这样的,编程怎么编啊

追答

采纳,给你发

#include
#define uchar unsigned char
#define uint unsigned int
char code dm[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0};//数字对应的段码
unsigned char scan[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; //1到8,逐个扫描数码管 接P0口
int c;
uint b=100;
/////////////////////////////////////
void delay(uint t)
{
uint i;
while(t--)
{
for (i=0;i<125;i++)
{ }
}
}

void display(char t)
{

P0=dm[(t/100)%10];P2=scan[0];delay(3);
P0=dm[(t%100)/10];P2=scan[1];delay(3);
P0=dm[t%10];P2=scan[2];delay(3);
}
/////////////////////////////////////////
void main(void)
{
TMOD=0X01;
TH0=-(1000/256);
TL0=-(1000%256);
EA=1;ET0=1;TR0=1;

while(1)
{
display(b);
}

}
///////////////////////////////////////////////////
void timer0( ) interrupt 1 /*interrupt和1之间有一空格!*/
{
TL0=-(1000%256); //为了精确,TL0写在TH0前,且初值设高一点点
TH0=-(1000/256);
c++;
if(c==800) {c=0;b--;if(b==0) b=100;}
}

本回答被提问者采纳
第2个回答  2016-07-17
你好!程序是c语言写吗?数码管怎么驱动