单片机用C语言写两个数码管显示0到59循环的程序在归0

C语言编程LED数码显示管最末两位显示00——59在归0的程序。时间间隔为1S
下午就要,很急···求解答·

#include<reg52.h>
sbit wei=P3^0;
sbit led1=P3^2;
sbit led2=P3^3;
char tt =0;
char i=0;
unsigned char code led_zx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void mdelay(unsigned int delaytime)
{
int c;
for(;delaytime!=0;delaytime--)
for(c=0;c!=124;c++);
}
void main()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if ( tt==20 )
{
tt=0;
if ( wei==1 ) { i++; }
}
if ( i==59 ) { i=0; }
led2=0;
P1=(led_zx[i%10]);
led1=1;
mdelay(50);
led1=0;
P1=(led_zx[i/10]);
led2=1;
mdelay(50);
}
}
void timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
tt++;
}追问

请问是你自己编程还是上网找的?

追答

你找找看 有一样的吗。

追问

你用的是共阴的数码管?

追答

对 P1 段码 P3.2 P3.3 位控制, P3.0 控制计数,
自己可以 修改。

追问

恩,很详细,谢谢你啊,可不可以给我讲解一下TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
这段语句啊,没太看懂,不好意思啊

追答

这是设置 定时器 T0

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-12
没有电路图,没法写。
给你一个在我开发板上实现的程序吧
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;

sbit ENLED = P1^4; //这是一个3-8译码器
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;

void refresh();
void time0_ini();
void ini_ini();

uint16 count = 0;
uint8 s[2]; //十位与个位
code uint8 num[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83
,0xa7,0xa1,0x86,0x8e};
main()
{
ENLED = 0;
ADDR3 = 1;

time0_ini();
ini_ini();

while (1);
}

void refresh()
{
static uint8 j = 0;
switch (j)
{
case 0:{ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = num[s[0]];break;}
case 1:{ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = num[s[1]];break;}

}
j++;
if (j == 2)
j = 0;
}

void time0_ini()
{
TMOD |= 0x01; //定时器0 定时1ms
TMOD &= 0xfd;
TH0 = 0xfc;
TL0 = 0x67;
TR0 = 1;
}

void ini_ini()
{
EA = 1;
ET0 = 1;
}

void interrupt_time0() interrupt 1
{
static uint32 sec = 0;

TF0 = 0; // 可写可不写
TH0 = 0xfc;
TL0 = 0x67;

count++;

if (count == 1000)
{
sec++;
count = 0;

s[0] = sec/1%10;
s[1] = sec/10%10;

}
if (s[0] == 9 && s[1] == 5)
{
s[0] = 0;
s[1] = 0;
}
refresh();
}追问

请问狮子自己写的还是上网找的?

第2个回答  2012-10-12
C语言延时1S的程序应该没问题 再做个数码管显示程序 然后数字从0到59分别显示出来 条件句是否等于59,是则归零 整体思路很简单的
第3个回答  2012-10-12
说清楚点。
相似回答