miblsy 发表于 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;        //用于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=d;
            LED=a;
            LED=b;
            LED=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;
            i = *led_table;
            LED_OUT(i);
      LED_OUT(0x01);
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
      delay(500);
   
            //显示第2位
            led_table = LED_0F + LED;
            i = *led_table;
            LED_OUT(i);       
      LED_OUT(0x02);
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
              delay(500);

            //显示第3位
            led_table = LED_0F + LED;
            i = *led_table;
            LED_OUT(i);               
            LED_OUT(0x04);
      digitalWrite(RCLK,LOW);
      digitalWrite(RCLK,HIGH);
              delay(500);
           
            //显示第4位
            led_table = LED_0F + LED;
            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 ()里的延迟函数不管用,改到最小就闪的更快了,什么也看不清,改大了能显示清楚就是一位一位的显示。求问大神怎么改这个程序?

zoologist 发表于 2015-11-26 16:13:32

所谓显示四位,其实是一个个点亮,不断扫描显示的

这个是数码管显示的原理
页: [1]
查看完整版本: 来个大神帮忙看看程序!!!!!