📄 bc7281.c
字号:
//-----------------------------------------------------------------------------
// bc7281.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <reg52.h>
#include <intrins.h>
#include "main/main.h"
#include "cpu/cpu.h"
#include "ext/bc7281.h"
#include "misc/general.h"
#include "config/config.h"
//-----------------------------------------------------------------------------
// Function Prototype
//-----------------------------------------------------------------------------
void bc7281_Write_Byte ( char c );
void bc7281_Set (void);
void bc7281_Flash_Digital ( char dign );
void bc7281_Column1_OnOff ( bit f );
void bc7281_Dig5DP_OnOff ( bit f );
void bc7281_Display_Dig ( long dig, long t );
//-----------------------------------------------------------------------------
// bc7281 Write Byte Routines
//-----------------------------------------------------------------------------
void bc7281_Write_Byte ( char c )
{
char i, j; bit pick;
bc7281_CLK = LOW;
bc7281_CLK = HIGH;
i = 0x0A; j = 0xFF; pick = 1;
do {
Clear_Dog;
do {
if ( bc7281_DATA == LOW ) pick = 0;
} while ( --j && pick );
} while ( --i && pick );
if ( pick )
{
#if DISP_WARN
Speaker_Beep ();
#endif
return;
}
bc7281_CLK = LOW;
bc7281_CLK = HIGH;
Clear_Dog;
j = 0xFF; pick = 1;
do {
if ( bc7281_DATA == HIGH ) pick = 0;
} while ( --j && pick );
if ( pick )
{
#if DISP_WARN
Speaker_Beep ();
#endif
return;
}
for ( i = 8; i > 0; i-- )
{
if ( c & MSB )
bc7281_DATA = HIGH;
else
bc7281_DATA = LOW;
bc7281_CLK = LOW;
bc7281_CLK = HIGH;
c <<= 1;
for ( j = 13; j > 0; j-- ) _nop_ ();
}
bc7281_DATA = HIGH;
for ( j = 4; j > 0; j-- ) _nop_ ();
return;
}
//-----------------------------------------------------------------------------
// bc7281 Set All DP Off Routines
//-----------------------------------------------------------------------------
void bc7281_Set (void)
{
char i;
char buf[] = DP0_7;
bc7281_Write_Byte ( WorkMode_Reg );
bc7281_Write_Byte ( SCN | INV );
bc7281_Write_Byte ( FlashRate_Reg );
bc7281_Write_Byte ( FLASH_RATE );
for ( i = 0; i < DIG_N; i++ )
{
bc7281_Write_Byte ( SegmAddr_Reg );
bc7281_Write_Byte ( SD | buf[i] );
}
}
//-----------------------------------------------------------------------------
// bc7281 Flash Digital On/Off Routines
//-----------------------------------------------------------------------------
void bc7281_Flash_Digital ( char dign )
{
bc7281_Write_Byte ( FlashSwitch_Reg );
bc7281_Write_Byte ( dign );
}
//-----------------------------------------------------------------------------
// bc7281 Column1 On/Off Routines
//-----------------------------------------------------------------------------
void bc7281_Column1_OnOff ( bit f )
{
bc7281_Write_Byte ( DecodeCol1_Reg );
if ( f == ON )
bc7281_Write_Byte ( COL1_ON );
else
bc7281_Write_Byte ( COL1_OFF );
}
//-----------------------------------------------------------------------------
// bc7281 DP On Routines
//-----------------------------------------------------------------------------
void bc7281_Dig5DP_OnOff ( bit f )
{
bc7281_Write_Byte ( SegmAddr_Reg );
if ( f == ON )
bc7281_Write_Byte ( DIG5DP_ON );
else
bc7281_Write_Byte ( DIG5DP_OFF );
}
//-----------------------------------------------------------------------------
// bc7281 Dislay Digtial Routines
//-----------------------------------------------------------------------------
void bc7281_Display_Dig ( long dig, long t )
{
char i, buf;
for ( i = 0; i < DIG_N; i++ )
{
buf = ( dig >> (( DIG_N - 1 - i ) * 4 )) & 0x0F;
bc7281_Write_Byte ( DecodeBCD_Reg );
bc7281_Write_Byte ((( i << 4 ) & 0xF0 ) | buf );
}
if ( t ) Delay ( t );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -