proteus仿真msp430,实现一个按键矩阵扫描和UART发送

发布者:HarmonySpirit最新更新时间:2020-07-13 来源: 51hei关键字:proteus仿真  msp430  键矩阵扫描  UART发送 手机看文章 扫描二维码
随时随地手机看文章

功能概述:

实现一个4x4按键矩阵,通过按键扫描,当有按键按下时,识别按键值,并通过UART串口发送,同时在lcd1602显示。


功能实现:

1.按键扫描

void keyboardScan(){

  P1OUT = 0xef;//P1.4 = 0

  if((P1IN & 0x0f) != 0x0f){

    delay_ms8M(5);//消抖

    if((P1IN & 0x0f) != 0x0f){

      if((P1IN & 0x01) == 0){ keyValue = '3';while((P1IN & 0x01) == 0);};

      if((P1IN & 0x02) == 0){ keyValue = '7';while((P1IN & 0x02) == 0);};

      if((P1IN & 0x04) == 0){ keyValue = 'B';while((P1IN & 0x04) == 0);};

      if((P1IN & 0x08) == 0){ keyValue = 'F';while((P1IN & 0x08) == 0);};

      keyboard_envent = ~keyboard_envent;

    }

  }

  P1OUT = 0xdf;//P1.5 = 0

  if((P1IN & 0x0f) != 0x0f){

    delay_ms8M(5);//消抖

    if((P1IN & 0x0f) != 0x0f){

      if((P1IN & 0x01) == 0){ keyValue = '2';while((P1IN & 0x01) == 0);};

      if((P1IN & 0x02) == 0){ keyValue = '6';while((P1IN & 0x02) == 0);};

      if((P1IN & 0x04) == 0){ keyValue = 'A';while((P1IN & 0x04) == 0);};

      if((P1IN & 0x08) == 0){ keyValue = 'E';while((P1IN & 0x08) == 0);};

      keyboard_envent = ~keyboard_envent;

    }

  }

  P1OUT = 0xbf;//P1.6 = 0

  if((P1IN & 0x0f) != 0x0f){

    delay_ms8M(5);//消抖

    if((P1IN & 0x0f) != 0x0f){

      if((P1IN & 0x01) == 0){ keyValue = '1';while((P1IN & 0x01) == 0);};

      if((P1IN & 0x02) == 0){ keyValue = '5';while((P1IN & 0x02) == 0);};

      if((P1IN & 0x04) == 0){ keyValue = '9';while((P1IN & 0x04) == 0);};

      if((P1IN & 0x08) == 0){ keyValue = 'D';while((P1IN & 0x08) == 0);};

      keyboard_envent = ~keyboard_envent;

    }

  }

  P1OUT = 0x7f;//P1.7 = 0

  if((P1IN & 0x0f) != 0x0f){

    delay_ms8M(5);//消抖

    if((P1IN & 0x0f) != 0x0f){

      if((P1IN & 0x01) == 0){ keyValue = '0';while((P1IN & 0x01) == 0);};

      if((P1IN & 0x02) == 0){ keyValue = '4';while((P1IN & 0x02) == 0);};

      if((P1IN & 0x04) == 0){ keyValue = '8';while((P1IN & 0x04) == 0);};

      if((P1IN & 0x08) == 0){ keyValue = 'C';while((P1IN & 0x08) == 0);};

      keyboard_envent = ~keyboard_envent;

    }

  }
}



2.UART初始化

void uartInit(){

  DCOCTL = 0;                              

  BCSCTL1 = CALBC1_1MHZ;                    // 选择1MHZ作为波特率发生器输入时钟频率

  DCOCTL = CALDCO_1MHZ;

  

  P3SEL = 0X30;         // P3.4 TX    P3.5 RX

  UCA0CTL1 |= UCSSEL_2;//clk = SMCLK 辅助时钟   select clock source

  UCA0BR0 = 104;       // 1MHZ / 9600 = 104.17

  UCA0BR1 = 0;         // baud rate 9600

  UCA0MCTL = UCBRS0;//波特率调整  0.17 * 8 = 1.36 取整 1

  

  UCA0CTL1 &= ~UCSWRST;              // 初始化USCI,复位释放,结束初始化

}


3.LCD1602初始化

void lcd1602Init(){

  P3DIR |= BIT0 + BIT1 + BIT2;

  dataout;

  rst_en;

  P1DIR = 0X70;


  write_com(0x38);//8 bit data, doule line, 5x7 point matrix

  write_com(0x0c);//open display, close cusor,close blink

  write_com(0x06);//auto move to next char after write or read

  write_com(0x01);//clear screen

}


      

实现过程中遇到的问题:

1.按键按下后会连续不断的发送,就算以很快的速度按下还是会发送两次。

解决办法:等待按键放开。


2.Proteus虚拟终端关闭后再也打不开。

解决办法:感觉这是一个bug,只能重新建一个项目。

关键字:proteus仿真  msp430  键矩阵扫描  UART发送 引用地址:proteus仿真msp430,实现一个按键矩阵扫描和UART发送

上一篇:MSP340单片机IAR-简易交通灯系统Proteus仿真程序
下一篇:MSP430F235 Proteus仿真软件中液晶显示器实验

推荐阅读最新更新时间:2024-11-24 08:52

