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

[复制链接]
 楼主| 比神乐 发表于 2024-11-28 20:28 | 显示全部楼层 |阅读模式
代码:
  1. #include "at32l021_board.h"
  2. #include "at32l021_clock.h"

  3. /** @addtogroup AT32L021_periph_examples
  4.   * @{
  5.   */
  6. #define uchar unsigned char


  7. uchar const Table[] =
  8. { // 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  9.         0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x8C,0xBF,0xC6,0xA1,0x86,0x00,0x40
  10. };
  11. void _nop_(void)
  12. {
  13.         u8 i;
  14.         for(i=0;i<20;i++);
  15. }
  16. /** @addtogroup 021_GPIO_led_toggle GPIO_led_toggle
  17.   * @{
  18.   */
  19. void SMG_Int(uchar Dat)         //通过8次循环将8位数据移入74HC595
  20. {
  21.         uchar i;
  22.         for(i=8;i>=1;i--)
  23.         {
  24.                 if (Dat & 0x80)
  25.                 {
  26.                         at32_hc595_on(SER );
  27.                 }
  28.                
  29.                 else
  30.                 {
  31.                         at32_hc595_off(SER );
  32.                 }
  33.                 Dat <<= 1;
  34.                 at32_hc595_off(SHCP );
  35.                 _nop_();
  36.                 _nop_();
  37.                 at32_hc595_on(SHCP);
  38.         }
  39. }

  40. void delay(void)
  41. {
  42.         int i;
  43.         for(i=0;i<200;i++);
  44. }
  45. void delay1(void)
  46. {
  47.         int i;
  48.         for(i=0;i<1000;i++);
  49. }
  50. void Display (void)
  51. {
  52.         uchar i;

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

  55.         SMG_Int(i);                       
  56.         SMG_Int(~0x01);               

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

  64.         SMG_Int(i);               
  65.         SMG_Int(~0x02);               

  66.         at32_hc595_off(STCP);
  67.         _nop_();
  68.         _nop_();
  69.         at32_hc595_on(STCP);
  70.         delay1();
  71.         //显示第3位        -
  72.         //if(shan<10)         //"-" 闪烁
  73.         i = Table[3];
  74.         //else
  75.         //i = Table[15];
  76.         SMG_Int(i);                       
  77.         SMG_Int(~0x04);       

  78.         at32_hc595_off(STCP);
  79.         _nop_();
  80.         _nop_();
  81.         at32_hc595_on(STCP);
  82.         delay1();
  83.         //显示第4位        分钟10位
  84.         i = Table[4];

  85.         SMG_Int(i);                       
  86.         SMG_Int(~0x08);               

  87.         at32_hc595_off(STCP);
  88.         _nop_();
  89.         _nop_();
  90.         at32_hc595_on(STCP);
  91.         delay1();
  92.         //显示第5位        分钟个位
  93.         i = Table[5];

  94.         SMG_Int(i);                       
  95.         SMG_Int(~0x10);       

  96.         at32_hc595_off(STCP);
  97.         _nop_();
  98.         _nop_();
  99.         at32_hc595_on(STCP);
  100.         delay1();
  101.         //显示第6位        -
  102.         //if(shan<10)           //"-" 闪烁
  103.         i = Table[6];
  104.         //else
  105.         //i = Table[15];

  106.         SMG_Int(i);                       
  107.         SMG_Int(~0x20);       

  108.         at32_hc595_off(STCP);
  109.         _nop_();
  110.         _nop_();
  111.         at32_hc595_on(STCP);
  112.         delay1();
  113.         //显示第7位        秒10位
  114.         i = Table[7];

  115.         SMG_Int(i);                       
  116.         SMG_Int(~0x40);       

  117.         at32_hc595_off(STCP);
  118.         _nop_();
  119.         _nop_();
  120.         at32_hc595_on(STCP);
  121.         delay1();
  122.         //显示第8位        秒个位
  123.         i = Table[8];

  124.         SMG_Int(i);               
  125.         SMG_Int(0x7f);       

  126.         at32_hc595_off(STCP);
  127.         _nop_();
  128.         _nop_();
  129.         at32_hc595_on(STCP);
  130.         delay1();
  131. }

  132. /**
  133.   * [url=home.php?mod=space&uid=247401]@brief[/url]  main function.
  134.   * @param  none
  135.   * @retval none
  136.   */
  137. int main(void)
  138. {
  139.   system_clock_config();

  140.   at32_board_init();

  141.   while(1)
  142.   {
  143.     Display();
  144.   }
  145. }
效果图
8.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部