找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9936|回復(fù): 0
收起左側(cè)

MSP430單片機(jī)控制LED數(shù)碼管顯示4X4矩陣鍵盤鍵值C語言程序

[復(fù)制鏈接]
ID:51773 發(fā)表于 2013-7-14 04:54 | 顯示全部樓層 |閱讀模式
MSP430F149單片機(jī)開發(fā)板矩陣鍵盤控制程序,通過數(shù)碼管顯示按鍵值,采用逐行掃描,4X4鍵盤接在P1口,通過控制IO口狀態(tài)變化,逐行掃描按鍵是否按下。調(diào)試環(huán)境:EW430 V5.30
  1. Config.h頭文件
  2. #define CPU_F ((double)8000000)
  3. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  4. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. #define ulong unsigned long

  8. /*當(dāng)BRCLK=CPU_F時(shí)用下面的公式可以計(jì)算,否則要根據(jù)設(shè)置加入分頻系數(shù)*/
  9. #define baud           9600                                //設(shè)置波特率的大小
  10. #define baud_setting   (uint)((ulong)CPU_F/((ulong)baud))  //波特率計(jì)算公式
  11. #define baud_h         (uchar)(baud_setting>>8)            //提取高位
  12. #define baud_l         (uchar)(baud_setting)               //低位

  13. #define LED8PORT        P2OUT                   //P2接8個(gè)LED燈
  14. #define LED8SEL         P2SEL                   //P2接8個(gè)LED燈
  15. #define LED8DIR         P2DIR                   //P2接8個(gè)LED燈

  16. #define DATAPORT        P4OUT                   //數(shù)據(jù)口所在端口P4
  17. #define DATASEL         P4SEL                   //數(shù)據(jù)口功能寄存器,控制功能模式
  18. #define DATADIR         P4DIR                   //數(shù)據(jù)口方向寄存器

  19. #define CTRPORT                P6OUT                   //控制線所在的端口P6
  20. #define CTRSEL          P6SEL                   //控制口功能寄存器,控制功能模式
  21. #define CTRDIR          P6DIR                   //控制口方向寄存器

  22. #define DCTR0                P6OUT &= ~BIT4          //數(shù)碼管段控制位信號(hào)置低
  23. #define DCTR1           P6OUT |=  BIT4          //數(shù)碼管段控制位信號(hào)置高
  24. #define WCTR0                P6OUT &= ~BIT3          //數(shù)碼管位控制位信號(hào)置低
  25. #define WCTR1           P6OUT |=  BIT3          //數(shù)碼管位控制位信號(hào)置高

  26. #define KEYPORT                P1OUT                   //按鍵所在的端口P1
  27. #define KEYSEL          P1SEL                   //控制口功能寄存器,控制功能模式
  28. #define KEYDIR          P1DIR                   //控制口方向寄存器
  29. #define KEYIN           P1IN                    //鍵盤掃描判斷需要讀取IO口狀態(tài)值

  30. uchar key;                                        //鍵值變量

  31. //***********************************************************************
  32. //                        共陰數(shù)碼管顯示的斷碼表
  33. //***********************************************************************

  34. uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  35.                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  36. //***********************************************************************
  37. //                   系統(tǒng)時(shí)鐘初始化
  38. //***********************************************************************
  39. void Clock_Init()
  40. {
  41.   uchar i;
  42.   BCSCTL1&=~XT2OFF;                 //打開XT2振蕩器
  43.   BCSCTL2|=SELM1+SELS;              //MCLK為8MHZ,SMCLK為8MHZ
  44.   do{
  45.     IFG1&=~OFIFG;                   //清楚振蕩器錯(cuò)誤標(biāo)志
  46.     for(i=0;i<100;i++)
  47.        _NOP();
  48.   }
  49.   while((IFG1&OFIFG)!=0);           //如果標(biāo)志位1,則繼續(xù)循環(huán)等待
  50.   IFG1&=~OFIFG;
  51. }
  52. //***********************************************************************
  53. //               MSP430內(nèi)部看門狗初始化
  54. //***********************************************************************
  55. void WDT_Init()
  56. {
  57.    WDTCTL = WDTPW + WDTHOLD;       //關(guān)閉看門狗
  58. }

  59. //***********************************************************************
  60. //                關(guān)閉數(shù)碼管
  61. //***********************************************************************
  62. void Close_LED()
  63. {
  64.   DATASEL  = 0x00;                      //設(shè)置IO口為普通I/O模式,此句可省
  65.   DATADIR  = 0xFF;                      //設(shè)置IO口方向?yàn)檩敵?br />
  66.   DATAPORT = 0xFF;                      //P4口初始設(shè)置為FF
  67.    
  68.   CTRSEL  =  0x00;                      //設(shè)置IO口為普通I/O模式,此句可省
  69.   CTRDIR |=  BIT3 + BIT4;               //設(shè)置IO口方向?yàn)檩敵?控制口在P63,P64
  70.   CTRPORT =  0xFF;                      //P6口初始設(shè)置為FF  
  71.    
  72.   DCTR1;                                //關(guān)掉數(shù)碼管,以免顯示亂碼                  
  73.   WCTR1;                     
  74.   DATAPORT=0xFF;                        //關(guān)數(shù)碼管            
  75.   WCTR0;
  76. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表