⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hd7279.h

📁 C51语言的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 + -