设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 254|回复: 0
收起左侧

Arduino UNO 驱动3片级联 74HC595 的3位静态共阴数码管模块 并演示数字:000~999 累加

[复制链接]
发表于 2023-6-5 18:46:59 | 显示全部楼层 |阅读模式
main.png
  1. #include "MsTimer2.h"
  2. #define SHCP 2    //上升沿锁存数据到595内部
  3. #define STCP 3    //上升沿输出595内部数据
  4. #define OE 4      //高电平关闭595输出 (低电平打开输出,防止上电瞬间乱码)
  5. #define DS 5      //595被锁存的数据
  6. #define u8 unsigned char
  7. #define u16 unsigned int
  8. #define u32 unsigned long
  9. #define hc595_num 3      //595级联数量
  10. u8 hc595_data[hc595_num];   //595数据容器

  11. const u8 seg[16] = {    //共阴数码管段码16进制
  12.   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
  13. };

  14. void hc595(bool on){    //请将数据写入 hc595_data 数组 然后发送 参数:1打开输出 0高阻输出
  15.   u8 j,k = hc595_num - 1;
  16.   do {
  17.     j = 7;
  18.     do {
  19.       digitalWrite(DS,hc595_data[k] & (1 << j) ? 1 : 0);
  20.       digitalWrite(SHCP,0);
  21.       digitalWrite(SHCP,1);
  22.     } while(j--);
  23.   } while(k--);
  24.   digitalWrite(STCP,0);
  25.   digitalWrite(STCP,1);
  26.   digitalWrite(OE,!on);
  27. }

  28. void setup() {
  29.   pinMode(SHCP, OUTPUT);
  30.   pinMode(STCP, OUTPUT);
  31.   pinMode(DS, OUTPUT);
  32.   pinMode(OE, OUTPUT);
  33.   MsTimer2::set(1,ms1);   //1ms定时器
  34.   MsTimer2::start();         //开定时器中断
  35. }

  36. void loop() {
  37. }

  38. void ms1(){   //1ms定时器中断
  39.   static unsigned int i = 0;
  40.   static unsigned int ms = 0;
  41.   if(++ms >= 100) {
  42.     ms = 0;
  43.     hc595_data[0]=seg[(i/100)%10];
  44.     hc595_data[1]=seg[(i/10)%10];
  45.     hc595_data[2]=seg[i%10];
  46.     hc595(1);
  47.     if(++i >= 1000){
  48.       i = 0;
  49.     }
  50.   }
  51. }

复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 05:13 , Processed in 0.533030 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表