<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 我的HD7279學(xué)習筆記——基于msp430g2553

我的HD7279學(xué)習筆記——基于msp430g2553

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
Createdon:2012-9-7

Author:zhangbin

本文引用地址:http://dyxdggzs.com/article/201611/322844.htm

學(xué)習筆記

formsp430g2553

redesignedbyzhangbin

2012-09-07

versions:12_09_01

AllRightsReserved

HD7279的基本說(shuō)明如下:

HD7279是一片具有串行接口的,可同時(shí)驅動(dòng)8位共陰式數碼管(或64只獨立led)的智能顯示驅動(dòng)芯片,該芯片同時(shí)還可連接多達64鍵的鍵盤(pán)矩陣,單片即可完成led顯示、鍵盤(pán)接口的全部功能。

HD7279內部含有譯碼器,可直接接受BCD碼或16進(jìn)制碼,并同時(shí)具有2種譯碼方式。此外,還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。

HD7279具有片選信號,可方便地實(shí)現多于8位的顯示或多于64鍵的鍵盤(pán)接口。

典型應用:

儀器儀表,工業(yè)控制,條形顯示器,控制面板

特點(diǎn):

1串行接口,無(wú)需外圍元件可直接驅動(dòng)led

2各位獨立控制譯碼/不譯碼及消隱和閃爍屬性

3(循環(huán))左移/(循環(huán))右移指令

4具有段尋址指令,方便控制獨立led

564鍵鍵盤(pán)空盒子器,內含去抖動(dòng)電路

6有DIP和SOIC兩種封裝形式供選擇

2.引腳說(shuō)明:
VDD:電源VSS:
CS:片選CLK:時(shí)鐘輸入端
DATA:串行數據輸入/輸出端CLK0:振蕩輸出端
KEY:按鍵有效輸出端RES:復位端
SG-SA:段g—段a驅動(dòng)輸出
DP:小數點(diǎn)驅動(dòng)輸出DIG0-7:數位0-7驅動(dòng)輸出
RC:RC振蕩器連接端

HD7279A的控制指令分為二大類(lèi)——純指令和帶有數據的指令

具體的這兩種指令的詳解,參考數據手冊。

上面的說(shuō)明是摘錄數據手冊上的,只介紹了HD7279的基本大概情況,更詳細的介紹如:讀寫(xiě)時(shí)序、詳細命令等,就要參考數據手冊了。

單片機對各種外圍芯片、器件進(jìn)行操作的時(shí)候,主要是處理好相互的通信。那么就要特別注意手冊上介紹的操作的時(shí)序,寫(xiě)程序的時(shí)候,要嚴格按照時(shí)序寫(xiě)就行了。

下面是我寫(xiě)的對HD7279進(jìn)行操作的一個(gè)程序,是基于msp430g2553單片機的,可以控制4*4的16矩陣鍵盤(pán)。目前對led的操作還沒(méi)有實(shí)現,需要繼續完善程序,程序貼在了下面,注釋的也比較詳細:

//本程序是為了測試鍵盤(pán)、led驅動(dòng)芯片HD7279所寫(xiě)的,主要完成HD7279讀,寫(xiě)操作,控制4*4矩陣鍵盤(pán)和4led

//4個(gè)led分別接到了DIG0~DIG3

//目前這4個(gè)led還沒(méi)有控制得住,要繼續努力

#include

#include"ser_12864.h"

//HD7279各個(gè)管腳定義

#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//循環(huán)左移指令

#defineRTR_CYCLE0xa2//循環(huán)右移指令

#defineDECODE00x80//方式0譯碼

#defineDECODE10xc8//方式1譯碼

#defineUNDECODE0x90//不帶小數點(diǎn)顯示

#defineBLINKCTL0x88//閃爍控制

#defineACTCTL0x98//消隱控制

#defineSEGON0xe0//段點(diǎn)亮指令

#defineSEGOFF0xc0//段關(guān)閉指令

#defineCMD_READ0x15//讀取鍵盤(pán)數據指令

//long_delayshort_delay延時(shí)57us延時(shí)11us

#definelong_delay()delay_us(57);

#defineshort_delay()delay_us(11);

uintkey_code[]={61,36,37,38,44,45,46,52,53,54};//鍵盤(pán)上的數字鍵對應的鍵值,在程序中要進(jìn)行處理,要轉化為0~9

//數組中為數字0~9對應的鍵值,順序不能變

ucharkey=0;//按下的鍵碼

//向HD7279中發(fā)送指令相當于寫(xiě)純指令

voidsend_byte(ucharcom)

{

uchari=0;

CLR_CS;

long_delay();

for(i=0;i<8;i++)//發(fā)送命令,高位在前一個(gè)時(shí)鐘脈沖,送一位數據到7279中

{

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

{

SET_DATA;

}

else

{

CLR_DATA;

}

SET_CLK;//發(fā)生脈沖

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中寫(xiě)入帶數據的指令

voidwr_data_com(ucharcom,uchardata)//先發(fā)送指令,再發(fā)送數據

{

send_byte(com);//發(fā)送指令

send_byte(data);//發(fā)送數據

}

//從7279中讀取鍵盤(pán)數據函數

ucharrd_key()

{

send_byte(CMD_READ);//先寫(xiě)入讀取鍵盤(pán)數據的指令

return(receive_byte());//返回接收到的數據,即為鍵值

}

//7279的初始化函數

voidhd7279_init()

{

delay_ms(50);//上電延遲

P1DIR|=BIT0+BIT1+BIT2;//單片機相關(guān)IO口設置

//P1DIR&=~BIT3;//KEY為輸入

send_byte(CMD_RESET);//輸入清除指令

delay_ms(50);

}

//因為當HD7279A檢測到有效的按鍵時(shí),KEY引腳從高電平變?yōu)榈碗娖?,并一直保持到按鍵結束,所以可以用下降沿出發(fā),也可以用上升沿出發(fā)

voidinterrupt_init()

{

//在本程序中,按鍵按下于不按下,key的電平要么為高,要么為低,是確定的,不會(huì )有懸空浮動(dòng)狀態(tài),所以下面兩句內部拉電阻的設置可以不用要

//P1REN|=BIT3;//pullup內部上拉電阻使能

//////使用中斷時(shí),使能內部的上拉電阻這樣當該腳懸空是,電平不會(huì )跳變,防止懸空時(shí)電平跳變不停的觸發(fā)中斷

//P1OUT=BIT3;//當引腳上的上拉或下拉電阻使能時(shí),PxOUT選擇是上拉還是下來(lái)

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

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

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

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

}

voidmain(void)

{

unsignedchars1[]={"key:"};

WDTCTL=WDTPW+WDTHOLD;//停止看門(mén)狗定時(shí)器

BCSCTL1=CALBC1_12MHZ;//設定cpu時(shí)鐘DCO頻率為12MHz

DCOCTL=CALDCO_12MHZ;

P2DIR|=BIT5+BIT4;//液晶的兩條線(xiàn)

init_lcd();

hd7279_init();

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

P1DIR|=BIT6;

P1OUT&=~BIT6;

wr_string(0,0,s1);//第一行第一個(gè)位置顯示s1

_BIS_SR(LPM4_bits+GIE);//進(jìn)入LPM4開(kāi)中斷

}

//Port1interruptserviceroutine

#pragmavector=PORT1_VECTOR

__interruptvoidPort_1(void)

{

uchari=0;

_DINT();

P1OUT|=BIT6;

key=rd_key();//讀取鍵值

//while((P1IN&BIT3)==0);//等待按鍵松開(kāi)

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

{

if(key==key_code[i])//利用數組進(jìn)行鍵值轉化

key=i;//轉化為了對應的數字

}

wr_int(1,0,key);//顯示

P1IFG&=~BIT3;//中斷標志位清零

_EINT();//打開(kāi)中斷

}

//下面是用死循環(huán)檢測按鍵按下,這種方法可以,但是不靈敏,并且浪費cpu資源改進(jìn)是用key出發(fā)IO口中斷,然后進(jìn)行鍵盤(pán)處理

//for(;;)//用死循環(huán)檢測按鍵按下

//{

//if((P1IN&BIT3)==0)//當HD7279A檢測到有效的按鍵時(shí),KEY引腳從高電平變?yōu)榈碗娖?,并一直保持到按鍵結束。在此期間,

////如果HD7279A接收到‘讀鍵盤(pán)數據指令’,則輸出當前按鍵的鍵盤(pán)代碼;如果在收到‘讀鍵盤(pán)指令’時(shí)沒(méi)有有效按鍵,HD7279A將輸出FFH。

//

//{

//key=rd_key();//讀取鍵值

//while((P1IN&BIT3)==0);//等待按鍵松開(kāi)

//}

//wr_int(2,0,key);//顯示

//}

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



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>