极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11591|回复: 1

来个大神帮忙看看程序!!!!!

[复制链接]
发表于 2015-11-26 15:51:18 | 显示全部楼层 |阅读模式
   #include <DallasTemperature.h>
   #include <OneWire.h>
   #define ONE_WIRE_BUS 9
   OneWire oneWire(ONE_WIRE_BUS);
   DallasTemperature sensors(&oneWire);
    unsigned char LED_0F[] =
    {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
            0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
    };
    unsigned char LED[4];        //用于LED的4位显示缓存
    int SCLK = 4;
    int RCLK = 3;
    int DIO = 2; //这里定义了那三个脚
    int a;
    int b;
    int c;
    int d;
    void setup ()
    {
      pinMode(SCLK,OUTPUT);
      pinMode(RCLK,OUTPUT);
      pinMode(DIO,OUTPUT); //让三个脚都是输出状态
      Serial.begin(9600);
      Serial.println("Demo");
      sensors.begin();
    }
    void loop()
    {
      Temperatures();
      LED[3]=d;
            LED[2]=a;
            LED[1]=b;
            LED[0]=12;
      
      
      LED4_Display ();
     
      Serial.println("TEXT");
    }
    void Temperatures()
    {
      Serial.print("Requesting temperatures...");
      sensors.requestTemperatures();
      Serial.println("DONE");
      Serial.print("Temperature for the device 1(index 0) is:");
      Serial.println(sensors.getTempCByIndex(0));
      c=sensors.getTempCByIndex(0);
      a=c/10;
      b=c%10;
      if (c>=0)
      {
        d=0;
        }
      else
      {
        d=16;
        }
   
      }

    void LED4_Display ()
    {
            unsigned char *led_table;          // 查表指针
            unsigned char i;
           
            //显示第1位
            led_table = LED_0F + LED[0];
            i = *led_table;
            LED_OUT(i);
      LED_OUT(0x01);
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
        delay(500);
   
            //显示第2位
            led_table = LED_0F + LED[1];
            i = *led_table;
            LED_OUT(i);       
      LED_OUT(0x02);
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
              delay(500);

            //显示第3位
            led_table = LED_0F + LED[2];
            i = *led_table;
            LED_OUT(i);               
            LED_OUT(0x04);
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
              delay(500);
           
            //显示第4位
            led_table = LED_0F + LED[3];
            i = *led_table;
            LED_OUT(i);               
            LED_OUT(0x08);
        digitalWrite(RCLK,LOW);
        digitalWrite(RCLK,HIGH);
        delay(500);
    }
    void LED_OUT(unsigned char X)
    {
      unsigned char i;
      for(i=8;i>=1;i--)
      {
        if (X&0x80)
                {
                  digitalWrite(DIO,HIGH);
                 }  
                else
                {
                  digitalWrite(DIO,LOW);
                }
        X<<=1;
                digitalWrite(SCLK,LOW);
                digitalWrite(SCLK,HIGH);
      }
    }
   
   
这个4位数码管只能从右到左依次显示,不能4位同时显示,做了个温度计,不能一起显示看起来很累啊,试了修改void LED4_Display ()里的延迟函数不管用,改到最小就闪的更快了,什么也看不清,改大了能显示清楚就是一位一位的显示。求问大神怎么改这个程序?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-11-26 16:13:32 | 显示全部楼层
所谓显示四位,其实是一个个点亮,不断扫描显示的

这个是数码管显示的原理
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 04:21 , Processed in 0.035944 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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