找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手尝试Arduino温度数码管显示程序 可调亮度

[复制链接]
ID:512424 发表于 2019-4-15 11:16 | 显示全部楼层 |阅读模式
175346i6kgs62wjwxc3s6h_WPS图片.jpg
  1. int a = 15;//设置端口
  2. int b = 19;
  3. int c = 7;
  4. int d = 5;
  5. int e = 4;
  6. int f = 16;
  7. int g = 8;
  8. int dp = 6;
  9. int tempPin = 7;
  10. int d1 = 14;
  11. int d2 = 17;
  12. int d3 = 18;
  13. int d4 = 9;
  14. int n = 0;//温度变量
  15. int del = 2; //数码管的亮度
  16. unsigned long m=0

  17. byte segs[7] = { a, b, c, d, e, f, g }
  18. byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 },
  19.                                { 0,1,1,0,0,0,0 },
  20.                                { 1,1,0,1,1,0,1 },
  21.                                { 1,1,1,1,0,0,1 },
  22.                                { 0,1,1,0,0,1,1 },
  23.                                { 1,0,1,1,0,1,1 },
  24.                                { 1,0,1,1,1,1,1 },
  25.                                { 1,1,1,0,0,0,0 },
  26.                                { 1,1,1,1,1,1,1 },
  27.                                { 1,1,1,1,0,1,1 }
  28.                                };
  29. void setup()
  30. {
  31.   pinMode(d1, OUTPUT);
  32.   pinMode(d2, OUTPUT);
  33.   pinMode(d3, OUTPUT);
  34.   pinMode(d4, OUTPUT);
  35.   pinMode(a, OUTPUT);
  36.   pinMode(b, OUTPUT);
  37.   pinMode(c, OUTPUT);
  38.   pinMode(d, OUTPUT);
  39.   pinMode(e, OUTPUT);
  40.   pinMode(f, OUTPUT);
  41.   pinMode(g, OUTPUT);
  42.   pinMode(dp, OUTPUT);
  43.   pinMode(11, OUTPUT);
  44.   digitalWrite(11, LOW);
  45.   Serial.begin(9600);
  46. }
  47. void loop()//运行程序
  48. {
  49. float tempval=analogRead(tempPin)* 4.6;
  50. if (m%30==0) n=int(tempval);

  51.       if (n>300)  digitalWrite(11, HIGH);
  52.       if (n<=300)  digitalWrite(11, LOW);
  53.   clearLEDs()
  54.   delay(del)
  55.   lightSegments(n/1000%10);

  56.   pickDigit((n/1000%10>0));

  57. clearLEDs();
  58.   delay(del);
  59.   pickDigit(2);
  60.   lightSegments(n/100%10);
  61.   delay(del+2);

  62.   clearLEDs();
  63.   pickDigit(3);
  64.   lightSegments(n/10%10);
  65.   dispDec(3);
  66.   delay(del+2);

  67.   clearLEDs();
  68.   delay(del);
  69.   pickDigit(4);
  70.   lightSegments(n%10);
  71.   delay(del-1);
  72.   m++;


  73. Serial.println(analogRead(tempPin));
  74. Serial.println(n);
  75. }

  76. void pickDigit(int x)
  77. {
  78.   digitalWrite(d1, LOW);
  79.   digitalWrite(d2, LOW);
  80.   digitalWrite(d3, LOW);
  81.   digitalWrite(d4, LOW);
  82.   switch(x)
  83.   {
  84.   case 1:
  85.     digitalWrite(d1, HIGH);
  86.     break;
  87.   case 2:
  88.     digitalWrite(d2, HIGH);
  89.     break;
  90.   case 3:
  91.     digitalWrite(d3, HIGH);
  92.     break;
  93.   case 4:// default:
  94. digitalWrite(d4, (m%100>=30));

  95.     break;
  96.   }
  97. }
  98. void dispDec(int x)
  99. {
  100. digitalWrite(dp, LOW);//点亮小数点
  101. }
  102. void clearLEDs()
  103. {
  104.     for (int i = 0; i < 7; i++)
  105. {
  106.     digitalWrite(segs[ i], HIGH);
  107.      }
  108.     digitalWrite(dp, HIGH);
  109. }
  110. void lightSegments(int x)
  111. {
  112. for (int i = 0; i < 7; i++)
  113. {
  114. digitalWrite(segs[ i], 1-seven_seg_digits[x][ i]);
  115.   }
  116. }
复制代码
回复

使用道具 举报

ID:1 发表于 2019-4-15 16:53 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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