DP-51PROC MCU貌似用的是51单片机吧???
这个是以前写的程序了,貌似可以满足你的要求。 引脚你看你的怎么改吧。。。。。
源代码: (MCU:AT89S52 编译环境:Keil uVision4)
#include
#define W P2 //数码管位选
#define D P1 //数码管段选
#define uchar unsigned char
#define TH (65363-10000)/256 //定时器中断初始值
#define TL (65363-10000)%256
uchar display[] = { 0xfc , 0x60 ,0xda , 0xf2 ,0x66 ,0xb6 , 0xbe , 0xe0 , 0xfe , 0xf6 }; //数码管0~9数字的代码
int s[3],count=0,k=0;
void xian(); //数码管显示
void delay(int); //延迟
void main()
{
IE=0x83; //中断设定
TCON=0x01;
TMOD=0x01;
//中断开了两个,一个是定时器的,还有一个是外部中断,用于暂停,方式是负边缘扫描
TH0=TH; //定时器载入初始值
TL0=TL;
TR0=1; //定时器中断开
while(1)
xian();
}
void xian()
{
W=0xfe; //显示第一位
D=display[s[0]];
delay(1);
D=0x00;
W=0xfd; //显示第二位
D=(display[s[1]])|0x01; //后面的0x01是那个小数点
delay(1);
D=0x00;
W=0xfb; //显示第三位
D=display[s[2]];
delay(1);
D=0x00;
}
void delay(int x) //延迟函数
{
int i,j;
for(i=0;i
}
void my_T0(void) interrupt 1 //定时器中断函数
{
TH0=TH; //载入初值
TL0=TL;
if(!k)
if(++count==10) //每10次记一次数
{
count=0;
s[0]+=1;
if(s[0]==10)
{
s[1]++;
s[0]=0;
}
if(s[1]==10)
{
s[2]++;
s[1]=0;
}
if(s[2]==10)
{
s[0]=0;
s[1]=0;
s[2]=0;
}
}
}
void my_TH0(void) interrupt 0 //外部中断0
{
k=1-k;
}
这个就是秒表了。。。。。
另外说明一下:其中暂停是用的外部中断0,清零其实可以直接用复位键。
另外这个秒表实际上并不太精确,根据每人晶振的不同,定时器的初值还要进行改动。。。。
我不清楚DP-51PROC 里面的引脚是怎么分布的,你就研究一下改改这个程序吧。
建议单片机不能用了
不好解决,两个单片机可以解决,一个计时,一个负责记录按狃时间和显示,否则不准。