哎,试了好几天,也没试出来哪有问题,求助各位大虾
一个2位数码管,从1计到60(其实就是计秒),用到定时器
但我把程序下到板子里,是可以从1计到60,但是速度特别快,速度是10秒=现实的1秒,我实在找不到哪有问题,上程序
#include <reg52.h>
#define uint8 unsigned char
sbit Dge = P3^1; //数码管个位
sbit Dshi = P3^0; //数码管十位
uint8 num;
uint8 code DSY[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳编码
void Delay(uint8 xms) //延时函数
{
uint8 i,j;
for(i=xms;i>0;i--)
{
for(j=110;j>0;j--);
}
}
void main() //主函数
{
EA = 1;
ET0 = 1;
TR0 = 1;
TH0 = (65536-50000)/256; //设定初值
TL0 = (65536-50000)%256;
while(1)
{
Dge = 0; //个位上电(三极管,所以是低电平上电)
P1 = DSY[num%10]; //输出个位
Delay(5); //延时显示
Dge = 1; //关闭个位
P1 = 0xff; //关闭所有段码,防止其它数码管上电混乱
Dshi = 0; //十位上电
P1 = DSY[num/10]; //输出十位
Delay(5); //延时显示
Dshi = 1; //关闭十位
P1 = 0xff; //关闭所有段码
}
}
void T0_time() interrupt 1 //定时器
{
uint8 counter;
TH0 = (65536-50000)/256; //重装初值(12M晶振)
TL0 = (65536-50000)%256;
counter++;
if(counter==20) //20次为1秒
{
counter=0;
num++;
if(num == 60) //显示1-60
num = 0;
}
}
|