iRobot 发表于 2013-7-27 18:50:15

试水,4位数字温度计

手上有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 = {
a, b, c, d, e, f, g };
byte seven_seg_digits = {
{
    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, !seven_seg_digits);
}
}

// 点亮小数点
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);
}








chqiyi 发表于 2013-7-27 22:44:16

赞和顶楼主的精神

迷你强 发表于 2013-7-28 07:13:30

做的好啊~~!!!

nust_奔跑 发表于 2013-7-29 09:23:35

不错~~~~~~

Fortware 发表于 2013-7-31 22:18:47

写的挺好的

bruse321 发表于 2015-1-19 18:27:19

請問有電路圖嗎?
可以參考一下怎麼接線的嗎
感謝
页: [1]
查看完整版本: 试水,4位数字温度计