打印
[新手园地]

【第五批】点亮hd7279驱动的LED数码管

[复制链接]
3398|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kuangnan|  楼主 | 2011-12-16 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kuangnan 于 2011-12-20 16:56 编辑


我用51做产品,做了块HD7279驱动的键盘,LED显示,LED指示板,现用NUC120来实现点亮。
用HD7279的好处是3个IO口就能搞定LED显示,对于用51单片机的同志们来说,是多么好的东西,而且还外带搞定64个键盘。HD7279工作电压在4.5V-5V之间,所以用M0来实现,你必须给HD7279单独供电。
本例中我用得端口是 PA.2;PA.3;PA.4这三个端口,主要是学习板上LED灯也是这个IO口,图个方便,好观察而已。
连线:PA.2----CS;PA.3---CLK,PA.4---DATA;  HD7279电源:5V另接
接下来就要改HD7279头文件了:
很简单,直接删掉原先C51的所有头文件,用以下替换就可
#ifndef __nuc1xx_H__
#include "nuc1xx.h"
#endif

并把各管脚换成新唐的脚(呵呵  M0的脚);延时函数都省略了,直接用 DrvSYS_Delay(10);//delayus(10);替换。

程序下载,一次成功。

为什么要做这个简单的显示呢?因为有了板子后,我们总得有个观察数据的地方呀,你可能用LCD,也可能直接串口到你的电脑显示器,所以拿到板子后,我还是弄51的习惯,就点个LED数码管吧先。附上完整的 HD7279.H文件。由于是接触板子才2-3天,有改进的地方希望同志们指正。
//HD7279A指令
#ifndef __nuc1xx_H__
#include "nuc1xx.h"
#endif
/* HD7279_CS=GPA2;
HD7279_CLK=GPA3;
HD7279_Data=GPA4;
HD7279_key=GPA5;//用INT0触发检测键盘是否有按键     
*/

#define CMD_RESET 0xa4//复位
#define CMD_TEST 0xbf//测试
#define DECODE0 0x80//
#define DECODE1 0xc8//
#define CMD_READ 0x15//读取键盘指令   
#define HD7279_UNDECODE 0x90//
#define RTL_CYCLE 0xa3//循环左移指令
#define RTR_CYCLE 0xa2//循环右移指令
#define RTL_UNCYL 0xa1//左移指令
#define RTR_UNCYL 0xa0//右移指令
#define ACTCTL 0x98//消隐
#define SEGON 0xe0//段点亮   
#define SEGOFF 0xc0//段关闭   
#define BLINKCTL 0x88//闪烁控制  
#define DIGIT1 HD7279_UNDECODE+0
#define DIGIT2 HD7279_UNDECODE+1
#define DIGIT3 HD7279_UNDECODE+2
#define DIGIT4 HD7279_UNDECODE+3
#define DIGIT5 HD7279_UNDECODE+4
#define DIGIT6 HD7279_UNDECODE+5
#define DIGIT7 HD7279_UNDECODE+6
#define DIGIT8 HD7279_UNDECODE+7
#define NOTHING 0xFF
/***********微秒**************  
void delayus(uint16 t)
{
uint16 d=0;
d=t;
  do
  {
   NOP();
  }while(--d>0);
}
/***************************/
uint8 HD7279_Read_Byte()
{
uint8 i, Byte=0;
DrvGPIO_SetBit(E_GPA, 4);//HD7279_Data=1;
DrvSYS_Delay(10);//delayus(10);
for(i=0;i<8;i++)
{
  DrvGPIO_SetBit(E_GPA, 3);//HD7279_CLK=1;
  DrvSYS_Delay(2);//delayus(2);
    Byte<<=1;
  if(DrvGPIO_GetBit(E_GPA,4))//if(HD7279_Data)
  {
  Byte=Byte|0x01;
  }
     DrvGPIO_ClrBit(E_GPA, 3);//HD7279_CLK=0;
     DrvSYS_Delay(4);//delayus(2);
}
return Byte;  
}
/*************发送一个字节****************************/
void send_byte(uint8 out_byte)
{
  uint8 i;
  //HD7279_CS=0;
  //delayus(50);//long_delay();
  for(i=0;i<8;i++)
   {
    if(out_byte&0x80)//逻辑与全1出1,否则为0
    {
  DrvGPIO_SetBit(E_GPA, 4);// HD7279_Data=1;
    }
    else
    {
    DrvGPIO_ClrBit(E_GPA, 4);// HD7279_Data=0;
    }
       DrvGPIO_SetBit(E_GPA, 3);//HD7279_CLK=1;
DrvSYS_Delay(4);//delayus(4);
DrvGPIO_ClrBit(E_GPA, 3);//HD7279_CLK=0;
DrvSYS_Delay(4);//delayus(4);
out_byte=out_byte*2;//左移一位   
   }
DrvGPIO_ClrBit(E_GPA, 4);//HD7279_Data=0;
}
/***********************/
uint8 HD7279_Read_Data(uint8 Command)
{
  uint8 Temp=0;
DrvGPIO_ClrBit(E_GPA, 2);//HD7279_CS=0;
DrvSYS_Delay(50);//delayus(50);
send_byte(Command);
Temp=HD7279_Read_Byte();
DrvSYS_Delay(1);//_nop_();
DrvGPIO_SetBit(E_GPA, 2);//HD7279_CS=1;
return(Temp);
}
/******************************************/
/*********读取一个字节**************
UINT8 read_byte(UINT8 command)
{
  send_byte(command);
  delayus(4);
  return(receive_byte());
}
/***********写入一个字节************************/
void write7279(uint8 cmd,uint8 dta)
{
    DrvGPIO_ClrBit(E_GPA, 2);//HD7279_CS=0;
DrvSYS_Delay(50);//delayus(50);
    send_byte(cmd);// HD7279_Write_Byte(Command);
send_byte(dta);//HD7279_Write_Byte(Data);
DrvGPIO_SetBit(E_GPA, 2);//HD7279_CS=1;
}

相关帖子

沙发
kuangnan|  楼主 | 2011-12-16 22:01 | 只看该作者
本帖最后由 kuangnan 于 2011-12-17 12:09 编辑

1# kuangnan
附上 HD7279的中文资料,对没用这片板子的同志们或许有点帮助,注意 是中文哦  呵呵
另外上面的程序段直接替换的语句时,原先的语句并没删除,方便C51同志们阅读比较
还有就是我用HD7279PDF自带的例子在51上调试却不成功,改了延时才可以。

hd7279a.pdf

376.73 KB

使用特权

评论回复
板凳
consif| | 2011-12-16 22:59 | 只看该作者
学习了

使用特权

评论回复
地板
Ryanhsiung| | 2011-12-17 20:37 | 只看该作者
顶一下

使用特权

评论回复
5
zjsyjbb| | 2011-12-17 22:25 | 只看该作者
顶个啊..

使用特权

评论回复
6
zjsyjbb| | 2011-12-17 22:25 | 只看该作者
只可惜俺没有数码管啊,没法做这个实验.

使用特权

评论回复
7
john_lee| | 2011-12-18 00:27 | 只看该作者
不错,够简单。

使用特权

评论回复
8
murex| | 2011-12-18 10:24 | 只看该作者
能实践就是好,顶

使用特权

评论回复
9
1071296657| | 2014-8-7 10:19 | 只看该作者
问一下,hd7279a接64位键盘再和数码管相连的时候,是怎么点亮数码管的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

87

帖子

1

粉丝