原创 基于MSP430驱动的键盘显示

2008-8-12 07:56 3860 5 6 分类: MCU/ 嵌入式

基于MSP430驱动键盘显示电路<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


 


来源:鄂州职业大学 作者:陈新建   发布日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008-7-22


关键词: MSP430,键盘,LED


 


 


摘要  主要介绍了TI公司的新型的16位超低功耗MSP430F22X系列单片机的结构、特性和功能及液晶显示器LCD的发光原理和类型,讨论了该系列单片机与LED及键盘的人机接口电路的设计方案和相应的软件程序的实现方法,最后给出它在实际电路中应用实例。


 


引言
   
在当今的各种实时自动控制和智能化仪器仪表中,人机交互是不可缺少的一部分。一般而言,人机交互是由系统配置的外部设备来完成,但其实现方式有两种:一种是由MCU力口驱动芯片实现,如键盘显示控制芯片SK5279A,串行数据传输数码显示驱动芯片MAX7219等等,这时显然MCU没有LED的驱动功能。另一种就是MCU本身具有驱动功能,它通过数据总线与控制信号直接采用存储器访问形式或IO设备访问形式控制键盘和LED实现人机对话。这里的MCU主要有世界各大单片机生产厂商开发的各种单片机,其中TI公司的MSP430系列因其许多独特的特性引起许多研究人员的特别关注,在国内外的发展应用正逐步走向成熟。


 


MSP430


引脚图


MSP430F2274 的封装形式有两种,分别为38-Pin SSOP 封装和40-Pin QFN 封装,其引脚图如


 


 


 


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 


 



 


MSP430


头文件


MSP430 系列单片机的每一种型号都有大量的片内外围模块,而这些模块都通过大量的控制寄存


器来控制,每一个寄存器有它对应的物理地址,对它们的使用实质上是直接操作(读写)这些物理


地址。但大量的寄存器很难记住他们对应的物理地址,MSP430 IAR 调试环境(安装路径下的INC


下)提供了各种系列的标准头文件,这些文件已经定义好了个寄存器的相应物理地址,只要在程序


中使用寄存器名以及寄存器的控制位名即可。如在端口P1.0 输出高电平,用下列程序即可实现:


(1)汇编程序                                


MOV.B #01H, &22H


MOV.B #01H, &21H


也可以使用下列语句


#include "msp430x44x.h"


MOV.B #BIT0, &P1DIR


MOV.B #BIT0, &P1OUT            


(2)C 语言程序


#include "msp430x22x4.h"


P1DIR |= 0x01


P1OUT |= 0x01


 


 


 


 


 


第一段P1DIR 的地址为22HP1OUT 的地址为21H,则两句执行后得到结果。第二段程序开始


包涵了头文件msp430x22x4.h,在后面的两句中就可以直接使用寄存器名,还有BIT0 也在头文件中


定义了#define BIT0 (0x0001),所以这两条语句与第一段的语句实质上是一样的。


第二段为C 语言程序,寄存器定义同样在头文件msp430x22x4.h 中。msp430x22x4.h 可在安装软件的INC 子目录中查找。


 


软件设计
   
硬件连接电路图为例,编写了键盘控制及显示程序,程序在IAR Embedded Workbench编译通过。全部主程序包括详细的发射和接收子程序,及初始化和等待键盘输入转换、显示等等,值得注意的是发射与接收的控制要适当。
   
该程序是用汇编编写的。程序实现的是等待按键输入,读取键值,最后进行键值处理和显示的功能。
   
检测是否有键按下是通过KEY是否有高电平信号。平时,KEY为低电平,当有键按下时为高电平,它发送一个脉冲给单片机MSP430F22X,当单片机检测到该信号时,判断按键的功能,从而进行相应的处理。


 


 


操作及程序


1)要求:连接LED 短接器。


2)实验连接


 


 


                             


 


    3)程序:


NAME main


PUBLIC main


;-----------------------------------------------------------------------------


; MSP430F22x 中断向量表


;-----------------------------------------------------------------------------


ORG 0FFFEh


DC16 main


;------------------------------------------------------------------------------


RSEG CODE ;程序开始


;------------------------------------------------------------------------------


               #include "msp430x22x4.h"


 


 


  int main( void )


{


    int i,j;


    WDTCTL=WDTPW+WDTHOLD;                 


    BCSCTL1 =CALBC1_1MHZ;                


    DCOCTL =CALBC1_1MHZ;


 


    P4OUT |=0X00;                        


    P4DIR |=0XFF;


    P3OUT |=0XFF;                      //P3口全都输出高电平;


    P3DIR |=0XFF;                      //所有数码管显示数字8


   while(1)


   {


    for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0XC0;                     //显示数字0


      P3OUT=0X01;}


    }       


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0XF9;                    //显示数字1


      P3OUT=0X02;}


    }       


 


      for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0XA4;                   //显示数字2


      P3OUT=0X04;}


    }       


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0XB0;                   //显示数字3


      P3OUT=0X08;}


    }       


 


 


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0X99;                  //显示数字4


      P3OUT=0X10;}   


    }       


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0X92;                   //显示数字5


      P3OUT=0X20;}


    }       


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0X82;                  //显示数字6


      P3OUT=0X40;}


    }       


 


       for(i=1;i<=1000;i++)


    {


      for(j=1;j<=100;j++)


    


      {P4OUT=0XF8;                  //显示数字7


      P3OUT=0X80;}


    }       


    }


}


 


 


显示电路


系统的显示电路采用的是简单的LED显示方式,这样的能满足该系统的要求,也可以降低系统的成本


 



 


 


 


该显示电路直接与单片机的数据I/O口进行链接,由于MSP430F22X具有丰富的I/O口资源,这样采用并行的接口方式非常容易,减小了系统的复杂度,也可以增加系统的可靠性。


PX.0—Px.6是用来显示数据的位码的,PX.0—Px.6是用来显示数据的段码的,


 


 


在此应该注意


如果用9013或者9014(都为NPN管)用它来驱动放大的话LED灯的话它显示的比较暗,


本人在此实验中多次试验,将9014NPN管)的E极和C极互换接它显示的比较亮,或将电阻短路同样亮,


所以在此我推荐:如果用共阳极大LED数码管的话最好用9015PNP管)


 


 


 


 


 


 


 


 


 


 


键盘输入电路


键盘电路主要是用来输入数据的,从而实现人机互交。该系统的键盘设计上采用扫描方式实现4×4的矩阵键盘。


 


<?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 



 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户160522 2008-8-13 09:30

好啊。谢谢
相关推荐阅读
用户160522 2008-08-14 18:08
444444
1.四双向模拟开关CD4066<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CD4...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条