📄 hd7279.c
字号:
#define _HD7279_C_Def
#include "hd7279.h"
void write7279(unsigned char cmd, unsigned char dta);
unsigned char read7279(unsigned char command);
void send_byte( unsigned char out_byte);
unsigned char receive_byte(void);
void long_delay(void);
void short_delay(void);
//向HD7279发送纯指令
//cmd: 指令
void SendInstructTo7279(unsigned char cmd)
{
clk_HD7279 = 0;
_nop_();
_nop_();
cs_HD7279 = 0;
send_byte (cmd);
long_delay();
cs_HD7279 = 1;
}
//bitNo:0~7, 要设置那一位LED
//data: 该位LED要显示的数据, 格式为: DP|X|X|X|d3|d2|d1|d0 ,其中DP为小数点, X=无影响 , d0~d3为数据
//transMode: 0=译码方式0; 1=译码方式1;others=不译码
unsigned char SetupLedData(unsigned char bitNo, unsigned char dat, unsigned char transMode)
{
if( bitNo > 7) return 0;
if( transMode==0 )
bitNo = bitNo | DECODE0;
else if( transMode==1 )
bitNo = bitNo | DECODE1;
else
bitNo = bitNo | UNDECODE;
write7279(bitNo, dat);
return 1;
}
//flashCon: d8|...|d1 , d1到d8分别对应数码管1-8, 0=闪烁, 1=不闪烁
void Flash7279(unsigned char flashCon)
{
write7279(BLINKCTL, flashCon);
return;
}
//hideCon: d8|...|d1 , d1到d8分别对应数码管1-8, 0=消隐, 1=显示
void Hide7279(unsigned char hideCon)
{
write7279(ACTCTL, hideCon);
return;
}
//conOn: X|X|d6|...|d1, d0-d5范围为00H-3FH .从第1个数码管到第8个数码管,从G段到A,DP段 依次为每段编码.
void SegOn7279(unsigned char conOn)
{
write7279(SEGON, conOn);
return;
}
//conOff: X|X|d6|...|d1, d0-d5范围为00H-3FH .从第1个数码管到第8个数码管,从G段到A,DP段 依次为每段编码.
void SegOff7279(unsigned char conOff)
{
write7279(SEGOFF, conOff);
return;
}
unsigned char Read7279KeyCode(void)
{
return read7279(CMD_READ);
}
//向HD7279发送数据
void write7279(unsigned char cmd, unsigned char dta)
{
clk_HD7279 = 0;
_nop_();
_nop_();
cs_HD7279 = 0;
send_byte (cmd);
send_byte (dta);
long_delay();
cs_HD7279 = 1;
}
unsigned char read7279(unsigned char command)
{
clk_HD7279 = 0;
_nop_();
_nop_();
cs_HD7279 = 0;
send_byte(command);
return(receive_byte());
}
void send_byte( unsigned char out_byte)
{
unsigned char i;
long_delay();
for ( i=0;i<8;i++ )
{
if (out_byte & 0x80) dat_HD7279 = 1;
else dat_HD7279 = 0;
_nop_();
_nop_();
clk_HD7279 = 1;
short_delay();
clk_HD7279 = 0;
short_delay();
out_byte = out_byte<<1;
}
dat_HD7279 = 0;
}
unsigned char receive_byte(void)
{
unsigned char i, in_byte;
dat_HD7279 = 1; //
long_delay();
for ( i=0;i<8;i++ )
{
clk_HD7279 = 1;
short_delay();
in_byte = in_byte << 1;
if (dat_HD7279)
{
in_byte = in_byte|0x01;
}
clk_HD7279 = 0;
short_delay();
}
dat_HD7279=0;
long_delay();
cs_HD7279 = 1;
return (in_byte);
}
void long_delay(void)
{
unsigned char i;
for (i=0;i<0x30;i++)
_nop_();
}
void short_delay(void)
{
unsigned char i;
for (i=0;i<8;i++)
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -