51实现数码管倒计时:
前言
通过修改+ +/- -,可以实现数码管加减,我这是从59倒计时到0,分隔符奇偶判断闪烁,倒计时结束闪烁结束
1.代码如下
代码如下(示例):
#include <reg51.h>
#include <intrins.h>
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
#define uint unsigned int
uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
unsigned int n,z,m=59;
void delay(unsigned char x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=112;j>0;j--);
}
void display(uint x)
{
uint a,b,c;
a=x/100;
b=x/10%10;
c=x%10;
{
P0 = table[a];
wei1=1;
wei2=0;
wei3=0;
wei4=0;
delay(1);
P0 = table[b];
wei1=0;
wei2=0;
wei3=1;
wei4=0;
delay(1);
P0 = table[c];
wei1=0;
wei2=0;
wei3=0;
wei4=1;
delay(1);
}
z=m%2;
if(z==0)
{
P0=0X40;
wei1=0;
wei2=1;
wei3=0;
wei4=0;
delay(1);}
if(z==1)
{
P0=0X40;
wei1=0;
wei2=0;
wei3=0;
wei4=0;
delay(1);}
}
void Timer0Init(void)
{
TMOD = 0x10;
TL1 = 0x00;
TH1 = 0x4c;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void Timer1()interrupt 1
{
n++;
if(n==100)
{
n=0;
m--;
z=m%2;
if(m==000)
{
while(1)
{
m=000;
display(m);
P0=0X00;
}
}
}display(m);
}
void main()
{
Timer0Init();
while(1);
}
希望能给大家提供帮助