【Arduino23】动态显示光敏电阻模拟值

硬件准备

4位数码管:1 个

光敏电阻:1个

1K欧电阻:4个

杜邦线:15根

面包板:1块

硬件连线

1、用1K欧电阻分别接到数码管的位引脚

2、将数码管的12个引脚接到开发板上

3、将1k电阻的一端接到光敏电阻的一端

4、将1k电阻的另一端接到GND

5、用杜邦线将光敏电阻与1k电阻相连的那端接到A0接口

6、用杜邦线将5V接口接到光敏电阻另一端

软件程序

const int photoresistor_pin = A0;//光敏电阻引脚
unsigned int light_val = 0;  //光照变量

const char num_array[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 };  //数字0~9
unsigned char displayTemp[4];                                                                  //缓冲数组

/*引脚*/
const char seg_pins[4] = { 13, 7, 5, 2 };             //位
const char led_pins[8] = { 11, 3, 6, 10, 12, 9, 4 };  //段


/*函数声明*/
void Init();
void GetLight();
void GetFigure(int light);
void Display();

void setup(){
  Serial.begin(9600);
  for (int i; i < 4; i++) {
    pinMode(seg_pins[i], OUTPUT);
  }

  for (int i; i < 8; i++) {
    pinMode(led_pins[i], OUTPUT);
  }
}

void loop(){
  //Init();               //初始化
  GetLight();//获取光敏电阻模拟值
  GetFigure(light_val);  //获得数码管数字
  Display();            //显示数字
}

/*初始化*/
void Init() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(seg_pins[i], LOW);
  }
  for (int i = 0; i < 8; i++) {
    digitalWrite(led_pins[i], LOW);
  }
}

void GetLight() {
  light_val = analogRead(photoresistor_pin);
  Serial.println(light_val);
}

void GetFigure(int light) {
  displayTemp[0] = num_array[light / 1000 ];
  displayTemp[1] =  num_array[light % 1000 / 100];
  displayTemp[2] =  num_array[light % 100 / 10];
  displayTemp[3] =  num_array[light % 10];
}

void Display() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(seg_pins[i], HIGH);
    for (int j = 0; j < 8; j++) {
      digitalWrite(led_pins[j], bitRead(displayTemp[i], j));
    }
    delay(1);
    digitalWrite(seg_pins[i], LOW);
  }
}

产品展示视频

【Arduino23】动态显示光敏电阻模拟值

总结

通过本次实验,我复习了光敏电阻的使用,并思考了4位数码管可用的场景。

你可能感兴趣的:(单片机,嵌入式硬件)