标题: MSP430单片机控制LED数码管显示4X4矩阵键盘键值C语言程序 [打印本页]

作者: xueren    时间: 2013-7-14 04:54
标题: MSP430单片机控制LED数码管显示4X4矩阵键盘键值C语言程序
MSP430F149单片机开发板矩阵键盘控制程序,通过数码管显示按键值,采用逐行扫描,4X4键盘接在P1口,通过控制IO口状态变化,逐行扫描按键是否按下。调试环境: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. /*当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数*/
  9. #define baud           9600                                //设置波特率的大小
  10. #define baud_setting   (uint)((ulong)CPU_F/((ulong)baud))  //波特率计算公式
  11. #define baud_h         (uchar)(baud_setting>>8)            //提取高位
  12. #define baud_l         (uchar)(baud_setting)               //低位

  13. #define LED8PORT        P2OUT                   //P2接8个LED灯
  14. #define LED8SEL         P2SEL                   //P2接8个LED灯
  15. #define LED8DIR         P2DIR                   //P2接8个LED灯

  16. #define DATAPORT        P4OUT                   //数据口所在端口P4
  17. #define DATASEL         P4SEL                   //数据口功能寄存器,控制功能模式
  18. #define DATADIR         P4DIR                   //数据口方向寄存器

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

  22. #define DCTR0                P6OUT &= ~BIT4          //数码管段控制位信号置低
  23. #define DCTR1           P6OUT |=  BIT4          //数码管段控制位信号置高
  24. #define WCTR0                P6OUT &= ~BIT3          //数码管位控制位信号置低
  25. #define WCTR1           P6OUT |=  BIT3          //数码管位控制位信号置高

  26. #define KEYPORT                P1OUT                   //按键所在的端口P1
  27. #define KEYSEL          P1SEL                   //控制口功能寄存器,控制功能模式
  28. #define KEYDIR          P1DIR                   //控制口方向寄存器
  29. #define KEYIN           P1IN                    //键盘扫描判断需要读取IO口状态值

  30. uchar key;                                        //键值变量

  31. //***********************************************************************
  32. //                        共阴数码管显示的断码表
  33. //***********************************************************************

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

  36. //***********************************************************************
  37. //                   系统时钟初始化
  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;                   //清楚振荡器错误标志
  46.     for(i=0;i<100;i++)
  47.        _NOP();
  48.   }
  49.   while((IFG1&OFIFG)!=0);           //如果标志位1,则继续循环等待
  50.   IFG1&=~OFIFG;
  51. }
  52. //***********************************************************************
  53. //               MSP430内部看门狗初始化
  54. //***********************************************************************
  55. void WDT_Init()
  56. {
  57.    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
  58. }

  59. //***********************************************************************
  60. //                关闭数码管
  61. //***********************************************************************
  62. void Close_LED()
  63. {
  64.   DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  65.   DATADIR  = 0xFF;                      //设置IO口方向为输出
  66.   DATAPORT = 0xFF;                      //P4口初始设置为FF
  67.    
  68.   CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  69.   CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  70.   CTRPORT =  0xFF;                      //P6口初始设置为FF  
  71.    
  72.   DCTR1;                                //关掉数码管,以免显示乱码                  
  73.   WCTR1;                     
  74.   DATAPORT=0xFF;                        //关数码管            
  75.   WCTR0;
  76. }
复制代码





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1