#include <reg52.h>
#include "anjian.h"
/*数码管位选io口*/
sbit x = P2^2;
sbit y = P2^3;
sbit z = P2^4;
char code smgduan[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};/*0~15的显示*/
char code smgxiaoshu[10] = {0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87,
0xff, 0xef};/*0~9带小数点*/
void Smgxy();
void SMG(int a, int b)/*数码管组函数*/
{
Smgxy();
delay(10);
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
P0 = smgduan[b];
delay(200);
}
void Smgxy()/*数码管消影*/
{
int a = 8;
for(a; a > 0; a--)
{
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
P0 = 0x00;
}
}
void smg_W(int a)
{
Smgxy();
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
}
void smg_D(long int c)/*多个数码管显示*/
{
if (c == 0)
{
smg_W(1);
P0 = 0x3f;
}
if (c > 0)
{
int b;
for (b = 1; c > 0; b++)
{
SMG(b, c % 10);
c = c / 10;
}
}
if (c < 0)
{
int b, e;
e = -c;
for (b = 1; e > 0; b++)
{
SMG(b, e % 10);
e = e / 10;
}
smg_W(b);
P0 = 0x40;
}
delay(200);
Smgxy();
}