📄 hd7279.c
字号:
#include "reg668.h"
#include "absacc.h"
#define uchar unsigned char
/*HD7279 指令*/
#define CMD_RESET 0xa4/*复位(清除)指令0xa4*/
#define CMD_TEST 0xbf/*测试指令0xbf*/
#define CMD_RTL_CYCLE 0xa3/*循环左移指令0xa3*/
#define CMD_RTR_CYCLE 0xa2/*循环右移指令0xa2*/
#define CMD_RTL_UNCYCLE 0xa1/*左移指令0xa1*/
#define CMD_RTR_UNCYCLE 0xa0/*右移指令0xa0*/
#define CMD_DECODE0 0x80/*译码方式0 0x80*/
#define CMD_UDECODE 0x90/*不译码方式 0x90*/
#define CMD_BLINKCTL 0x88/*闪烁控制0x88*/
#define CMD_ACTCTL 0x98/*削隐控制0x98*/
#define CMD_SEGON 0xe0/*段点亮指令0xe0*/
#define CMD_SEGOFF 0xc0/*段关闭指令0xc0*/
#define CMD_READKEY 0x15/*读键盘数据指令0x15*/
#define CMD_8255 XBYTE[0X7FF3]
#define pa XBYTE[0x7ff0]//(*(char*)0x8000)
#define pb XBYTE[0x7ff1]//(*(char*)0x8001)
#define pc XBYTE[0x7ff2]//(*(char*)0x8002)
void long_delay(void) reentrant;
void short_delay(void) reentrant;
/*定HD7279引脚(I/O口)*/
sbit HD7279KEY=P1^7;/*按键有效输出端*/
sbit HD7279DIO=P2^4;/*串行数据输入/输出端*/
sbit HD7279CLK=P3^4;/*同步时钟输入端*/
sbit HD7279CS=P3^5;/*片选端*/
/****************************************************************************
Function:send_byte
Parameter:Uc_Outbyte
Retrun:None
Description:向HD7279发送一个字节,包括指令,数据
*****************************************************************************/
void send_byte(uchar Uc_Outbyte) reentrant
{
uchar i;
HD7279CS=0;
long_delay();
//HD7279CLK=0;
for(i=0;i<8;i++)
{
if(Uc_Outbyte)//下载数据
{
HD7279DIO=1;
}
else
{
HD7279DIO=0;
}
short_delay();
HD7279CLK=1;
short_delay();
HD7279CLK=0;
Uc_Outbyte<<=1;
}
HD7279DIO=0;
// HD7279CS=1;
}
/****************************************************************************
Function:write7279
Parameter:cmd,data
Retrun:None
Description:向HD7279发送要显示的数据和译码方式
*****************************************************************************/
void WriteHd7279(uchar cmd,uchar dta) reentrant
{
send_byte(cmd);
send_byte(dta);
}
/****************************************************************************
Function:long_delay
Parameter:None
Retrun:None
Description:长延时
*****************************************************************************
*************************************************************************************/
void long_delay(void) reentrant
{
uchar i;
for(i=0;i<0x30;i++);
}
/****************************************************************************
Function:short_delay
Parameter:None
Retrun:None
Description:短延时
*****************************************************************************/
void short_delay(void) reentrant
{
uchar i;
for(i=0;i<8;i++);
}
/****************************************************************************
Function:Testhd7279
Parameter:None
Retrun:None
Description:测试HD7279一二三位红绿灯依次各亮一次
*****************************************************************************/
void Testhd7279(void) reentrant
{
WriteHd7279(CMD_UDECODE,0xaa);
long_delay();
long_delay();
WriteHd7279(CMD_UDECODE,0x55);
long_delay();
long_delay();
WriteHd7279(CMD_UDECODE+1,0xaa);
long_delay();
long_delay();
WriteHd7279(CMD_UDECODE+1,0x55);
long_delay();
long_delay();
WriteHd7279(CMD_UDECODE+2,0xaa);
long_delay();
long_delay();
WriteHd7279(CMD_UDECODE+2,0x55);
long_delay();
long_delay();
}
/*主程序*/
main (uchar i,uchar j)
{
int tmr;
Testhd7279( );
long_delay();
while (1)
{
for (tmr=0;tmr<0x2000;tmr++); // 上电延时
send_byte(CMD_RESET); // 复位HD7279A
WriteHd7279(i,j); // 按不译码方式显示
long_delay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -