在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

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

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

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

      Author:zhangbin

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

      學(xué)習(xí)筆記

      formsp430g2553

      redesignedbyzhangbin

      2012-09-07

      versions:12_09_01

      AllRightsReserved

      HD7279的基本說明如下:

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

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

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

      典型應(yīng)用:

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

      特點:

      1串行接口,無需外圍元件可直接驅(qū)動led

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

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

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

      564鍵鍵盤空盒子器,內(nèi)含去抖動電路

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

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

      HD7279A的控制指令分為二大類——純指令和帶有數(shù)據(jù)的指令

      具體的這兩種指令的詳解,參考數(shù)據(jù)手冊。

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

      單片機對各種外圍芯片、器件進行操作的時候,主要是處理好相互的通信。那么就要特別注意手冊上介紹的操作的時序,寫程序的時候,要嚴(yán)格按照時序?qū)懢托辛恕?/p>

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

      //本程序是為了測試鍵盤、led驅(qū)動芯片HD7279所寫的,主要完成HD7279讀,寫操作,控制4*4矩陣鍵盤和4led

      //4個led分別接到了DIG0~DIG3

      //目前這4個led還沒有控制得住,要繼續(xù)努力

      #include

      #include"ser_12864.h"

      //HD7279各個管腳定義

      #defineSET_CSP1OUT|=BIT0;

      #defineCLR_CSP1OUT&=~BIT0;

      #defineSET_CLKP1OUT|=BIT1;

      #defineCLR_CLKP1OUT&=~BIT1;

      #defineDATA_INP1DIR&=~BIT2;//data腳設(shè)為輸入

      #defineDATA_OUTP1DIR|=BIT2;//data腳設(shè)為輸出

      #defineSET_DATAP1OUT|=BIT2;

      #defineCLR_DATAP1OUT&=~BIT2;

      //#defineDATAP1IN&BIT2;

      //#defineKEYP1IN&BIT3;

      //HD7279基本命令定義

      #defineCMD_RESET0xa4//復(fù)位(清除)指令

      #defineCMD_TEST0xbf//測試指令

      #defineRTL_UNCYL0xa1//左移指令

      #defineRTR_UNCYL0xa0//右移指令

      #defineRTL_CYCLE0xa3//循環(huán)左移指令

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

      #defineDECODE00x80//方式0譯碼

      #defineDECODE10xc8//方式1譯碼

      #defineUNDECODE0x90//不帶小數(shù)點顯示

      #defineBLINKCTL0x88//閃爍控制

      #defineACTCTL0x98//消隱控制

      #defineSEGON0xe0//段點亮指令

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

      #defineCMD_READ0x15//讀取鍵盤數(shù)據(jù)指令

      //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};//鍵盤上的數(shù)字鍵對應(yīng)的鍵值,在程序中要進行處理,要轉(zhuǎn)化為0~9

      //數(shù)組中為數(shù)字0~9對應(yīng)的鍵值,順序不能變

      ucharkey=0;//按下的鍵碼

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

      voidsend_byte(ucharcom)

      {

      uchari=0;

      CLR_CS;

      long_delay();

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

      {

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

      {

      SET_DATA;

      }

      else

      {

      CLR_DATA;

      }

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

      short_delay();

      CLR_CLK;

      short_delay();

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

      }

      CLR_DATA;

      }

      //從7279中讀取數(shù)據(jù)

      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腳設(shè)為輸入DATA為P12

      if(P1IN&BIT2)

      {

      in_byte=in_byte|0x01;

      }

      CLR_CLK;

      short_delay();

      }

      DATA_OUT;//把data設(shè)為輸出

      CLR_DATA;

      return(in_byte);

      }

      //向7279中寫入帶數(shù)據(jù)的指令

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

      {

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

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

      }

      //從7279中讀取鍵盤數(shù)據(jù)函數(shù)

      ucharrd_key()

      {

      send_byte(CMD_READ);//先寫入讀取鍵盤數(shù)據(jù)的指令

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

      }

      //7279的初始化函數(shù)

      voidhd7279_init()

      {

      delay_ms(50);//上電延遲

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

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

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

      delay_ms(50);

      }

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

      voidinterrupt_init()

      {

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

      //P1REN|=BIT3;//pullup內(nèi)部上拉電阻使能

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

      //P1OUT=BIT3;//當(dāng)引腳上的上拉或下拉電阻使能時,PxOUT選擇是上拉還是下來

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

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

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

      P1IFG&=~BIT3;//P1.3IFGcleared中斷標(biāo)志位清零

      }

      voidmain(void)

      {

      unsignedchars1[]={"key:"};

      WDTCTL=WDTPW+WDTHOLD;//停止看門狗定時器

      BCSCTL1=CALBC1_12MHZ;//設(shè)定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])//利用數(shù)組進行鍵值轉(zhuǎn)化

      key=i;//轉(zhuǎn)化為了對應(yīng)的數(shù)字

      }

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

      P1IFG&=~BIT3;//中斷標(biāo)志位清零

      _EINT();//打開中斷

      }

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

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

      //{

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

      ////如果HD7279A接收到‘讀鍵盤數(shù)據(jù)指令’,則輸出當(dāng)前按鍵的鍵盤代碼;如果在收到‘讀鍵盤指令’時沒有有效按鍵,HD7279A將輸出FFH。

      //

      //{

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

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

      //}

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

      //}

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



      評論


      技術(shù)專區(qū)

      關(guān)閉