MSP430按键输入和led点阵显示
msp430Led按键控制灯亮程序

1.Led灯控制程序#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD; //关闭看门狗//P1DIR = 0x41;//P1OUT = 0x41; //程序点亮led1//P1DIR |=BIT0+BIT6;//P1OUT |=BIT0+BIT6; //程序点亮led2P1DIR |=BIT0;P1OUT |=BIT0;P1DIR |=BIT6;P1OUT &=~BIT6;while(1){P1OUT ^=BIT0;P1OUT ^=BIT6;__delay_cycles(1000000);} //led交替亮,持续1s2.Led按键控制灯亮#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR &=~BIT3;P1DIR |=BIT0;P1IES |=BIT3;P1IE |=BIT3;_EINT();_BIS_SR(LPM0_bits+GIE);}#pragma vector=PORT1_VECTOR__interrupt void PORT1_ISR(void){int i;char pushkey;pushkey=P1IFG&BIT3;//第三位中断标志位for(i=0;i<1000;i++)//短暂延时软件去抖if((P1IN&pushkey)==pushkey){P1IFG=0;//中断标志清零return;}if(P1IFG&BIT3)//判断按键是否按下{P1OUT^=BIT0;}P1IFG=0;return;}3.矩阵键盘和数码管程序#include <msp430g2553.h>#include"Key&Display.h"//unsigned char Receive(void);void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;Init_4lines_Mode();//初始化4线工作模式Send_Command(CH452_RESET);//CH452芯片内部复位Send_Command(KeyDisplay_ON);//允许显示驱动并启动键盘扫描//开中断,P2.0接CH452的DOUT引脚,当有键按下时,DOUT上产生由高到低的脉冲// P2SEL &= ~(BIT6+BIT7);P2IE|=BIT0;P2IES|=BIT0;P2IFG&=~BIT0;_EINT();while(1){}}//中断处理函数#pragma vector = PORT2_VECTOR//中断处理程序,接收到DOUT脉冲信号时,运行之__interrupt void Port2(void){unsigned char Keyvalue;Send_Command(CH452_GET_KEY);//单片机向CH452发送读取按键代码命令Keyvalue=Key_Read();// Keyvalue=Receive();switch(Keyvalue){case 0x40://按键K0按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis00);//第0位数码管显示0break;}case 0x41://按键K1按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis01);//第0位数码管显示1break;}case 0x42://按键K2按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis02);//第0位数码管显示2break;}case 0x43://按键K3按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis03);//第0位数码管显示3break;}case 0x48://按键K4按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis04);//第0位数码管显示4break;}case 0x49://按键K5按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis05);//第0位数码管显示5break;}case 0x4A://按键K6按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis06);//第0位数码管显示6break;}case 0x4B://按键K7按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis07);//第0位数码管显示7break;}case 0x50://按键K8按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis08);//第0位数码管显示8break;}case 0x51://按键K9按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis09);//第0位数码管显示9break;}case 0x52://按键K10按下{Send_Command(Dis00);//第0个数码管显示字符"0"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x53://按键K11按下{Send_Command(Dis01);//第0个数码管显示字符"1"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x58://按键K12按下{Send_Command(Dis02);//第0个数码管显示字符"2"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x59://按键K13按下{Send_Command(Dis03);//第0个数码管显示字符"3"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5A://按键K14按下{Send_Command(Dis04);//第0个数码管显示字符"4"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5B://按键K15按下{Send_Command(Dis05);//第0个数码管显示字符"5"Send_Command(Dis11);//第1个数码管显示字符"1"break;}default:break;}P2IFG&=~BIT0;}4.红灯0.2秒闪一次,绿灯0.8秒闪一次#include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &=~XTS; //配置时钟BCSCTL3 |=LFXT1S_2;IFG1 &=OFIFG;P1DIR |=BIT0+BIT6; // P1.0,P1.6 output P1OUT &=~BIT0; // P1.0,P1.6置0 P1OUT &=~BIT6;TACCR0 = 12000-1; //1秒定时,产生中断TACCR1 = 2400; //频率0.2*12000,定时0.2秒TACCR2 = 9600; //定时0.8秒TACTL = TASSEL_1 + MC_1+TAIE; // ACLK, 增计数模式TACCTL1 |=CCIE; // TACCR1中断使能TACCTL2 |=CCIE; // TACCR1中断使能_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A(void){switch( TA0IV ){case 2: P1OUT ^= BIT0; // 捕获/比较寄存器TACCR1break;case 4: P1OUT ^= BIT6;break; // 捕获/比较寄存器TACCR2case 10: break; // 未使用,计数达到TACCRO时执行中断,即1秒执行一次}}5.PMW波控制led灯亮度#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR |=BIT6; //方向寄存器P1SEL |=BIT6; //功能寄存器TACTL=TASSEL_2+MC_1+ID_0; //定时器A控制寄存器选择增计数模式TACCTL1 |=OUTMOD_3; //捕获/比较控制寄存器TACCR0=1000-1;TACCR1=10;_BIS_SR(CPUOFF);}。
msp430 按键控制LED 最基本程序

