打印
[AT32L021]

【AT-START-L021测评】+ 74HC595驱动数码管

[复制链接]
1182|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
比神乐|  楼主 | 2024-11-28 20:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码:
#include "at32l021_board.h"
#include "at32l021_clock.h"

/** @addtogroup AT32L021_periph_examples
  * @{
  */
#define uchar unsigned char


uchar const Table[] =
{ // 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
        0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x8C,0xBF,0xC6,0xA1,0x86,0x00,0x40
};
void _nop_(void)
{
        u8 i;
        for(i=0;i<20;i++);
}
/** @addtogroup 021_GPIO_led_toggle GPIO_led_toggle
  * @{
  */
void SMG_Int(uchar Dat)         //通过8次循环将8位数据移入74HC595
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (Dat & 0x80)
                {
                        at32_hc595_on(SER );
                }
               
                else
                {
                        at32_hc595_off(SER );
                }
                Dat <<= 1;
                at32_hc595_off(SHCP );
                _nop_();
                _nop_();
                at32_hc595_on(SHCP);
        }
}

void delay(void)
{
        int i;
        for(i=0;i<200;i++);
}
void delay1(void)
{
        int i;
        for(i=0;i<1000;i++);
}
void Display (void)
{
        uchar i;

        //显示第1位        小时10位
        i = Table[1];

        SMG_Int(i);                       
        SMG_Int(~0x01);               

        at32_hc595_off(STCP);         //数据并行输出,(借助上升沿)
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay();
        //显示第2位        小时个位
        i = Table[2];

        SMG_Int(i);               
        SMG_Int(~0x02);               

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第3位        -
        //if(shan<10)         //"-" 闪烁
        i = Table[3];
        //else
        //i = Table[15];
        SMG_Int(i);                       
        SMG_Int(~0x04);       

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第4位        分钟10位
        i = Table[4];

        SMG_Int(i);                       
        SMG_Int(~0x08);               

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第5位        分钟个位
        i = Table[5];

        SMG_Int(i);                       
        SMG_Int(~0x10);       

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第6位        -
        //if(shan<10)           //"-" 闪烁
        i = Table[6];
        //else
        //i = Table[15];

        SMG_Int(i);                       
        SMG_Int(~0x20);       

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第7位        秒10位
        i = Table[7];

        SMG_Int(i);                       
        SMG_Int(~0x40);       

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
        //显示第8位        秒个位
        i = Table[8];

        SMG_Int(i);               
        SMG_Int(0x7f);       

        at32_hc595_off(STCP);
        _nop_();
        _nop_();
        at32_hc595_on(STCP);
        delay1();
}

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  main function.
  * @param  none
  * @retval none
  */
int main(void)
{
  system_clock_config();

  at32_board_init();

  while(1)
  {
    Display();
  }
}
效果图

使用特权

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

本版积分规则

467

主题

3517

帖子

7

粉丝