• 成功的定义
  • 成功的秘决
  • 成功的作文
  • 成功故事
  • 成功人士
  • 成功之道
  • 成功学演讲
  • 成功学书籍
  • 成功语录
  • 成功案例
  • 当前位置: 工作范文网 > 成功 > 成功之道 > 正文

    按键控制数码管和流水灯设计报告实验报告

    时间:2020-11-02 10:39:40 来源:工作范文网 本文已影响 工作范文网手机站

    摘要

    单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们 极大的重视和关注。本设计选用 msp430f249芯片作为控制芯片,来实现矩阵键 盘对LED数码管显示的控制。通过单片机的内部控制实现对硬件电路的设计 从而实现对4*4矩阵键盘的检测识别。用单片机的 P3口连接4M矩阵键盘,并以 单片机的P3.0- P3.3口作键盘输入的列线,以单片机的P3.4- P3.7口作为键盘输 入的行线,然后用P0.0- P0.7作输出线,通过上拉电阻在显示器上显示不同的字 符“0 F”。在硬件电路的基础上加上软件程序的控制来实现本设计。其工作过 程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有 键按下,则识别是哪一个键按下,最后通过 LED数码管显示该按键所对应的序

    号。

    关键字:

    单片机、流水灯、数码管、控制系统

    SCM since the nin etee n seve nties, with its high price, and a

    convenient compact atte nti on and great concern. Thisdesig n uses

    msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal con trol sin gle chip to realize the hardware design of the circuit, so as to realize the detect ion and recog niti on of 4*4 matrix keyboard. 4 * 4 matrix keyboard

    connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard in put, MCU P3.4P3.7 port as the lines of keyboard in put, and

    then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the desig n. The work ing process is: first to determ ine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the

    Keywords: SCM, water lights, digital tubes, control system

    键盘控制流水灯和数码管实验报告

    目录

    TOC \o "1-5" \h \z \o "Current Document" 一设计的目的 2

    \o "Current Document" 二任务描述及方案设计 3

    \o "Current Document" 任务描述 3

    方案设计 3

    \o "Current Document" 三硬件设计方案 3

    Msp430f149单片机的功能说明 3

    显示器功能 4

    \o "Current Document" 复位电路 4

    按键的部分 4

    \o "Current Document" 74HC573 的特点 4

    \o "Current Document" 流水灯和数码管电路原理图 4

    \o "Current Document" 元器件清单 4

    \o "Current Document" 四程序设计方案 5

    \o "Current Document" 用 IAR Embedded Workbench 软件编程序 5

    \o "Current Document" 仿真电路图 6

    \o "Current Document" 五实物实验 7

    \o "Current Document" 实物图 7

    \o "Current Document" 测试结果与分析 7

    六 结论 11

    \o "Current Document" 八参考文献 16

    -、设计目的

    1、 进一步巩固和加深学生所学一门或几门相关专业课理论知识,

    培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基

    本技能;

    2、 培养学生实践动手能力及独立分析和解决工程实践问题能力 ;

    3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和

    严谨求实的工作作风

    二、任务描述及设计方案

    任务描述

    闭合按键1时,从P1.0—1.7逐个灯,并且P1.0亮一下,P1.1亮两下,P1.2 亮二下,P1.3亮四下,P1.4亮五下,P1.5亮六下,P1.6亮七下,P1.7亮八下; 再是P1.0亮一下,P1.0- 1.1亮两下,P1.0—1.2亮三下,P1.0-1.3亮三下,P1.0 —1.4亮五下,P1.0 — 1.5亮六下,P1.0 — 1.6亮七下,P1.0 —1.7亮八下。

    闭合按键2时,先是从P1.0—1.7逐个灯亮,再是 P1.0、P1.1— P1.6、P1.7 两两灯亮,接着是 P1.0、P1.1、P1.2— P1.6、P1.7每三个灯亮,最后是 P1.0、 P1.1、P1.2、P1.3— P1.4、P1.5、P1.6、P1.7每四个灯亮。

    闭合按键3时,从P1.0— P1.7逐个的亮,而且在P1.X灯亮过后紧接着前面 的灯两两灯亮。

    7ESG-MPX4-CC数码管按a b、c、d、e、f、g顺序组成“ 8”字形。

    2、设计方案

    实验此功能有两种方案,一种是使用传统的模拟电路,另一种是用单片机控 制电路。我们选择单片机控制系统。其中系统工作原理为:

    我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就 给P1 口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间, 再让这个数据向高位移动,然后再输出至P1 口,这样就实现了 “流水”效果了。

    以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应 的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮; 共阴极二极管则相反,控制信号为高电平时点亮。电平信号按照 dp,g,e...a的

    顺序组合形成的数据字称为该字符对应的段码。 7SEG-MPX4-CC是四个共阴二

    极管显示器,它的1234是阴极公共端。

    三、硬件设计方案

    1、单片机功能说明

    1 CPU : MSP430系列单片机的CPU和通用微处理器基本相同,只是在设

    计上采用了面向控的结构和指令系统。 MSP430的内核CPU结构是按照精简指

    令集和高透明的宗旨而设计的,使用的指令有硬件执行的内核指令和基于现有 硬件结构的仿真指令。这样可以提高指令速度和效率,增强了 MSP的实时处理

    能力。

    2存储器:存储程序、数据以及外围模块的运行控制信息。有程序存储器 和数据存储器。对程序存储器访问总是以字形式取得代码,而对数据可以用字 或字节方式访问。其中 MSP430各系列单片机的程序存储器有 ROM、OTP、 EPROM 和 FLASH 型。

    3外围模块:经过MAB、MDB、中断服务及请求线与 CPU相连。MSP430 不同系列产品所包含外围模块的种类及数目可能不同。它们分别是以下一些外 围模块的组合:时钟模块、看门狗、定时器 A、定时器B、比较器A、串口 0、 1、硬件乘法器、液晶驱动器、模数转换、数模转换、端口、基本定时器、 DMA

    控制器等。

    2、显示器的功能

    显示器通常也称为监视器。显示器是属于电脑的I/O的设备,即输入输出设 备。它可以分为CRT、LCD等多种。它是一种将一定的电文件通过特定的传输 设备显示到屏幕上再到反射到人眼的显示工具。

    3、复位电路

    电阻给电容充电,电容的电压缓慢上升直到 VCC,没到VCC时芯片复位

    脚近似低电平,于是芯片复位,接近 VCC时芯片复位脚近高电平,于是芯片停 止复位,复位完成。

    30 k

    1k

    复位原理图

    4、按键部分

    4.1键盘的结构形式一般有独立式键盘和矩阵式键盘两种。

    独立式键盘就是各个按键相互独立, 每个按键各接一个I/O接口线,而不会

    影响其他I/O接口线,所以我们在控制流水灯的三种闪法时用的是独立式键盘。

    矩阵式键盘又叫行列式键盘,在 键盘中按键数量较多时,为了减少I/O 口的 占用,通常将按键排列成 矩阵形式。在矩阵式键盘中,每条水平线和垂直线在 交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如 P1 口) 就可以构成4*4=16个按键,比之直接将端口线用于 键盘多出了一倍,而且线数 越多,区别越明显,比如再多加一条线就可以构成 20键的键盘,而直接用端口

    线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用 矩阵法来 做键盘是合理的。

    矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中, 列线通过电阻接正电源,并将行线所接的单片机的I/O 口作为输出端,而列线所 接的I/O 口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平, 代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这 样,通过读入输入线的状态就可得知是否有键按下了。

    4 ?键盘 的检测,首先要解决的问题是键盘抖动现象。 消抖的方法有两种,

    软件消抖和硬件消抖。由于硬件消抖结构比软件复杂,所以本设计采用的是软 件消抖的方法,既在程序中加入5毫秒的延时,延时后再次返回 P3的值二次判 断是否有键盘按下。

    5、 74HC573的特性

    74HC573的八个锁存器都是透明的 D型锁存器,当使能(G)为高时,Q输 出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。

     输出控制不是影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭 时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可与直接 与系统总线接口并驱动总线,而不需要外接口。

    txrmn kyari.f> nnO

    DI L

    D2 L

    ⑴C

    D4 C ns I

    D6 [

    D; L

    CXD L

    703tQin41'161514XH

    70

    3

    tQ

    in

    4

    1'

    16

    15

    14

    X

    H

    9

    12

    5

    H

    _1 o

    J 07

    i Ltfai J EMARI >.

    功能表:

    输入

    输岀 I

    输出f吏能

    锁存使能

    D

    Q

    1.

    II

    II

    L

    Il 1

    L

    L

    L

    L

    X

    不变 |

    El

    X

    X

    Z

    X不.周关心

    Z二高阻抗

    数码管引脚图

    6、流水灯和数码管电路原理图

    如果要让接在P1.0 口的LED1亮起来,那么只要把 P1.0 口的电平变为低 电平就可以了;如果要接在P1.0 口的LED1熄灭,就要把P1.0 口的电平变为高 电平;同理,接在P1.1 — P1.7 口的其他7个LED的点亮和熄灭的方法同 LED1。

     要实现流水灯功能,我们只要将发光二极管 LED1 — LED8依次点亮、熄灭,8

    只LED灯便会一亮一暗的做流水灯了。在此我们应该注意一点,由于人眼的视 觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时 候应该延时一段时间,否则我们就看不到“流水”效果了。

    7SEG-MPX4-CC数码管就是阴极为数码管的公共端,按照发光管二极管 的原理,当阳极接电源正极,阴极接电源负极,发光二极管点亮。换句话说, 共阴极的数码管,当a,b,c,d,e,f,g脚分别接到电源的正极,而 COM 脚接的电源负极,此时相当于7个发光二极管同时点亮,并且显示数字 8 ”~~~

    所以某些类型的数码管称为7端数码管~~别漏了 dp”,是小数点~~共阳极的取 反就是了

    歼」曲 K-JvSJ-

    EUM-

    B^.T(mj wi^^ur

    F^MCLK <1.胃

    HLiHLLt 旳右Ml创池盘■低It

    yffs

    他“I耐 pywiw FUiifbi ^>Mj£bi^:L PJUCMtiTYny* Fi?lb<b|?4崔£利注& ■匕级H1£|u| B^MiCbi rnliiZJ-iC tfc

    m

    :A-CiZ

    HjftTt;

    CUT

    血TGk

    re ft

    wrr-x-mrr-

    rainiHi

    WtF”

    ST J*

    URH"*

    WTJOjT

    n.wcie-iR^tiCd-iiCM

    FljMlC4eR:>lj<jCM4£4MI

    ..岫匸聞TEUiZgO

    PUijirU-£i:MLCiM{££l

    ■ ■.皿皿K4W3鼻

    tJJ4j£ Gemini uUCLIIc

    mmw

    PtdMH-*

    PlJ&MCLfe 烈』rrw Pl^i tLiiW

    —n—

    J

    ■■■

    |心

    1U

    wi

    p!>*

    P-J

    pm ■

    P-J

    p-,1

    P4.4

    P4.5

    P*Jr

    P4.6

    P4.7

    P4.5

    鮮J

    FJ

    1

    鮮J

    pj.i

    FJ

    iK-

    6.1流水灯和数码管电路原理图

    6.2独立按键控制流水灯部分

    R5

    10k

    R4

    U1

    —o c—I”

    4 _n^—

    ilk

    rT^-.r

    rT>.

    P第

    C1£

    AV S3

    AVCC XCiLT

    XIN

    VPET-/VEREr-

    gi-__

    1

    37

    56

    L

    £匸

    F5 0

    Th/S

    TDD/TDI

    TDI/TCLX

    ■i t JlxJ

    6.3单片机复位部分

    7、元器件清单

    元器件

    型号

    数目

    单片机

    MSP430f249

    1

    电阻

    100

    5

    发光二极管

    LED-BIBY

    8

    开关

    BUTTON

    18

    数码管

    7SEG-MPX4-CC

    1

    电容

    CAP

    1

    -H- LJL 心片

    74HC573

    1

    四、程序设计方案

    1、用 IAR Embedded Workbench 软件编程序

    #in clude<msp430F249.h>

    #defi ne ROW P4OUT 〃矩阵键盘的行宏定义

    #defi ne COL P4IN 〃矩阵键盘的列宏定义

    #defi ne DPYOUT P1OUT //数码管输出口宏定义

    #defi ne uchar un sig ned char

    #defi ne uint un sig ned int

    uchar keyval;

    uchar m=0;

    uchar rema in = 0xff;

    uchar table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

    uchar table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

    uchar table3[]={0x03,0x06,0x0c,0x18,0x30,0x60,0xc0};

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

    void delay( uint n)

    {

    uint i,j;

    for(i=0;i <n ;i++)

    for(j=0;j<225;j++);

    }

    uchar keysca n()

    {

    int i=0;

    uchar key=0;

    ROW=0x0f;

    if((COL&0x0f)!=0x0f)

    {

    do i++;

    while(i<3000);

    ROW=0x7f;

    if((COL & 0x0f)== 0x0f)

    {ROW=0xbf;

    if((COL & 0x0f)== 0x0f) {ROW=0xdf;

    if((COL & 0x0f)== 0x0f) {ROW=0xef;

    if((COL & 0x0f)== 0x0f)

    key=17;

    else key=((ROW&0xf0)|(COL&0x0f));

    }

    else key=((ROW&0xf0)|(COL&0x0f));

    }

    else key=((ROW&0xf0)|(COL&0x0f));

    }

    else key=((ROW&0xf0)|(COL&0x0f));

    }

    return key;

    }

    void fun 1()

    {

    uint i,j;

    for(i=0;i<8;i++) for(j=0;j<=i;j++)

    { P3OUT=table1[i];delay(50); P3OUT=0X00;delay(50);

    }

    for(i=0;i<8;i++) for(j=0;jv=i;j++) {

    P3OUT=table2[i];delay(50);

    P30UT=0X00;delay(50);

    }

    }

    void fun 2()

    {

    uint i;

    P3OUT=0X01;delay(100); for(i=1;i<8;i++) {P3OUT?=1;delay(100);} P3OUT=0X03;delay(100); for(i=1;i<=4;i++) {P3OUT<<=2;delay(100);}

    P3OUT=0X07;delay(100);

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

    {P3OUT<<=3;delay(100);}

    P3OUT=0X0f;delay(100);

    P3OUT=~0X0f;;delay(100);

    }

    void fun 3()

    {

    uint i,j;

    for(i=0;i<8;i++)

    {

    P3OUT=table1[i];delay(100);

    P3OUT=0X00;delay(100); for(j=0;j<i;j++)

    {

    P3OUT=table3[j];delay(100 );

    P3OUT=0X00;delay(100);

    }

    }

    } void ma in (void)

    {

    WDTCTL = WDTPW + WDTHOLD;

    〃keyval=17;

    P4DIR|=0Xf0;

    P1DIR|=0Xff;

    P10UT|=OXff; P3SEL=0X00;

    P3DIR|=0XFF;

    P30UT&=~0xff;

    P2DIR|=0X00;

    P2IE=0X07;P2IES=0X07;

    _eint();

    while(1)

    {

    delay(100);

    switch(keysca n())

    {

    case 0xd7:DPYOUT=seg[0];remai n=seg[0];break; case 0x77:DPYOUT=seg[13];rema in=seg[13];break;

    case 0x7b:DPYOUT=seg[12];rema in=seg[12];break; case 0x7d:DPYOUT=seg[11];rema in=seg[11];break; case 0xb7:DPYOUT=seg[15];rema in=seg[15];break;

    case 0xbb:DPYOUT=seg[9];remai n=seg[9];break; case 0xbd:DPYOUT=seg [ 6];remai n=seg [ 6];break; case 0xbe:DPYOUT=seg[3];remai n=seg[3];break; case 0xdb:DPYOUT=seg[8];remai n=seg[8];break; case 0xdd:DPYOUT=seg[5];rema in=seg[5];break; case 0xde:DPYOUT=seg[2];remai n=seg[2];break; case 0xe7:DPYOUT=seg[14];rema in=seg[14];break; case 0xeb:DPYOUT=seg[7];rema in=seg[7];break; case 0xed:DPYOUT=seg[4];rema in=seg[4];break; case 0xee:DPYOUT=seg[1];rema in=seg[1];break;

    case 0x7e:DPYOUT=seg[10];remain=seg[10];break; default:DPYOUT = remai n;break;

    }

    switch(m)

    {

    case 1: fun 1();break;

    case 2: fun 2(); break; case 3: fun 3(); break; default:break;

    }

    }

    }

    #pragma vector=PORT2_VECTOR

    __in terrupt void PORT2 (void)

    {

    P2IFG=0x00; if(P2IN!=0X07)

    {

    switch(P2IN&0X07)

    {

    case 0X06: m=1;break;

    case 0X05: m=2;break;

    case 0X03: m=3;break;

    default:m=0;break;

    }

    }

    }

    2.仿真电路图

    闭合按键1时的仿真图闭合按键

    闭合按键1时的仿真图

    闭合按键2时的仿真图

    闭合按键3时的仿真图

    数码管仿真图

    五、实物实验

    1、实物图

    2.测试结果与分析

    经过用软件做硬件仿真后,将程序烧进 MSP430单片机

    后,通过独立式键盘控制流水灯的三种“流”法,按下某一 个键时,流水灯就会实现编程所设计的“流”法,而矩阵键 盘则是通过特定的按键控制数码管显示程序控制的字符, 从

    0~9,a,b,c,d,e,f字符的显示,复位按键则是是单片机复位。

    六、心得体会

    通过这段时间课程设计实验设计大大培养了我们的动手能力和 同学间的相互合作精神。从一开始看到这个题目就在想怎样才能设计 出一个正确的原理图,这个很重要,也是所有工作的基础,如果要完 成原理图设计工作,这就要求我们有足够的理论知识储备, 这个功夫 就在平时了;原理图的设计是理论和实践的交叉点, 原理图设计好之 后,我们可以利用仿真软件进行仿真,这样便可以我们设计的准确性, 积累了经验并且掌握了软件的基本使用方法和一些快捷的用途。 当电

    路板做好之后,就是焊接器件了,需要相互共同合作,这次试验增强 了我们的解决问题能力和团队合作能力。

    七、参考文献

    【1】康华光。

     模拟电子技术基础 高等教育出版社,2005

    【2】康华光。

     数字电子技术基础 高等教育出版社,2005

    【3】秦龙MSP430

    【3】秦龙

    有关的专题