按键篇经过一短时间的学习,下面,亲自动手编写一下程序吧。
程序的目的是:按下按键,控制LED的亮和灭。
短按键,则小灯亮1秒,然后灭;长按键,小灯常亮。
首先,完成键盘的扫描程序。
第一点:如果是扫描,就要用到定时器。
我想设计定时器每隔10ms扫描一次按键。
定时器,我选用定时器A。
它的定时中断函数如下:函数名称:TimerA_ISR功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void TimerA_ISR(void){GetKey();}上面这个定时中断函数的意思就是:每当定时时间到了以后,就调用GetKey()函数一次。
GetKey()函数就是扫描键盘按键的函数了。
在GetKey()函数中,会根据按键类型(长按/短按)返回不同的数值。
根据返回的数值,做小灯亮法的操作。
那么,返回的这个值,我们需要保存在一个变量中,在这里定义一个变量ucharFlagLcd ;来保存返回值。
这个变量在全局变量中定义,以保证它的作用域。
那么定时函数就变为#pragma vector = TIMERA0_VECTOR__interrupt void TimerA_ISR(void){FlagLcd =GetKey();}定时器中断的时间间隔,我在主函数中定义。
这样写:CCTL0 = CCIE; //使能CCR0中断CCR0 = 40; //设定周期0.01STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式这样,定时器这块就算完工了。
那么,下面进行按键扫描程序。
按键的定义是这样的,根据我板子的按键原理图如下这是一个矩阵键盘。
其中KEY就是外部高电平3.3V。
我只想用其中的P1.0作为这次试验的按键。
基于MSP430F227单片机控制的LED点阵书写显示屏设计(精)

