手上有4位数码管,和LM35温度传感器,从论坛学了点知识,今天有空搭建了一个数字温度计。遗憾的就是我的线材太少了,基本上用上了所有的线。还“桥接”了几处。呵呵。 接线很简单,参阅弘老大的帖子接就行:http://www.geek-workshop.com/thread-82-1-1.html
移动电源供电
把代码贴出来,供大家参考一下。(代码我也是修改弘老大和其他人的,嘿嘿)
- //设置阳极接口
- int a = 1;
- int b = 2;
- int c = 3;
- int d = 4;
- int e = 5;
- int f = 6;
- int g = 7;
- int p = 8;
- // 温度刷新间隔
- long count=1000;
- // 初始温度值
- float vol=0.0;
- //设置阴极接口
- int d4 = 9;
- int d3 = 10;
- int d2 = 11;
- int d1 = 12;
- byte segs[7] = {
- a, b, c, d, e, f, g };
- byte seven_seg_digits[11][7] = {
- {
- 0,0,0,0,0,0,1 }
- , // = 0
- {
- 1,0,0,1,1,1,1 }
- , // = 1
- {
- 0,0,1,0,0,1,0 }
- , // = 2
- {
- 0,0,0,0,1,1,0 }
- , // = 3
- {
- 1,0,0,1,1,0,0 }
- , // = 4
- {
- 0,1,0,0,1,0,0 }
- , // = 5
- {
- 0,1,0,0,0,0,0 }
- , // = 6
- {
- 0,0,0,1,1,1,1 }
- , // = 7
- {
- 0,0,0,0,0,0,0 }
- , // = 8
- {
- 0,0,0,0,1,0,0 } // = 9
- , // = C
- {
- 1,1,1,0,0,1,0 } // = C
- };
- void setup() {
- pinMode(d1, OUTPUT);
- pinMode(d2, OUTPUT);
- pinMode(d3, OUTPUT);
- pinMode(d4, OUTPUT);
- pinMode(A0, OUTPUT);
- pinMode(a, OUTPUT);
- pinMode(b, OUTPUT);
- pinMode(c, OUTPUT);
- pinMode(d, OUTPUT);
- pinMode(e, OUTPUT);
- pinMode(f, OUTPUT);
- pinMode(g, OUTPUT);
- pinMode(p, OUTPUT);
- pinMode(A1, OUTPUT);
- digitalWrite(d1, HIGH);
- digitalWrite(d2, HIGH);
- digitalWrite(d3, HIGH);
- digitalWrite(d4, HIGH);
- digitalWrite(A0, HIGH);//
- digitalWrite(a, LOW);
- digitalWrite(b, LOW);
- digitalWrite(c, LOW);
- digitalWrite(d, LOW);
- digitalWrite(e, LOW);
- digitalWrite(f, LOW);
- digitalWrite(g, LOW);
- digitalWrite(p, LOW);
- digitalWrite(A1, LOW);
- }
- void loop() {
- int n = analogRead(A3); //读取A0口的电压值
- float vol_t = n * (5.0 / 1023.0*100); //使用浮点数存储温度数据,温度数据由电压值换算得到
- if(count>=1000){
- count=0;
- vol=vol_t;
- }
- // 左起第1位数字
- clearLEDs() ;
- SetNumber(1,(int)(vol/10));
- delay(2);
- // 左起第2位数字
- clearLEDs() ;
- SetNumber(2,((int)vol)%10);
- delay(2);
- // 左起第3位数字
- clearLEDs() ;
- SetNumber(3,((int)(vol*10))%10);
- delay(2);
- // 左起第4位数字
- clearLEDs() ;
- SetNumber(4,10);//10=C
- delay(2);
- count++;
- }
- // 点亮对应数字的数码管
- void lightSegments(int x) {
- for (int i = 0; i < 7; i++) {
- digitalWrite(segs[i], !seven_seg_digits[x][i]);
- }
- }
- // 点亮小数点
- void dot()
- {
- digitalWrite(p,HIGH);
- }
- void SetNumber(int b,int num)
- {
- switch(b)
- {
- case 1:
- digitalWrite(d1, LOW);
- digitalWrite(d2, HIGH);
- digitalWrite(d3, HIGH);
- digitalWrite(d4, HIGH);
- lightSegments(num);
- break;
- case 2:
- digitalWrite(d1, HIGH);
- digitalWrite(d2, LOW);
- digitalWrite(d3, HIGH);
- digitalWrite(d4, HIGH);
- lightSegments(num);
- // 点亮小数点
- dot();
- break;
- case 3:
- digitalWrite(d1, HIGH);
- digitalWrite(d2, HIGH);
- digitalWrite(d3, LOW);
- digitalWrite(d4, HIGH);
- lightSegments(num);
- break;
- case 4:
- digitalWrite(d1, HIGH);
- digitalWrite(d2, HIGH);
- digitalWrite(d3, HIGH);
- digitalWrite(d4, LOW);
- lightSegments(num);
- break;
- }
- }
- void clearLEDs() //清屏
- {
- digitalWrite(a, LOW);
- digitalWrite(b, LOW);
- digitalWrite(c, LOW);
- digitalWrite(d, LOW);
- digitalWrite(e, LOW);
- digitalWrite(f, LOW);
- digitalWrite(g, LOW);
- digitalWrite(p, LOW);
- digitalWrite(A1, LOW);
- }
复制代码
|