3228|1

7172

帖子

195

TA的资源

五彩晶圆(高级)

楼主
 

【课后练习】LaunchPad课后练习九之模拟SPI驱动数码管 [复制链接]

LaunchPad课后练习九之模拟SPI驱动数码管

 

1.采用共阳极的数码管

数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。

    什么是共阳极呢?就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的,由他们的位选位来控制哪一位的数码管来亮。 看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管哪一边亮。

    动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

    在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

 

2.之后就是74HC595

 

74HC595 SER SRCLK RCLKSPI接口,如果采用带SPI功能的MCU操作很方便,本文利用几个IO口模拟SPI功能。

 

3. 原理图

 

 

(原理图没高兴重新画,直接在原来的原理图上修改)

 

4. 实验现象

 

课后练习九之SPI数码管.pdf (338.46 KB, 下载次数: 237)

 

 

[ 本帖最后由 常见泽1 于 2012-6-2 14:05 编辑 ]
 
点赞 关注(1)

回复
举报

7172

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 

 

实验例程

  1. /***********************************************
    **** LAUNCH PAD 学习之SPI数码管 ***
    **** MCU: MSP430 ***
    **** 作者: 常见泽 ***
    **** ***
    **** ***
    **** 2012.05.26.15:23 ***
    **** 实验现象:数码管显示3210 ***
    **** ***
    **** P2.0-SRCLK P2.1-SER P2.2-RCLK ***
    **** p1.2 p1.3 p1.4 p1.5为数码管位选 ***
    ***********************************************/

    #include <msp430g2452.h>
    #define uchar unsigned char
    #define uint unsigned int

    unsigned char i;

    #define SER ( 1 << 1 ) //也是所谓的DS
    #define SRCLK ( 1 << 0 ) //也是所谓的SHCP
    #define RCLK ( 1 << 2 ) //也是所谓的STCP

    void delay_1ms(void)
    {
    unsigned int i;
    for (i=0;i<1000;i++);
    }
    void delay_nms(unsigned int n)
    {
    unsigned int i=0;
    for (i=0;i<n;i++)
    delay_1ms();
    }

    uchar table[]={ 0xC0,0xF9,0xA4,0xB0,
    0x99,0x92,0x82,0xF8,
    0x80,0x90,0x88,0x83,
    0xC6,0xA1,0x86,0x8E };
    void Write595(uchar data)
    {

    P2OUT &= ~RCLK;
    for( i=0;i<8;i++ )
    {
    if(data&0x80)
    {
    P2OUT |= SER;
    }
    else
    {
    P2OUT &= ~SER;
    }
    P2OUT &= ~SRCLK;
    P2OUT |= SRCLK;
    data <<= 1;
    }
    P2OUT |= RCLK;
    }

    void main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    P1DIR |= 0xff;
    P2DIR |= 0xff;

    while(1)
    {
    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[0]);
    P1OUT |= ( 1 << 2 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[1]);
    P1OUT |= ( 1 << 3 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[2]);
    P1OUT |= ( 1 << 4 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[3]);
    P1OUT |= ( 1 << 5 );
    delay_nms(1);
    }
    }
复制代码

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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