基于 M S P430F227单片机控制的 LED 点阵书写显示屏设计X倪祥明 , 温锦辉(黄冈职业技术学院 , 湖北 , 黄冈 , 438002摘要 :以 TI 公司 4单片机为主控制器 , 以光笔为检测工具 , 以按键和带字库的12864液晶为辅助设备的 L ED 点阵书写显示屏系统 , 通过按键的设置可进入到系统的相应功能模式 , 以光笔可检测在 LED 点阵屏上接触的位置 , 从而实现点亮、划亮等功能 , 并将划亮点的位置用带字库的 12864液晶屏同步显示。
关键词 :MSP430F2274单片机 ; L ED 点阵屏 ; 光笔中图分类号 :TP202 文献标识码 :A 文章编号 :1672-1047(2010 01-0020-03D OI:10. 3969/j. issn. 1672-1047. 2010. 01. 06 目前 , LED 点阵显示屏主要是采用电脑来控制 , 这种产品成本较高。
如果能同步显示直接在 LED 点阵显示屏书上写书的内容 , 将给用户的操作带来很大方便。
本设计采用 TI 公司 4单片机为主控制器较好的解决了此问题 , 不仅大大降低制造成本 , 而且使用时功耗较低 , 同时也降低了使用成本。
1方案选择1. 1主控制器的方案选择采用 M SP430F2274单片机作为主控制器。
M SP430F2274单片机信息存储量大 , 系统频率高达 49M HZ , 通过软件设计 , 可较好避免闪烁停滞现象 , 具有低功耗睡眠功能 , 可以节能省电。
有 14个中断源 , 以及内部集成有 AD 、 D A 转换器 , 资源丰富 , 有利于程序编写。
根据设计要求 , 方案 1. 2点阵屏的显示方案选择串行方式显示。
这种方式可同时显示 4个 16@16点阵汉字或 8个 16@8点阵的汉字、字符或数字。
点阵显示屏每个单元由 16个 8@8点阵 LED 显示模块 , 列信号选择译码器 74HC154和行信号选择 74HC595组成。
基于MSP430单片机的无线LED广告屏设计

基于MSP430单片机的无线LED广告屏设计摘要LED点阵显示屏的发展前景极为广阔,为使该模块LED显示屏控制系统具有更加方便和灵活性,本文对系统的硬件做了精心设计。
本文设计的主体思想是通过主机将实时时间,采集的环境温度以及光照信息,由无线模块传送到从机,动态显示在广告屏上。
综合多方面的因素,最终确立了设计方案:主控制器选用MSP430单片机,点阵屏选择LED点阵单色图文显示屏,无线模块采用NRF2401射频收发芯片。
基于单片机介绍了16*16LED显示屏的设计与制作过程,内容包括LED显示屏的硬件电路、PCB设计、C语言程序设计与调试等方面,涉及到单片机电子产品设计和制作方面的各个环节,认识单片机的基本结构,工作原理及应用方法,并提高单片机知识技术的运用能力。
关键词单片机;点阵;无线;LED广告屏;NRF2401The Design of Wireless LED Advertising ScreensBased on MSP430AbstractThe development of LED display has a far-range prospect. To make this modular of LED display control system more convenience and flexible .This project made elaborate design of system hardware. The main idea of the design is through the host will real-time time, acquisition environment temperature and light information transferred by wireless module, dynamic display from machine, in advertising screen, comprehensive in many factors. The final design is that the main controller chooses MSP430 microcontroller, bitmap screen choice of LED dot matrix monochromatic graphic display, wireless NRF2401 transceiver module USES chips.This project introduces the design of 16*16 LED screen based on SCM and manufacture process, which content includes the LED display hardware circuit, PCB design, C language program design and commissioning etc, and involves microcontroller electronic products design and manufacture aspect the each link. Besides , understanding the basic structure, microcontroller working principle and application methods, and improve the utilization ability microcontroller knowledge technology.Keywords MCU; Dot matrix; Wireless; LED advertising screen; NRF2401目录第1章绪论 (1)1.1 引言 (1)1.2 研究课题的目的与意义 (1)1.3 课题研究的主要内容 (2)第二章论文方案设计 (4)2.1 系统方案总体分析 (4)2.2 单片机的选择 (4)2.2.1 C51单片机 (4)2.2.2 Mega16单片机 (5)2.2.3 MSP430单片机 (5)2.3 无线模块的选择 (5)2.3.1 NRF905模块 (5)2.3.2 CC1020模块 (6)2.3.3 NRF2401模块 (6)2.4 LED广告屏的选择 (7)2.4.1按颜色分类 (7)2.4.2按显示器件分类 (7)2.5 LED驱动模块 (7)2.5.1静态锁存 (7)2.5.2动态扫描 (7)2.6 最终方案的确定 (8)第三章系统硬件设置 (9)3.1 硬件电路的总体设计 (9)3.2 单片机最小系统 (10)3.2.1单片机MSP430的特点 (10)3.2.2电源电路 (11)3.2.3晶振电路 (11)3.2.4复位电路原理图 (12)3.3 实时时钟 (12)3.4 串行通信 (14)3.5 LED点阵 (14)3.6 无线模块 (16)3.7 温度传感器 (16)3.8 系统的电路设计 (18)3.8.1 LED电路原理图 (18)3.8.2 单片机msp430最小系统的PCB版图设计 (19)第4章软件设计 (20)4.1软件设计方案 (20)4.2 实时时钟模块 (20)4.2.1 实时时钟模块简介 (20)4.2.2实时时钟模块的时序图 (21)4.2.3 时钟模块操作流程图 (22)4.2.4模块程序设计 (23)4.3 温度,光照信息采集模块 (25)4.3.1温度传感器模块的简介 (25)4.3.2 温度传感器模块的时序图 (26)4.3.3 模块操作流程 (27)4.3.4 模块程序设计 (27)4.3.5 光敏传感器模块简介 (30)4.4 无线模块 (31)4.4.1 无线模块简介 (31)4.4.2 无线模块的时序图 (31)4.4.3 数据传输的流程图 (34)4.4.4 无线模块程序设计 (35)4.5 LED点阵模块 (37)4.5.1点阵模块简介 (37)4.5.2 点阵模块时序图 (37)4.5.3 点阵模块程序流程图 (38)4.5.4 点阵模块程序设计 (39)第5章论文实验与结论 (43)5.1 设计结果总结 (43)5.2 课题展望 (45)致谢 (47)参考文献 (48)附录A 译文 (49)附录B 外文原文 (63)第1章绪论1.1引言LED点阵显示屏是一种简单的汉字显示器,由于其价廉、易于控制、使用寿命长等特点,被逐步广泛应用于各种公共场合。
MSP430单片机系统时钟选择实验-改变LED灯闪烁频

//******************************************************************************
#include<msp430x13x.h>
void main(void)
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.5|-->LED
//
//时间:2007年10月
//
//
//硬件电路:MSP430F135核心实验板-I型
Байду номын сангаас//硬件连接:
//
//调试器:MSP430FET全系列JTAG仿真器
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗
P1DIR |= 0x20;//设P1.5为输出口
// BCSCTL1= 0x80;//分频电阻选择为0(此时闪烁频率较慢)
// BCSCTL1= 0x87;//分频电阻选择为7(此时闪烁频率较快)
// BCSCTL2= 0xc0;//选择外部32768低频晶振作为MCLK(此时闪烁频率极慢)
// D13x Demo -在上一节基础上改变系统时钟,观察LED灯的闪烁频率
//
//描述:通过改变系统时钟,来改变闪烁频率;通过P1异或来取反P1.5;软件循环延时
// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k
//
// MSP430F13x
// -----------------
基于MSP430单片机的低功耗LED点阵显示屏设计

基于MSP430单片机的低功耗LED点阵显示屏设计摘要:文章介绍了基于MSP430单片机的低功耗LED点阵汉字显示屏的设计。
本设计采用MSP430F249作为主控芯片,74HC系列154和595芯片构成行列驱动电路,4个16x16LED点阵级联构成16 x64点阵显示器。
该设计能够实现LED点阵显示器的汉字滚动循环显示,具有设计简单、显示清晰、超低功耗等特点。
关键词:MSP430F249:点阵显示屏:超低功耗LED点阵显示器是由发光二极管LED按照矩阵方式排列构成的点阵,是一种具有亮度高、成本低、寿命长、易控制、应用范围广等特点的显示器。
本设计采用MSP430F249单片机利用动态扫描的方式,实现对LED点阵显示屏的控制,滚动循环显示多个汉字字符。
1 硬件设计本设计硬件电路由主控制器MSP430单片机、电源电路、时钟电路、复位电路、LED点阵显示屏、列驱动电路和行驱动电路构成[1]。
系统结构框如图1所示。
主控制器选用MSP430F249单片机,LED点阵显示屏行驱动电路由74HC154译码器实现行扫描输出,列驱动电路选用8个74HC595芯片级联实现列数据输出。
16X64LED点阵显示屏由4个16 X16点阵构成,每4个8X8点阵构成一个16X16 LED点阵汉字显示器。
1.1微控制器主控电路本系统微控制器主控电路是由MSP430F249单片机、电源电路、复位电路和时钟电路构成的单片机最小系统。
系统主控电路如图2所示。
MSP430F249单片机是16位的混合信号微处理器,其具有低功耗、高性能、易携带等特性。
供电电压为1.8~3.6 V,通常多使用LM1117芯片提供3.3 V电源。
在最小系统中使用MSP430F249单片机内部的DCO为系统提供时钟源,但是内部DCO误差较大。
若需要在较为精确定时的场合使用时,必须使用外部晶体作为时钟源。
一般向外慢速设备提供时钟源时外接32.768 kHz晶体振荡器,而向内部快速设备提供高速时钟时需外接大于1 MHz的晶体振荡器,并外接两个20~30 pF的匹配电容[2]。
msp430定时器控制led闪烁

第四讲定时器控制LED闪烁一、定时器简介定时器,简单的说,就像单片机内的一个闹钟。
它以单片机的时钟作为计数基准,根据计数数值不同来改变定时时间,并可以设置使时间满足定时条件时进行一系列操作。
下面是msp430g2553的datasheet对其定时器的介绍:从这里开始,我们介绍的部件往往会涉及很多寄存器,初学者往往由于配置不全,不能得到想要的效果。
因此,学习这一部分,尽量参考用户手册和相关例程进行分析。
二、定时器A配置我们要实现使用定时器控制LED闪烁,需要使用定时器中断来控制。
定时器中断与外部中断的具体原理一样,都是从主程序中断,处理完中断服务函数再返回。
区别只在于触发条件,定时器中断的触发条件是定时器计数溢出(计数数值达到设定数值)。
这是用户手册对定时器A的介绍:16位定时/计数,4种计数模式,可选时钟源,2到3个捕获比较寄存器,异步输入输出锁存,定时中断寄存器。
16位定时/计数,是指计数数值范围是0-65535,与设置好的时钟源来组合成一定的定时时长。
如时钟周期为1us,那么要定时1ms,计数数值就需要设置为1000。
上图是定时模式的介绍,一般采用增计数模式即可,即每次定时从0计数到设置的数值。
定时器配置最重要的部分在于TACLR寄存器,其16位所代表的含义如下图,具体配置内容可从用户手册和头文件内查出,这里不做一一介绍,在例程中再进行讲解。
三、实践操作这里,由于我们的单片机默认时钟为DCO 1MHZ,16位定时器计数数值65536,所以最大定时时长为65.536ms。
在这里我们进行0.05s的定时,每隔0.05s触发一次中断函数,使LED亮0.05s,灭0.05s,并交替进行。
为了方便调试,我们先使用延时的方法使LED闪烁,确认单片机以及LED工作正常。
顺便复习一下对IO的操作。
下面就到定时器的核心配置了。
我们要设置定时器,核心部分当然是TACTL寄存器,它是定时器工作的关键,涉及到定时器所采用的时钟周期以及计数方式。
基于MSP430单片机的低功耗LED点阵显示屏设计

基于MSP430单片机的低功耗LED点阵显示屏设计作者:许燕王兴君来源:《无线互联科技》2018年第03期摘要:文章介绍了基于MSP430单片机的低功耗LED点阵汉字显示屏的设计。
本设计采用MSP430F249作为主控芯片,74HC系列154和595芯片构成行列驱动电路,4个16x16LED 点阵级联构成16 x64点阵显示器。
该设计能够实现LED点阵显示器的汉字滚动循环显示,具有设计简单、显示清晰、超低功耗等特点。
关键词:MSP430F249:点阵显示屏:超低功耗LED点阵显示器是由发光二极管LED按照矩阵方式排列构成的点阵,是一种具有亮度高、成本低、寿命长、易控制、应用范围广等特点的显示器。
本设计采用MSP430F249单片机利用动态扫描的方式,实现对LED点阵显示屏的控制,滚动循环显示多个汉字字符。
1 硬件设计本设计硬件电路由主控制器MSP430单片机、电源电路、时钟电路、复位电路、LED点阵显示屏、列驱动电路和行驱动电路构成[1]。
系统结构框如图1所示。
主控制器选用MSP430F249单片机,LED点阵显示屏行驱动电路由74HC154译码器实现行扫描输出,列驱动电路选用8个74HC595芯片级联实现列数据输出。
16X64LED点阵显示屏由4个16 X16点阵构成,每4个8X8点阵构成一个16X16 LED点阵汉字显示器。
1.1微控制器主控电路本系统微控制器主控电路是由MSP430F249单片机、电源电路、复位电路和时钟电路构成的单片机最小系统。
系统主控电路如图2所示。
MSP430F249单片机是16位的混合信号微处理器,其具有低功耗、高性能、易携带等特性。
供电电压为1.8~3.6 V,通常多使用LM1117芯片提供3.3 V电源。
在最小系统中使用MSP430F249单片机内部的DCO为系统提供时钟源,但是内部DCO误差较大。
若需要在较为精确定时的场合使用时,必须使用外部晶体作为时钟源。
一般向外慢速设备提供时钟源时外接32.768 kHz晶体振荡器,而向内部快速设备提供高速时钟时需外接大于1 MHz的晶体振荡器,并外接两个20~30 pF的匹配电容[2]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 MSP430
6
10
第4章 MSP430
LED点阵显示器与LED数码管类似,常用的工作方式有静态显 示和动态显示两种方式。所谓静态显示,就是当显示器显示
一个字符时,相应的发光二极管始终保持导通或截止,在显
示的这个过程中,其状态是静止不变的,直到一个字符显示 完毕,将要显示下一个字符时其状态才改变。而动态显示方 式则不同,它在显示每一个字符的过程中,都是按列(或行) 不停扫描,一位一位地轮流点亮要显示的各个位,如此反复 循环。动态显示方式利用了人眼的视觉暂留性质,当扫描的 速度足够快时,可以得到静态的显示效果。由于 LED点阵引 脚设计的特殊性,一般采用动态扫描显示方式。
8
第4章 MSP430
程序说明:主程序通过调用键盘扫描程序获取键值,
并通过数码管显示出键盘编号。键盘扫描首先通
过读取列线输入,如果不是全为1,则延迟20ms 后再次判断列线是否全为1,如果依旧不是全为1, 可以确定是稳定的按键动作;通过逐行扫描的方 式得到按键的位置。从程序上来看还存在两个问
题:一是按键扫描中延迟去抖需要20ms的时间,
unsigned int i;
while(t--) for(i=1330;i>0;i--); } unsigned char ReadKey(void) { unsigned char temp;
temp= P3IN&0x07;
if(temp!= 0x07)
4
第4章 MSP430 { delayus(10); //等待按键抖动时间 if(temp == (P3IN&0x07 )) { return temp; } else return 0xFF; } else return 0xFF; }
第4章 MSP430
第4章 键盘和显示器的应用
键盘用于实现单片机应用系统中的数据信息和控制命令
的输入,按结构可分为编码键盘和非编码键盘。编码键盘上
闭合键的识别由专用的硬件编码器实现,并产生相应的键码
值,如计算机键盘。非编码键盘是通过软件的方法产生键码,
不需要专用的硬件电路。为了减少电路的复杂程度,节省单
上拉至VCC的,在没有任何按键按下时4条列线输入都为“1”。 但当与某一条行线相连的4个按键中的任何一个被按下时,这 条列线将输入低电平,即当某条列线输入低电平时,必定是 连接在这条列线上的某个按键被按下了。 (2)去除键抖动。 当检测到有键被按下后,延时一段时间再作下一步的检测判断。 (3)若有键被按下,检测出是哪一个键被按下。
P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB3 P4.4/TB4 P4.5/TB5 P4.6/TB6 P4.7/TBCLK
P1.0/TACLK/CAOUT P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK P1.5/TA0 P1.6/TA1 P1.7/TA2
2
第4章 MSP430
实例4-1 独立按键编号显示 任务要求:单片机端口连接3个按键,从1~3进行编号,如果其中 一个按键按下时,则在LED数码管上显示相应的按键编号。
U1
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 59 60 61 2 3 4 5 6 10 7 11 8 9 64 62 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB3 P4.4/TB4 P4.5/TB5 P4.6/TB6 P4.7/TBCLK P1.0/TACLK/CAOUT P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK P1.5/TA0 P1.6/TA1 P1.7/TA2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 52 53 58 57 55 54 56 1 2 3 4 5 6 7 8 330
片机的I/O口,在单片机应用系统中广泛使用非编码键盘,主
要对象是各种按键或开关。这些按键或开关可以独立使用
(称之为独立键盘),也可以组合使用(称之为矩阵式键
盘)。
1
第4章 MSP430
由于按键的闭合与断开都是利用其机械弹性实现的, 当机械触点断开、闭合时,会产生抖动,这种抖动操作用 户感觉不到,但对CPU来说,其输出波形则明显发生变 化 .按键按下和释放时的抖动时间一般为 10~20ms ,按键 的稳定闭合期由操作用户的按键动作决定,一般为几百毫 秒到几秒,而单片机CPU的处理速度在微秒极,因此,按 键的一次闭合,有可能导致CPU的多次响应。
11
第4章 MSP430
实例4-3 8×8 LED点阵数字显示
任务要求:利用MSP430F249单片机控制一个8×8 LED点阵显示器, 使其循环显示数字0~9。
U1
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 59 60 61 2 3 4 5 6 10 7 11 8 9 64 62 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB3 P4.4/TB4 P4.5/TB5 P4.6/TB6 P4.7/TBCLK P1.0/TACLK/CAOUT P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK P1.5/TA0 P1.6/TA1 P1.7/TA2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 52 53 58 57 55 54 56 1 2 3 4 5 6 7 8 330
R1 R2 R3 K1
10k 10k 10k
K2 K3
3
第4章 MSP430
#include "MSP430f249.h"
unsigned char const table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管段选码表, 无小数点 void delayus(unsigned int t) {
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 52 53 58 57 55 54 56
R1 R2 R3 R4 R5 R6 R7
330 330 330 330 330 330 330
P5.0/UCB1STE/UCA1CLK P2.0/ACLK/CA2 P5.1/UCB1SIMO/UCB1SDA P2.1/TAINCLK/CA3 P5.2/UCB1SOMI/UCB1SCL P2.2/CAOUT/TA0/CA4 P5.3/UCB1CLK/UCA1STE P2.3/CA0/TA1 P5.4/MCLK P2.4/CA1/TA2 P5.5/SMCLK P2.5/ROSC/CA5 P5.6/ACLK P2.6/ADC12CLK/CA6 P5.7/TBOUTH/SVSOUT P2.7/TA0/CA7 P6.0/A0 P6.1/A1 P6.2/A2 P6.3/A3 P6.4/A4 P6.5/A5 P6.6/A6 P6.7/A7/SVSIN VEREF+ VREF+ VREF-/VEREFXIN XOUT AVCC AVSS MSP430F249 P3.0/UCB0STE/UCA0CLK P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/UCA1TXD/UCA1SIMO P3.7/UCA1RXD/UCA1SOMI XT2OUT XT2IN RST/NMI TCK TDI/TCLK TDO/TDI TMS
RN1
16 15 14 13 12 11 10 9
P5.0/UCB1STE/UCA1CLK P2.0/ACLK/CA2 P5.1/UCB1SIMO/UCB1SDA P2.1/TAINCLK/CA3 P5.2/UCB1SOMI/UCB1SCL P2.2/CAOUT/TA0/CA4 P5.3/UCB1CLK/UCA1STE P2.3/CA0/TA1 P5.4/MCLK P2.4/CA1/TA2 P5.5/SMCLK P2.5/ROSC/CA5 P5.6/ACLK P2.6/ADC12CLK/CA6 P5.7/TBOUTH/SVSOUT P2.7/TA0/CA7 P6.0/A0 P6.1/A1 P6.2/A2 P6.3/A3 P6.4/A4 P6.5/A5 P6.6/A6 P6.7/A7/SVSIN VEREF+ VREF+ VREF-/VEREFXIN XOUT AVCC AVSS MSP430F249 P3.0/UCB0STE/UCA0CLK P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/UCA1TXD/UCA1SIMO P3.7/UCA1RXD/UCA1SOMI XT2OUT XT2IN RST/NMI TCK TDI/TCLK TDO/TDI TMS
浪费的单片机的运算资源。二是在扫描到按键后 如果按键按下不动,主程序会得到多个相同的键 值,即重复按键,这种情况可以通过判断按键弹 起的动作予以解决。 9
行
8
7
6
5
4
3
2
1
编
管
5
2
7
1
1
8
1
9