您的位置 首页 5G

我的HD7279学习笔记——根据msp430g2553

Createdon:2012-9-7Author:zhangbin学习笔记formsp430g2553redesignedbyzhangbin2012-09-07versions:12_09_01Al

Createdon:2012-9-7

Author:zhangbin

学习笔记

formsp430g2553

redesignedbyzhangbin

2012-09-07

versions:12_09_01

AllRightsReserved

HD7279的根本阐明如下:

HD7279是一片具有串行接口的,可一起驱动8位共阴式数码管(或64只独立led)的智能显现驱动芯片,该芯片一起还可衔接多达64键的键盘矩阵,单片即可完结led显现、键盘接口的悉数功用。

HD7279内部含有译码器,可直接承受BCD码或16进制码,并一起具有2种译码办法。此外,还具有多种操控指令,如消隐、闪耀、左移、右移、段寻址等。

HD7279具有片选信号,可便利地完结多于8位的显现或多于64键的键盘接口。

典型运用:

仪器仪表,工业操控,条形显现器,操控面板

特色:

1串行接口,无需外围元件可直接驱动led

2各位独立操控译码/不译码及消隐和闪耀特点

3(循环)左移/(循环)右移指令

4具有段寻址指令,便利操控独立led

564键键盘空盒子器,内含去颤动电路

6有DIP和SOIC两种封装办法供挑选

2.引脚阐明:
VDD:电源VSS:
CS:片选CLK:时钟输入端
DATA:串行数据输入/输出端CLK0:振动输出端
KEY:按键有用输出端RES:复位端
SG-SA:段g—段a驱动输出
DP:小数点驱动输出DIG0-7:数位0-7驱动输出
RC:RC振动器衔接端

HD7279A的操控指令分为二大类——纯指令和带有数据的指令

具体的这两种指令的详解,参阅数据手册。

上面的阐明是摘抄数据手册上的,只介绍了HD7279的根本大约状况,更具体的介绍如:读写时序、具体指令等,就要参阅数据手册了。

单片机对各种外围芯片、器材进行操作的时分,首要是处理好彼此的通讯。那么就要特别注意手册上介绍的操作的时序,写程序的时分,要严厉依照时序写就行了。

下面是我写的对HD7279进行操作的一个程序,是根据msp430g2553单片机的,能够操控4*4的16矩阵键盘。现在对led的操作还没有完结,需求持续完善程序,程序贴在了下面,注释的也比较具体:

//本程序是为了测验键盘、led驱动芯片HD7279所写的,首要完结HD7279读,写操作,操控4*4矩阵键盘和4led

//4个led别离接到了DIG0~DIG3

//现在这4个led还没有操控得住,要持续尽力

#include

#include“ser_12864.h”

//HD7279各个管脚界说

#defineSET_CSP1OUT|=BIT0;

#defineCLR_CSP1OUT&=~BIT0;

#defineSET_CLKP1OUT|=BIT1;

#defineCLR_CLKP1OUT&=~BIT1;

#defineDATA_INP1DIR&=~BIT2;//data脚设为输入

#defineDATA_OUTP1DIR|=BIT2;//data脚设为输出

#defineSET_DATAP1OUT|=BIT2;

#defineCLR_DATAP1OUT&=~BIT2;

//#defineDATAP1IN&BIT2;

//#defineKEYP1IN&BIT3;

//HD7279根本指令界说

#defineCMD_RESET0xa4//复位(铲除)指令

#defineCMD_TEST0xbf//测验指令

#defineRTL_UNCYL0xa1//左移指令

#defineRTR_UNCYL0xa0//右移指令

#defineRTL_CYCLE0xa3//循环左移指令

#defineRTR_CYCLE0xa2//循环右移指令

#defineDECODE00x80//办法0译码

#defineDECODE10xc8//办法1译码

#defineUNDECODE0x90//不带小数点显现

#defineBLINKCTL0x88//闪耀操控

#defineACTCTL0x98//消隐操控

#defineSEGON0xe0//段点亮指令

#defineSEGOFF0xc0//段封闭指令

#defineCMD_READ0x15//读取键盘数据指令

//long_delayshort_delay延时57us延时11us

#definelong_delay()delay_us(57);

#defineshort_delay()delay_us(11);

uintkey_code[]={61,36,37,38,44,45,46,52,53,54};//键盘上的数字键对应的键值,在程序中要进行处理,要转化为0~9

//数组中为数字0~9对应的键值,次序不能变

ucharkey=0;//按下的键码

//向HD7279中发送指令相当于写纯指令

voidsend_byte(ucharcom)

