DSP实验二:七段数码管设计

本文介绍了作者进行的关于DSP的七段数码管设计实验,包括设计原理、代码实现、硬件验证过程以及遇到的问题和解决方案。作者通过实际操作学习了共阳极数码管的工作机制和地址解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

  鄙人本次主要介绍一下做的关于DSP的第二次实验:七段数码管设计,主要包括七段数码管的设计原理、运行代码、硬件结果以及心得体会。

一、设计内容

1.1 设计原理

  本学习板使用的是两个共阳极四位七段数码管,段码与位码直接与DSP的I/O连接,当给位码高电平时,相应的段码设低电平时则对应的段 码就会被点亮,通过不同的组合从而实现不同数字的显示。数码管内部原理图如下所示:
    在这里插入图片描述

2.2  实验要求

  把八位数码管按照流程点亮并且实现动态扫描显示,并依次循环显示下述流程。数码管显示流程:从最左侧两位数码管00开始计数,依次右移一位,直到最右侧数码管显示66,然后八位数码管同时点亮显示7,最后从最右侧的一位数码管8开始计数,依次左移一位,一直到 F。

二、设计代码

  代码如下(示例):

#include "stdio.h"
#include "evm5515.h"
#include "evm5515_emif.h"
int *SEG_souraddr;
int SEG_DATA[]={0x0c81,0x06F3,0x0349,0x8161,0xc033,0x6025,0x3005,0xFFF1,
0x1001,0x2021,0x4011,0x8007,0x018D,0x0243,0x040D,0x081D};
  //七段数码管的显示数字,0亮1灭,前两位为位码,后两位是段码
 Int16 EMIF_init()
{
    Uint16  i;
    *(ioport volatile unsigned *)0x1C04=0x10; 
    *(ioport volatile unsigned *)0x1C05=0x2;
    for(i=0;i<500;i++){;}
    *(ioport volatile int *)0x1C02 &= 0x77FF;   //打开EMIF时钟
    *(ioport volatile unsigned *)0x1C04=0x020;
    *(ioport volatile unsigned *)0x1C05=0x00fb;
    for(i=0; i<50; i++);	
    EMIF_AWCCR1 = 0x0080;
    EMIF_AWCCR2  = 0x00E4;	
    EMIF_ACS2CR1 = 0xFFF9;
    return 0;
}
void main( void )
{
    int i;
    EVM5515_init(); //初始化
    EMIF_init();
    SEG_souraddr =  (int *)0x600006; //七段数码管的地址
    while(1)
    {
        for(i=0;i<16;i++)
        {
	*SEG_souraddr = SEG_DATA[i];
	EVM5515_waitusec(350000);
         }
     }
}

三、 硬件验证结果

  下图是七段数码管实物仿真的四个过程:四个过程依次显示的是33,66,77777777,e。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、遇到问题

  问题1:按照老师给定的程序试验时,数码管显示的数字2有问题。
  解决办法:程序中给定的2对应的是 0xFF43,后来我按照数码管的原理图,重新编写了,发现2对应的是0xFF49。
    在这里插入图片描述
  问题2:我修改后的程序与我预测的位码显示总是不一致。
  解决办法:我发现是我弄混了二组数码管显示位码在地址中的顺序,数码管显示地址的4位中,例如0x1243,1是板子上右边一组数码管的位码,不是左边的那组数码管,2对应的是边的那组数码管的位码。

总结

  这是我第二次接触CCS,也是遇到了很多问题,但是最终都顺利的解决了,也是感触良多。
  首先我先了解了一下数码管的显示原理,发现了这是共阳极数码管,其中低电平‘0’亮,高电平‘1’灭。后来我又认真探求了数码管显示地址的(例如0xFF43)的原理,发现了0x后面前两位FF显示的是位码,后两位43显示的是段码。需要注意的一点是0x后面第一位对应的是板子上右边一组数码管的位码,不是左边的那组数码管。
  之后在按照老师给定的程序进行试验时,发现数码管显示的数字2有问题。我发现:程序中给定的2对应的是 0xFF43,后来我按照数码管的原理图,重新编写了,发现数字2对应的是0xFF49。
  最后按照数码管的显示原理,我修改了其中的位码,使其按照我的想法进行,具体的要求参见实验要求,成功完成了实验。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道无方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值