找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2764|回复: 1
收起左侧

基于esp8266的辉光钟

[复制链接]
ID:430767 发表于 2020-4-16 14:22 | 显示全部楼层 |阅读模式
这是我做辉光钟总结的一点经验
  1. #include <DS1302.h>

  2. //clock config
  3. const int kCePin   = 5;  // 对应rst引脚,Chip Enable
  4. const int kIoPin   = 6;  // 对应data引脚,Input/Output
  5. const int kSclkPin = 7;  // 对应clck引脚,Serial Clock

  6. //建立一个ds1302 对象 rtc
  7. DS1302 rtc(kCePin, kIoPin, kSclkPin);

  8. //595 config
  9. int datapin = 2; //DS 14脚 用来串行输入数据
  10. int latchpin = 3; //st_cp 12脚 注:latch 有门闩的意思,可以理解成闸门,控制并行输出的时间
  11. int clockpin = 4; //sh_cp 11脚 //595会在clock的上升沿读取 1bit data, 对它的操控封装在 shiftOut()函数里了, 不需要大家自己操作。

  12. //clock data
  13. int data_sec = 0; //秒数数据
  14. int data_min = 0; //分钟数据
  15. int data_hour = 0; //小时数据

  16. void setup() {
  17.   Serial.begin(9600);
  18.   nixie_tube_init();
  19. }

  20. void loop() {
  21.   //将当前时间存储到 t 这个对象中
  22.   Time t = rtc.time();
  23.   int hour_gewei = t.hr % 10; //取得个位数字 模10
  24.   int hour_shiwei = t.hr / 10;//取得十位数字 处以十
  25.   int min_gewei = t.min % 10;
  26.   int min_shiwei = t.min / 10;
  27.   int sec_gewei = t.sec % 10;
  28.   int sec_shiwei = t.sec / 10;

  29.   //晚上不显示
  30.   if( t.hr>=0 and t.hr<=6 ) {
  31.     digitalWrite(latchpin, LOW);
  32.     shiftOut(datapin, clockpin, LSBFIRST, 255);
  33.     shiftOut(datapin, clockpin, LSBFIRST, 255);
  34.     digitalWrite(latchpin, HIGH);
  35.     delay(100000);
  36.     return;
  37.   }
  38.   //分钟数变化时来个随机显示
  39.   if ((min_shiwei * POW(2,4) + min_gewei) != data_min) {
  40.     random_display(30);
  41.   }
  42.   
  43.   // (5 -> 0101  1-> 0001)   =>  0101 0001  = 0101 * 2^4 + 0001
  44.   // 10 01 => 1001 = 10 * 10^2 + 1
  45.   //  data_sec = sec_shiwei * POW(2,4) + sec_gewei;
  46.   data_min = min_shiwei * POW(2,4) + min_gewei;
  47.   data_hour = hour_shiwei * POW(2,4) + hour_gewei;
  48.   digitalWrite(latchpin, LOW);
  49.   shiftOut(datapin, clockpin, LSBFIRST, data_min);
  50.   shiftOut(datapin, clockpin, LSBFIRST, data_hour);
  51.   digitalWrite(latchpin, HIGH);
  52.   delay(100);
  53. }

  54. int POW(int i, int j) {
  55.   int result = 1;
  56.   if(j == 0) return result;
  57.   for(int k = 0; k < j; k++) {
  58.     result *= i;
  59.   }
  60.   return result;
  61. }

  62. void random_display(int times) {
  63.   for(int i=0; i<times; i++) {
  64.     digitalWrite(latchpin, LOW);
  65.     shiftOut(datapin, clockpin, LSBFIRST, random(1,10) * POW(2,4) + random(1,10));
  66.     shiftOut(datapin, clockpin, LSBFIRST, random(1,10) * POW(2,4) + random(1,10));
  67.     digitalWrite(latchpin, HIGH);
  68.     delay(20);
  69.   }
  70. }


  71. void nixie_tube_init() {
  72.   pinMode(clockpin, OUTPUT);
  73.   pinMode(datapin, OUTPUT);
  74.   pinMode(latchpin, OUTPUT);
  75.   //show something random
  76.   random_display(40);
  77. }
复制代码



第三期资料.zip

1.18 MB, 下载次数: 13, 下载积分: 黑币 -5

辉光管第二期资料.7z

4.08 MB, 下载次数: 12, 下载积分: 黑币 -5

辉光管系列第一期内容.zip

7.02 MB, 下载次数: 13, 下载积分: 黑币 -5

回复

使用道具 举报

ID:738644 发表于 2020-4-29 09:07 | 显示全部楼层
还没玩过辉光钟,硬件部分呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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