{

uchari=0;

CLR_CS;

long_delay();

for(i=0;i<8;i++)//发送指令,高位在前一个时钟脉冲,送一位数据到7279中

{

if(com&0x80)//高位在前

{

SET_DATA;

}

else

{

CLR_DATA;

}

SET_CLK;//产生脉冲

short_delay();

CLR_CLK;

short_delay();

com<<=1;//左移一位

}

CLR_DATA;

}

//从7279中读取数据

ucharreceive_byte(void)

{

unsignedchari,in_byte;

SET_DATA;//settoinputmode

long_delay();

for(i=0;i<8;i++)

{

SET_CLK;

short_delay();

in_byte=in_byte<<1;

DATA_IN;//把DATA脚设为输入DATA为P12

if(P1IN&BIT2)

{

in_byte=in_byte|0x01;

}

CLR_CLK;

short_delay();

}

DATA_OUT;//把data设为输出

CLR_DATA;

return(in_byte);

}

//向7279中写入带数据的指令

voidwr_data_com(ucharcom,uchardata)//先发送指令,再发送数据

{

send_byte(com);//发送指令

send_byte(data);//发送数据

}

//从7279中读取键盘数据函数

ucharrd_key()

{

send_byte(CMD_READ);//先写入读取键盘数据的指令

return(receive_byte());//回来接收到的数据,即为键值

}

//7279的初始化函数

voidhd7279_init()

{

delay_ms(50);//上电推迟

P1DIR|=BIT0+BIT1+BIT2;//单片机相关IO口设置

//P1DIR&=~BIT3;//KEY为输入

send_byte(CMD_RESET);//输入铲除指令

delay_ms(50);

}

//由于当HD7279A检测到有用的按键时,KEY引脚从高电平变为低电平,并一向坚持到按键完毕,所以能够用下降沿动身,也能够用上升沿动身

voidinterrupt_init()

{

//在本程序中,按键按下于不按下,key的电平要么为高,要么为低,是确认的,不会有悬空起浮状况,所以下面两句内部拉电阻的设置能够不必要

//P1REN|=BIT3;//pullup内部上拉电阻使能

//////运用中止时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,避免悬空时电平跳变不断的触发中止

//P1OUT=BIT3;//当引脚上的上拉或下拉电阻使能时,PxOUT挑选是上拉仍是下来

//////0:下拉,1:上拉

P1IE|=BIT3;//P1.3interruptenabledP13中止使能

P1IES|=BIT3;//P1.3Hi/loedge下降沿中止

P1IFG&=~BIT3;//P1.3IFGcleared中止标志位清零

}

voidmain(void)

{

unsignedchars1[]={“key:”};

WDTCTL=WDTPW+WDTHOLD;//中止看门狗定时器

BCSCTL1=CALBC1_12MHZ;//设定cpu时钟DCO频率为12MHz

DCOCTL=CALDCO_12MHZ;

P2DIR|=BIT5+BIT4;//液晶的两条线

init_lcd();

hd7279_init();

interrupt_init();//IO中止初始化

P1DIR|=BIT6;

P1OUT&=~BIT6;

wr_string(0,0,s1);//榜首行榜首个方位显现s1

_BIS_SR(LPM4_bits+GIE);//进入LPM4开中止

}

//Port1interruptserviceroutine

#pragmavector=PORT1_VECTOR

__interruptvoidPort_1(void)

{

uchari=0;

_DINT();

P1OUT|=BIT6;

key=rd_key();//读取键值

//while((P1IN&BIT3)==0);//等候按键松开

for(i=0;i<10;i++)

{

if(key==key_code[i])//使用数组进行键值转化

key=i;//转化为了对应的数字

}

wr_int(1,0,key);//显现

P1IFG&=~BIT3;//中止标志位清零

_EINT();//翻开中止

}

//下面是用死循环检测按键按下,这种办法能够,可是不灵敏,而且糟蹋cpu资源改善是用key动身IO口中止,然后进行键盘处理

//for(;;)//用死循环检测按键按下

//{

//if((P1IN&BIT3)==0)//当HD7279A检测到有用的按键时,KEY引脚从高电平变为低电平,并一向坚持到按键完毕。在此期间,

////假如HD7279A接收到‘读键盘数据指令’,则输出当时按键的键盘代码;假如在收到‘读键盘指令’时没有有用按键,HD7279A将输出FFH。

//

//{

//key=rd_key();//读取键值

//while((P1IN&BIT3)==0);//等候按键松开

//}

//wr_int(2,0,key);//显现

//}

//对应键值:1-362-373-384-445-456-467-528-539-540-61*-60#-62A-39B-47C-55D-63

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/256247.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部