打印
[牛人杂谈]

新唐使用笔记 - 使用 M051 设计一个计时器

[复制链接]
4465|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
slotg|  楼主 | 2015-4-6 09:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 slotg 于 2015-4-6 09:38 编辑

这个方案是使用新唐的 NuTiny-SDK-M051 开发板外接 MAX7219 显示模块做一个计时器,每10ms计数一次,并安排2个按键用来 开始/停止计时 与 归零计时 ,编写这个程序的目的是想熟悉 M051 的串行外设接口(SPI)与定时器 TIMER 中断的使用。




M051 与 MAX7219 显示模块的连接:

P1.4 (SPISS0)    -> CS
P1.5 (MOSI_0)   -> DIN
P1.7 (SPICLK0)  -> CLK

MAX7219 规格书上写着最高时钟频率为10MHz,因此我们在程序中对于 SPI 的时钟频率也就设定为 10MHz。

void SPI_Init(void)
{
    /* Configure as a master, clock idle low, 16-bit transaction, drive output on falling clock edge and latch input on rising edge. */
    /* Set IP clock divider. SPI clock rate = 10MHz */
    SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 16, 10000000);

    /* Enable the automatic hardware slave select function. Select the SS pin and configure as low-active. */
    SPI_EnableAutoSS(SPI0, SPI_SS, SPI_SS_ACTIVE_LOW);
}

虽然我们设定了时钟频率是10MHz,不过 SPI_Open 函数会返回一个实际上运行的频率数据,为了查看这个返回值我们在程式调试时安排了一个全局变量 u32Test 来存放这个数据,并且在主回路中显示出来。在程序运行之后显示器上显示了 6000000,这表示实际运行的频率是 6MHz,由于手上没有量测工具因此也无法确定这个频率是否正确!

u32Test = SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 16, 10000000);

Ds_Data(u32Test);



程序中使用了定时器 TIMER0 并设定每 10ms 中断一次,计时器的计数动作就放在 TIMER0 中断回路里面处理

//  TIMER0 interrupt
void TMR0_IRQHandler(void)
{
    /* Clear Timer0 time-out interrupt flag */
    TIMER_ClearIntFlag(TIMER0);

    if(fg_action)
    {
        Ds_Data(++u32Counter);
    }
}

规画2个按键,功能分别是:

开始/停止键     按一下开始计时再按一下停止计时,安排在 P3.2 管脚。
清零键             计时值清零,安排在 P3.3 管脚。

设定一个全局变量 fg_action 来指示计时器是否要计时,我们在主回路里面处理按键的判断与相应的动作。

    ffg1 = ffg2 = FALSE;

    while(1)
    {
        if(!P32)            // START/STOP KEY
        {
            if(!ffg1)
            {
                fg_action = !fg_action;
                ffg1 = TRUE;
            }
            
            CLK_SysTickDelay(20000);
            while(!P32)     // wait KEY un_press
            {
                CLK_SysTickDelay(20000);
            }
        }
        else
        {
            ffg1 = FALSE;
        }

        if(!P33)            // RESET KEY
        {
            if(!fg_action && !ffg2)
            {
                u32Counter = 0;
                Ds_Data(u32Counter);
            }
        }
        else
        {
            ffg2 =FALSE;
        }
            
    }

視頻演示:
http://v.youku.com/v_show/id_XOTI3OTIyOTY0.html

NuTiny-SDK-M051 開發板使用手冊
NuTiny-SDK-M051 User Manual EN V1.0.pdf (1 MB)

工程文件,使用 KEIL 4.72 與 M051_Series_BSP_CMSIS_Rev3.00.002 庫
D004.rar (1.26 MB)



沙发
稳稳の幸福| | 2015-4-6 14:06 | 只看该作者
原来这个东西Proteus里面有,不用买了,我仿真玩玩。

使用特权

评论回复
板凳
稳稳の幸福| | 2015-4-6 14:10 | 只看该作者
MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。

使用特权

评论回复
地板
稳稳の幸福| | 2015-4-6 14:10 | 只看该作者
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。

使用特权

评论回复
5
稳稳の幸福| | 2015-4-6 14:11 | 只看该作者
一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

使用特权

评论回复
6
稳稳の幸福| | 2015-4-6 14:11 | 只看该作者
功能特点

1 10MHz连续串行口
2 独立的LED段控制
3 数字的译码与非译码选择
4 150μA的低功耗关闭模式
5 亮度的数字和模拟控制
6 高电压中断显示
7 共阴极LED显示驱动
8 限制回转电流的段驱动来减少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24脚的 DIP和 SO 封装

使用特权

评论回复
7
稳稳の幸福| | 2015-4-6 14:11 | 只看该作者
芯片 工作温度范围 管脚封装
MAX7219CNG 0°C to +70°C 24 Narrow Plastic DIP
MAX7219CWG 0°C to +70°C 24 Wide SO
MAX7219C/D 0°C to +70°C Dice*
MAX7219ENG -40°C to +85°C 24 Narrow Plastic DIP
MAX7219EWG -40°C to +85°C 24 Wide SO
MAX7219ERG -40°C to +85°C 24 Narrow CERDIP

使用特权

评论回复
8
稳稳の幸福| | 2015-4-6 14:12 | 只看该作者
管脚 名称 功能
1 DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 2,3,5-8,10,11 DIG 0–DIG7 八个数据驱动线路置显示器共阴极为低电平。关闭时7219此管脚输
出高电平,7221呈现高阻抗。
4,9 GND 地线 (4脚和9脚必须同时接地)
12 LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。
CS (MAX7221) 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后
16位在cs端的上升沿时被锁定。
13 CLK 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿, 数据移入内
部移位寄存器。 下降沿时, 数据从DOUT端输出。对MAX7221来
说,只有当cs端为低电平时时钟输入才有效。
14-17,20-23 SEG 7 段和小数点驱动,为显示器提供电流。当一个段驱
A–SEG G, 动关闭时,7219的此端呈低电平,7221呈现高阻抗。
DP
18 SET 通过一个电阻连接到VDD 来提高段电流。
19 V+ 正极电压输入,+5V
24 DOUT 串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有
效。当使用多个MAX7219/MAX7221时用此端方便扩展。

使用特权

评论回复
9
稳稳の幸福| | 2015-4-6 14:12 | 只看该作者
这个芯片很贵的,不过效果真的不错

使用特权

评论回复
10
slotg|  楼主 | 2015-4-6 14:47 | 只看该作者
稳稳の幸福 发表于 2015-4-6 14:12
这个芯片很贵的,不过效果真的不错

感谢资料补充

使用特权

评论回复
11
gaoyang9992006| | 2015-4-6 22:25 | 只看该作者
这个东西是spi口呀

使用特权

评论回复
12
gaoyang9992006| | 2015-4-6 22:26 | 只看该作者
去申请两个免费样片玩玩

使用特权

评论回复
13
lvyunhua| | 2015-4-7 09:13 | 只看该作者
:lol,不错,谢谢楼主分享!

使用特权

评论回复
14
slotg|  楼主 | 2015-4-7 09:35 | 只看该作者
lvyunhua 发表于 2015-4-7 09:13
,不错,谢谢楼主分享!

感谢支持

使用特权

评论回复
15
wejoncy| | 2015-4-7 10:45 | 只看该作者
感谢分享

使用特权

评论回复
16
稳稳の幸福| | 2015-4-9 14:47 | 只看该作者
gaoyang9992006 发表于 2015-4-6 22:26
去申请两个免费样片玩玩

这个学生比较好申请的,工作了不好办。

使用特权

评论回复
17
quray1985| | 2015-4-19 20:24 | 只看该作者
给的资料很详细
这样学习起来很方便呢

使用特权

评论回复
18
slotg|  楼主 | 2015-4-19 20:58 | 只看该作者
quray1985 发表于 2015-4-19 20:24
给的资料很详细
这样学习起来很方便呢

感谢支持 :handshake

使用特权

评论回复
19
玛尼玛尼哄| | 2016-1-31 10:41 | 只看该作者
MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。

使用特权

评论回复
20
yiyigirl2014| | 2016-1-31 13:30 | 只看该作者
感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

1177

帖子

6

粉丝