📄 hd7279.h
字号:
// 1.由于数码管会乱序,HD7279的按键改成不能连续触发
#include <reg51.h>
/*--------函数列表-----------------
unsigned char HD7279_GetKey(void);
void Delay10ms(unsigned char time)
void Write7279(unsigned char, unsigned char);// 写入HD7279
void HD7279_SendByte(unsigned char); //发送一个字节
----------------------------------*/
#define BellNum 10
sbit Bell=P2^1;//bell contrller
//***I/O 口定义 ***
sbit HD7279_CS =P1^4; // HD7279_CS -- P1.4
sbit HD7279_CLK =P1^5; // HD7279_CLK-- P1.5
sbit HD7279_DATA=P1^6; // HD7279_DATA-- P1.2
sbit HD7279_KEY =P1^7; // HD7279_KEY-- P1.3
//-------- HD7279A 指令 -----------------
#define HD7279_RESET 0xa4 //复位
#define HD7279_TEST 0xbf //测试
#define HD7279_RLC 0xa3 //循环左移
#define HD7279_RRC 0xa2 //循环右移
#define HD7279_RL 0xa1 //左移
#define HD7279_RR 0xa0 //右移
#define HD7279_DECODE0 0x80 //译码方式0
#define HD7279_DECODE1 0xc8 //译码方式1
#define HD7279_UNDECODE 0x90 //译码方式2:不译码
#define HD7279_HIDE 0x98 //消隐
#define HD7279_FLASH 0x88 //闪烁
#define HD7279_SEGON 0xe0 //段亮
#define HD7279_SEGOFF 0xc0 //段灭
#define HD7279_READ 0x15 //读
//----------按键定义 ------------------------
#define RunKey 0x3D //运行按键
#define StopKey 0x25 //停止按键
#define ChangeKey 0x3B //单位转换按键
#define FrontUpKey 0x3c //前胎按键
#define FrontDownKey 0x24
#define BehandUpKey 0x3e //后胎按键
#define BehandDownKey 0x26
//----------------------------------------------
void HD7279_LongDelay(void)
{
unsigned char i;
for (i=0;i<6;i++);
}
void HD7279_ShortDelay(void)
{;}
/*------------------------延时程序(fn:6M)------------------------------------------------*/
void Delay10ms(unsigned char time)
{
unsigned char i;
unsigned int j;
for(i=0;i<time;i++)
{
for(j=0;j<931;j++) {;}
}
}
void Delay(unsigned int i)
{
while(i--);
}
//NoPower
//无源蜂鸣器使用的频率发生法
void Voice()
{
unsigned int i=500;
while(i--)
{
Bell=0;
Delay(BellNum);
Bell=1;
Delay(BellNum);
}
}
void HD7279_SendByte( unsigned char out_byte)
{
unsigned char i;
HD7279_CS=0;
HD7279_LongDelay();
for(i=0;i<8;i++)
{
if(out_byte&0x80) { HD7279_DATA=1; }
else { HD7279_DATA=0; }
HD7279_CLK=1;
HD7279_ShortDelay();
HD7279_CLK=0;
HD7279_ShortDelay();
out_byte=out_byte<<1;//??
}
HD7279_DATA=0;
}
//接受一个BYTE
unsigned char HD7279_ReceiveByte(void)
{
unsigned char i, in_byte;
HD7279_DATA=1;
HD7279_LongDelay();
for(i=0;i<8;i++)
{
HD7279_CLK=1;
HD7279_ShortDelay();
in_byte=in_byte<<1;
if(HD7279_DATA) { in_byte=in_byte|0x01; }
HD7279_CLK=0;
HD7279_ShortDelay();
}
HD7279_DATA=0;
return (in_byte);
}
//写入命令及参数
void Write7279(unsigned char command, unsigned char dta)
{
//P1=0xf0;
HD7279_SendByte( command );
HD7279_SendByte( dta );
}
// 显示两位BCD数
void ShowBCD(unsigned char block,unsigned char dig)
{
Delay10ms(1);
Write7279(HD7279_DECODE0+block ,dig/10+0x80);
Write7279(HD7279_DECODE0+block-1,dig%10);
}
unsigned char HD7279_GetKey()
{ unsigned char key=0xff;
Delay10ms(2);
if(!HD7279_KEY)
{
HD7279_SendByte(HD7279_READ);
key=HD7279_ReceiveByte();
switch(key)
{
case RunKey: Delay10ms(20);Voice();break;
case StopKey: Delay10ms(20);Voice();break;
case ChangeKey: Delay10ms(20);Voice();break;
case FrontUpKey: Delay10ms(20); break;
case FrontDownKey: Delay10ms(20);break;
case BehandUpKey: Delay10ms(20); break;
case BehandDownKey: Delay10ms(20); break;
default :key=0xff;break;
}
// Write7279(0x88,0xff);
return(key); //break;
}
}
//读键盘函数
/*
main()
{
HD7279_SendByte(HD7279_RESET);
Write7279(HD7279_DECODE0,0x98);
Write7279(0x88,0xfc);
ShowBCD(1,5);
delay(1000);
Write7279(0x88,0xff);
while(1);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -