打印
[菜农助学交流]

用NUC120驱动ZLG7289A的实验程序

[复制链接]
1670|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shangjin66733|  楼主 | 2011-9-30 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//
// 基于新唐M0——BSP Lib 的 工程模板
//
// --------Cube           2011.3---------
// 本程序使用了上述工程模板,用起来很方便。
// 硬件连接如下  
// NUC120                    ZLG7289       蜂鸣器      
// GPA5     -------------    CS        
// GPA6     -------------    CLK        
// GPA4     -------------    DIO
// GPA3     -------------    KEY               
// GPB2     --------------------------------FMQ               
//                   
// 我是菜农助学板第一批学习使用者之一,               
// 感谢菜农先生的耐心助教。                  
// 本程序已用KEILvU4 4.20编译通过并成功运行。
// 在此与同好交流并请指正。
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvUART.h"
#include "DrvSYS.h"
#include "ZLG7289U.h"


void delay_ms(uint32_t k)                 
                                 
{                                                                
uint32_t i,j;                                
for(i=0;i<k;i++){                                  
for(j=0;j<2250;j++)                               
{;}}                                                                     
}   

int main (void)
{
       
        uint8_t x;
        uint8_t mod;
        uint8_t dat;
        uint8_t k;
        uint8_t dp;
        uint8_t n;
       
        UNLOCKREG();                                                                                       
    SYSCLK->PWRCON.XTL12M_EN = 1;                                                                                        

                                                                       
        delay_ms(300);
        ZLG7289_Init();
        delay_ms(1000);
       
        ZLG7289_Reset();
        delay_ms(1000);
//用译码方式0和方式1下载数据并显示。
        for(mod=0;mod<2;mod++)
        {
                for(dat=0;dat<16;dat++)
                {
                        dp=0;
                        for(x=0;x<8;x++)
                        {
                                ZLG7289_Download(mod,x,dp,dat);
                        }
                        delay_ms(1000);
                        dp=1;
                        for(x=0;x<8;x++)
                        {
                                ZLG7289_Download(mod,x,dp,dat);
                        }
                        delay_ms(1000);
                }
                delay_ms(1000);
        }
//显示0.123456
        ZLG7289_Download(1,0,1,0);
        for(x=1;x<8;x++)
        {
                dat=x;
                ZLG7289_Download(1,x,1,dat);
        }
        delay_ms(1000);
//循环左移
        for ( n=0; n<8; n++ )
        {
        ZLG7289_ROL();
        delay_ms(1200);
        }
        delay_ms(1000);
//循环右移
        for ( n=0; n<8; n++ )
        {
        ZLG7289_ROR();
        delay_ms(1200);
        }
        delay_ms(1200);
//左移2 位
        for ( n=0; n<2; n++ )
        {
        ZLG7289_SHL();
        delay_ms(1200);
        }
//右移3 位
        for ( n=0; n<3; n++ )
        {
        ZLG7289_SHR();
        delay_ms(1200);
        }
//显示01234567
        for ( x=0; x<8; x++ )
        {
        dat = x;
        ZLG7289_Download(1,x,0,dat);
        }
        delay_ms(1200);
//闪烁控制
        dat = 0xFE;
        for ( n=0; n<8; n++ ) //逐位闪烁
        {
        ZLG7289_Flash(dat);
        dat <<= 1; dat++; //数据0xFE 循环左移
        delay_ms(1600);
        }
        ZLG7289_Flash(0x5A); //多位可以同时闪烁
        delay_ms(2000);
        ZLG7289_Flash(0xFF); //停止闪烁
        delay_ms(2000);
//消隐控制
        dat = 0xFE;
        for ( n=0; n<8; n++ )
        {
        ZLG7289_Hide(dat);
        dat <<= 1; dat++; //数据0xFE 循环左移
        delay_ms(2000);
        }
        ZLG7289_Hide(0x5A); //多位可以同时消隐
        delay_ms(2000);
        ZLG7289_Hide(0xFF); //停止消隐
        delay_ms(1000);
//复位
        ZLG7289_Reset();
        delay_ms(1000);
//段点亮
        for ( n=0; n<64; n++ )
        {
        dat = n;
        ZLG7289_SegOn(dat);
        delay_ms(500);
        }
//段关闭
        for ( n=0; n<64; n++ )
        {
        dat = n;
        ZLG7289_SegOff(dat);
        delay_ms(500);
        }
//键盘测试
        ZLG7289_Reset();
        delay_ms(500);
        for(;;)       
        {
                INPUT_KEY;
                if(GETBIT_KEY==0)
                {               
                k=ZLG7289_Key();
                dat=k/10;
                ZLG7289_Download(1,0,0,dat);
                dat=k-dat*10;
                ZLG7289_Download(1,1,0,dat);
                while(!GETBIT_KEY);
                FMQ_CLR;
                delay_ms(500);
                FMQ_SET;
                delay_ms(10);
                }
        delay_ms(50);
        }
}

相关帖子

沙发
hotpower| | 2011-9-30 19:40 | 只看该作者
为何要模拟spi?

使用特权

评论回复
板凳
shangjin66733|  楼主 | 2011-10-1 19:06 | 只看该作者
感谢菜农先生的关注。
ZLG7289A手册对数据传输时间有要求,所以按ZLG7289A的驱动程序移植过来的。
用SPI没试过,NUC120的SPI还有待熟悉。

使用特权

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

本版积分规则

0

主题

6

帖子

1

粉丝