MSP430主系统时钟以及430的低功耗设置
如何将系统时钟设置到外部高频晶体振荡器,430的MCLK默认的是DCO的,如何安全的从DCO切换到外部晶体振荡器,这是一个很重要的步骤,因为经过此步骤,可以极大地提高430的处理能力,DCO在内部,可以为cpu提供强劲稳定的时钟 #include msp430x14x.h void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; volatile unsigned int i; P5DIR |=BIT4;//设置P5.4为输出 P5SEL |=BIT4;//设置片内主系统时钟的
[单片机]
<font color='red'>MSP430</font>主系统时钟以及430的低功耗设置
MSP430F149驱动BH1750FVI程序
#include io430.h typedef unsigned int uint; typedef unsigned char uchar; /****BH1750 IO定义******/ #define SCL_H P3OUT |= BIT6//此IO在硬件上需要更改 #define SCL_L P3OUT &= ~BIT6 #define SDA_H P3OUT |= BIT7 #define SDA_L P3OUT &= ~BIT7 #define SDA_IN P3DIR &= ~BIT7 //SDA改成输入模式 #define SDA_OUT P3DIR |= BIT7 //SDA变回输出模式 #define
[单片机]
MSP430 F5529的按钮控制led灯亮灭程序代码
#include msp430.h int main(void) { WDTCTL = WDTPW | WDTHOLD; //关闭看门狗 P8DIR |= BIT1; //设置P8.1输出灯 P1DIR &=~ BIT2; //设置p1.2输入按钮 P1REN = BIT2; //设置上拉电阻,让其更加稳定(还真是) P8OUT &=~ BIT1; //默认关上,P1.2设置不了初始值 for(;;) { if(P1IN&BIT2) //P1正的,则亮,不然就灭 { P8OUT |= BIT1; } else { P8OUT &=~ BIT1; }
[单片机]
Win7下MSP430 launchpad 驱动无法安装的问题
缘起 最近把launchpad拿到我的32位Win7操作系统的电脑上来用,按道理我已经安装了IAR驱动会自动安装,或者我手动指定目录D:Program FilesIAR SystemsEmbedded Workbench 7.3430driversTIUSBFETWin7-32安装即可,但是还是出现以下的问题: 问题的解决 在21ic电子网搜索到了一篇帖子提供了解决方案: 在于win7系统下,有的电脑不能使用MSP430板子,电脑提示串口驱动安装问题。原因是电脑系统中缺少一个文件:usbser.sys ,它放于C:WindowsSystem32drivers目录,只要将usbser.sys 文件复制到前面目录中,并手动升级
[单片机]
Win7下<font color='red'>MSP430</font> launchpad 驱动无法安装的问题
单片机PT2262/2272无线遥控解码器Proteus仿真程序315-433M
PT2262/2272无线遥控解码器仿真程序315-433M供大家学习之用!!! 仿真原理图如下 单片机源程序如下: //针对PT2272解码器的破解器程序,315M发射系统 #include reg51.h #define uint unsigned int sbit j=P1^3; //数码加1 sbit k=P1^5; //开启自动和关闭自动扫描 sbit l=P1^7; //数码减1 sbit yizuo=P1^0; //扫描一周对结束,灯点亮 bit biao=0; uint x=0,y; void delay(uint a) { for(;a 0;a--); } void k
[单片机]
单片机PT2262/2272无线遥控解码器<font color='red'>Proteus</font><font color='red'>仿真</font>程序315-433M
MSP430Ware使用笔记 初始化DCO至8MHz
1.平台说明MSP430F5438。 2.ACLK选择XT1,频率为32.768K,MCLK和SMCLK选择DCOCLKDIV,频率为8000K。 // 辅助时钟 ACLK 32.768K // 系统时钟 子系统时钟 8000K #include inc/hw_memmap.h #include ucs.h #include wdt_a.h #include gpio.h #include sfr.h void main (void) { // 停止看门狗 WDT_A_hold(WDT_A_BASE); // P4.0保持输出状态 GPIO_setAsOutputPin(GPIO_POR
[单片机]
一种基于MSP430的可充电脑起搏器的设计
摘要:脑起搏器是目前治疗帕金森病的理想方法,但是目前只有美国Medtronic公司研制并生产脑起搏器,其价格非常昂贵,电池只能用几年,而且电池用完之后还需要通过手术更换内部刺激器。提出一种基于MSP430的可充电脑起搏器的设计方案,通过经皮充电方式解决了电池耗尽问题,具有广阔的应用前景。 关键词:帕金森 脑起搏器 MSP430 经皮充电 无线通信 在运动障碍性疾病(Movement Disorders)中,帕金森病(Parkinson Disease,PD)以肌张力增高、运动减少为主要临床特征,因首先由英国人帕金木(Janes Parkinson)于1817年描述而得名。据不完全统计,目前我国约为120~130万帕金森病患者,
[单片机]
MSP430F149的智能火灾报警系统的设计方案
  引言   火灾严重威胁着人类的生命财产安全,每年我国由火灾引起的灾难数不胜数,然而,准确、及时的对火灾进行预测已成为迫在眉睫的事情。目前,火灾探测技术是预防火灾发生的最有效的手段,根据火灾发生初期的迹象来判断并进行预测,从而使人们在第一时间对这些迹象进行处理,有效的减少了火灾的发生。   普通可燃物燃烧的表现形式是:首先产生燃烧气体和烟雾,在氧气供应充足的条件下才能达到完全燃烧,产生火焰并发出一些可见光与不可见光,同时释放大量的热,使得环境温度升高。普通可燃物由初起阴燃阶段开始,到火焰燃烧、火势渐大,最终酿成火灾的起火过程。在该系统中我们以环境温度、烟雾浓度作为判断火灾的依据。   传统火灾报警系统有结构简单、准确度低、
[单片机]
MSP430F149的智能火灾报警系统的设计方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved