#include "reg51.h"
#include "stdio.h"
char code cDISP_HexTo7Seg[16] =
{0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
char code cDISP_Bit4[4] =
{0xE0, 0xD0, 0xB0, 0x70};
char data vDISP_SegValue[4] = {0x06,0x5B,0x4F,0x66};
char data vDISP_Blink[4] = {0,0,0,0};
unsigned char vDISP_Index, vDISP_BlinkCnt;
void DISP_Init(void)
{
//初始化TimerA
TH0 = 0xF0;
TL0 = 0xBE;
TMOD = 0x01;
ET0 = 1;
TR0 = 1;
}
void DISP_BitNum(char D0, char D1, char D2, char D3)
{
vDISP_SegValue[0] = cDISP_HexTo7Seg[D0 & 0x0F];
if (D0 & 0x80)
vDISP_SegValue[0] |= 0x80;
vDISP_SegValue[1] = cDISP_HexTo7Seg[D1 & 0x0F];
if (D1 & 0x80)
vDISP_SegValue[1] |= 0x80;
vDISP_SegValue[2] = cDISP_HexTo7Seg[D2 & 0x0F];
if (D2 & 0x80)
vDISP_SegValue[2] |= 0x80;
vDISP_SegValue[3] = cDISP_HexTo7Seg[D3 & 0x0F];
}
void DISP_Integer(int Value, char BitPos)
{
char D0, D1, D2, D3;
if (Value > 9999)
Value = 9999;
D0 = 0;
while (Value > 999)
{
D0++;
Value -= 1000;
}
if (BitPos == 3)
D0 |= 0x80;
D1 = 0;
while (Value > 99)
{
D1++;
Value -= 100;
}
if (BitPos == 2)
D1 |= 0x80;
D2 = 0;
D3 = Value;
while (D3 > 9)
{
D2++;
D3 -= 10;
}
if (BitPos == 1)
D2 |= 0x80;
DISP_BitNum(D0, D1, D2, D3);
}
void DISP_SetBlink(char D0, char D1, char D2, char D3)
{
vDISP_Blink[0] = D0;
vDISP_Blink[1] = D1;
vDISP_Blink[2] = D2;
vDISP_Blink[3] = D3;
}
void MN_T0_ISR(void) interrupt 1 using 1
{
TH0 = 0xF0;
TL0 = 0xBE;
P3 = 0xFF;
vDISP_BlinkCnt++;
vDISP_BlinkCnt &= 0x7F;
if (vDISP_Blink[vDISP_Index] && (vDISP_BlinkCnt < 0x3F))
{
P2 = 0;
}
else
{
P2 = vDISP_SegValue[vDISP_Index];
}
P3 = cDISP_Bit4[vDISP_Index];
vDISP_Index++;
vDISP_Index &= 3;
}
#include "reg51.h"
#include "DisplayUnit.h"
void main(void)
{
DISP_Init();
DISP_Integer(5678,2);
DISP_SetBlink(0,0,1,1);
EA = 1;
while (1)
{
}
}
|