人活着还是得记录啊。
第一阶段先服用的是B站【太极创客】零基础入门学用Arduino 第一部分 的内容。
今天要做的是用Arduino驱动LED显示屏。
设备和接线
Arduino的原装板子和杜邦线和B站教程里一样。但是B站【太极创客】零基础入门学用Arduino 第一部分的教程里用的是一位LED显示屏,但是我手上只有一个四位的LED显示屏,而且看完教程里的接线图,他的显示屏是共阴极的,而我根据我的显示屏侧边印的型号去查,发现我手上这是一个四位共阳极的LED显示屏,所以接线方式不能完全照搬教程。
设备
查看网上关于该显示屏的管脚图,将每一个1、2、3、4位显示屏的控制引脚分别与Arduino的A1-A4引脚连接,将显示屏的a-dp引脚分别与Arduino的0-7引脚连接。
即,按照上述连接方式,与B站教程相比,该显示屏除需要将共阴极控制修改成为共阳极控制外,还需要对应控制不同显示位。
驱动编程
工作前测试
首先用最笨的办法试一下板子和显示屏以及连线是否能够正常工作。
void setup() {
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);//打开所有单个显示屏的LED阳极,允许单片机对对应阳极端口输出;
pinMode(0,OUTPUT);
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);//设置接线的端口模式;允许单片机对对应管脚输出;
}
void loop() {
digitalWrite(A1,HIGH);
digitalWrite(A2,HIGH);
digitalWrite(A3,HIGH);
digitalWrite(A4,HIGH);//使用四位八段LED显示屏为共阳极显示屏,所以依次给每一个显示屏的阳极高电平以打开该显示屏;
digitalWrite(A1,HIGH);
digitalWrite(A2,HIGH);
digitalWrite(A3,HIGH);
digitalWrite(A4,HIGH); //用于测试每一个LED显示屏中的每一根管子都能被点亮*/
digitalWrite(0,LOW);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);//依次给每一位显示屏中的每一根二极管低电平,测试管子中各个LED管子是否能够正常点亮;
delay(1000);
}
好了测试以后发现整个四位八段式LED显示屏中的每一个二极管都被点亮了,这个显示屏是可以全须全尾地正常工作的。
驱动
B站教程里有按键控制和猜数字的需求,我不需要,本次驱动实验我只要求自己能按照自己的心意点亮对应的那位LED显示屏并在那块显示屏上显示传入的数字就行,至于以后控制显示屏点亮位置的数字从哪里来,显示屏上显示的数字从哪里来,那就以后用到再说。
所以需要做的事情就几步:1)初始化设置:把需要用到的端口模式设置完成,让每一个端口都能对应听Arduino的话。(在后来实验的时候发现0/1端口有问题,原本打算用0/1端口接入a/b的但是运行后不管哪一位需要显示什么数字这两根管子都不亮,所以改为用2-8连接a-dp,用8-11连接1-4)
void setup() {
int pinNumber=0;//给pinNumber赋予初始值0,否则下面的while循环不知道从哪里开始执行起;
while(pinNumber<12){//使用while循环时候,应为while(true){结构体},所以想要从0-11应该设置为pinNumber<14或pinNumber<=7;
pinMode(pinNumber,OUTPUT);//结构体中每一步都要对应打开一个端口;
pinNumber++;//打开上一个端口后应该让pinNumber自加,即inNumber=pinNumber+1,推动pinNumber往前走一步;这样就避免了像上面的工作前测试一样一句一句地写代码,一个管脚一个管脚地点亮
}
}
2)自定义函数以显示对应数字:参考太极创客教程里使用Switch…case 语句,使用:
switch (表达式)
{
case 常量表达式1: 语句1
case 常量表达式2: 语句2
┇
case 常量表达式n: 语句n
default: 语句n+1
}
语句区分每一个数字显示,完成0-9的数字显示。(该处自定义函数没有返回值,因此在displayNumber用void来规定函数没有返回值这件事;该自定义函数有参数,因此在displayNumber后面的小括号里用int number来规定有一个参数,并且参数为整型这件事)
void displayNumber(int number)
{
switch(number)
{
case 0:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
break;
case 1:
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
break;
case 2:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 3:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 4:
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 5:
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 6:
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 7:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
break;
case 8:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
case 9:
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
}
}
3)点亮显示屏:主函数中应规定被点亮的LED屏幕位置以及调用自定义函数以规定显示的数字,以random函数得到一个随机数以确定当前被点亮的显示屏的位置,后续将该显示屏投入具体的电路中做显示用时该处可以以具体的调用位置代替,单次点亮后对对应的显示屏阳极管脚输出低电平以关闭该显示屏。
int playER;
playER = random(8,12);
digitalWrite(playER,HIGH);
int number=0;
while(number<=7){
displayNumber(number);
number++;
delay(30);
}
digitalWrite(playER,LOW);
}
成功啦!!新年快乐~~!!