当前位置:文档之家› 51单片机定时器数码管60秒倒计时

51单片机定时器数码管60秒倒计时

#include
#include"delay.h"
#define DataPort P0

sbit Latch1=P2^2;//段锁存
sbit Latch2=P2^3;//位锁存
unsigned char code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char i=0,num=60,j=0;

void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-50000)/256; //重新赋值
TL0=(65536-50000)%256;

EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}

main()
{


unsigned char Temp[2];
Init_Timer0();
while(1)
{
Temp[0]=DuanMa[num/10];
Temp[1]=DuanMa[num%10];

DataPort=WeiMa[i];
Latch2=1;
Latch2=0;

DataPort=Temp[i];
Latch1=1;
Latch1=0;

DelayMs(1);

i++;


if(i>=2)
{
i=0;
}
if(num==0xff)
{
num=60;
}
}
}

void Timer0_isr(void) interrupt 1 using 1
{
TH0=(65536-50000)/256; //重新赋值
TL0=(65536-50000)%256;
j++;
if(j==20)
{
j=0;
num--;
}


}




#include
typedef unsigned char uchar ;
typedef unsigned int uint ;
uchar temp,bai,shi,ge,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,};//定义数码管参数
void delay(uint);//声明全局函数
void display();
void main()
{
temp=60;
num=0;


while(1)
{
TMOD=0x01; //定时器0
EA=1; //开总中断
ET0=1;
TR0 = 1; //开定时器中断

display();

delay(5);

display();
delay(5);
}
}

void T0_time()interrupt 1
{

TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==40)
{
num=0;
temp--;
if(temp==0)
{
temp=60;
}
}
}
void display()
{
ge = temp / 10;
shi = temp % 10;
P0 = table[ge];
P2 = table[shi];
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

相关主题
文本预览
相关文档 最新文档