大多数微控制器都有一个内置的ADC模块,帮助它们读取模拟电压输入。这一特性使得像微控制器这样的数字设备可以用于模拟传感器应用。该微控制器可以通过led指示、声音产生或使用通信端口与其他设备进行通信。
在所有的输出设备中,最常见和最有效的是简单的LCD模块。LCD模块可以制作成
显示字母、数字、传感器值
,时钟等。它们也可以配置为滚动显示。LCD模块具有单独的内存,用户可以在其中存储自定义字符,如笑脸、徽标等,然后这些字符可以显示在LCD上。当微控制器编码为能够在LCD模块上显示动画的方式时,LCD显示器变得最有效。
LCD模块使基于微控制器的系统独立,因为它不必依赖于其他设备来显示它希望与用户通信的数据。在模拟感测应用程序的情况下,LCD模块上基于动画的显示最有效。如果动画包括波形和类似波形的频率或幅度,则可以基于所感测的模拟值可以变化,因此更令人印象深刻。小型波形显示器已在微小的LCD模块中找到,附带媒体播放器。
这个特殊的项目演示了如何使用Arduino板在LCD中显示类似正弦波的波,以及如何使用电位计改变其频率,电位计可以在未来的项目中用任何类型的模拟传感器代替。
在该项目中,使用Arduino Pro-Mini板,其与Arduino预先编程
启动加载器
. 此项目使用的编程IDE是windows操作系统上的Arduino IDE版本1.0.3。Arduino pro迷你板和Arduino IDE的图像如下所示:;
图2:典型的Arduino Pro-Mini板
图3:Arduino IDE软件窗口
另一个可以执行USB到TTL转换的硬件用于将程序上传到arduino板。
图4:外接USB到TTL转换器板,用于Arduino编程和串口通信
假设读者已经完成了这个项目
Arduino入门
完成了书中讨论的所有事情。
arduino pro-mini板最多可以有8个模拟引脚,可以配置为模拟输入引脚。引脚在电路板上被标记为A0, A1,和A2,直到A7。它们实际上是内置ADC的输入通道,可以读取模拟值并将其转换为数字等值。一些pro-mini板有更少的模拟引脚数量。
在该特定项目中,电位器的可变引脚连接到模拟引脚;在该项目中,引脚A0。电位器的另外两个引脚连接到VCC和GND,以便随着变量移动,它可以将整个电源电压除以其作为Arduino板的模拟输入电压。
确定LCD上波形显示频率感觉的函数是delay()函数。该函数用于在代码步骤之间生成延迟,此处该函数用于设置自定义字符连续显示之间的延迟。延迟的详细信息()功能是任何微控制器编码中所需的基本功能,在
关于如何从Arduino开始的项目.
在函数analogRead()的帮助下读取的模拟传感器值作为delay()函数的输入,对其应用一些校准技术。然后产生的延迟将相当于从传感器读取的模拟电压。
在LCD模块中生成的自定义字符的帮助下,在本项目中生成用于显示的波形。生成自定义字符的方法在上一个项目中有很好的解释
如何在LCD中创建自定义字符.为此项目编写的代码具有函数lcd.createChar(),有助于在LCD屏幕中创建自定义字符。LCD.CreateChar()函数的详细信息已经在以前的项目中解释了如何创建自定义字符和如何创建笑脸在LCD屏幕上使用Arduino。函数LCD . createchar()可以在Arduino IDE中从名为的库中获得,该库提供了许多访问LCD模块的函数。在前面的项目中已经讨论了库中的一些函数 如何接口LCD,如何在LCD上显示传感器值,如何将LCD与PC连接和如何使LCD滚动显示
.
波形只需使用两个自定义字符即可生成,一个用于波形的正半周期,另一个用于波形的负半周期。使用此项目中显示的自定义字符创建的波形如下图所示。
图5:在本项目中使用LCD上显示的自定义字符创建的波形
项目中显示的正半周期的8*5像素阵列及对应的二进制阵列如下图所示;
图6:8 * 5像素和二进制阵列,用于正弦波显示的正半周期
上面显示的自定义字符的8字节长字符数组可以在下面给出的代码中定义;
{
0b00100,
0B01010,
0b10001,
0b10001,
0 b00000,
0 b00000,
0 b00000,
0 b00000
};
项目中所显示的负半周期的8*5像素阵列及对应的二进制阵列如下图所示;
图7:正弦波负半周期显示的8*5像素和二进制阵列
上面显示的自定义字符的8字节长字符数组可以在下面给出的代码中定义;
{
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0b10001,
0b10001,
0B01010,
0b00100
};
代码以这样的方式编写,即它首先显示正半周期,然后显示LCD的整个第二行中的负半周期。然后在等待特定的时间,这取决于从传感器读取的电压。借助以下等式确定延迟。
(outputvalue * 5)/255 + 1) * 75
在上述等式中,值75是以毫秒为单位的最小延迟,然后乘以传感器的电压系数。“outputvalue”是ADC值读取值,可写入任何模拟输出引脚,范围为0到255。输出值除以255,然后加上1,这样延迟75毫秒的整个乘法因子将在1到6的范围内。因此,最小延迟为75毫秒,最大延迟为75*6毫秒。
延迟是通过调用内置函数delay()生成的,如下面的语句所示
延迟(((outputvalue * 5)/255 + 1) * 75);
项目源代码
###/*======================================================================EG实验室=======================================显示运行正弦波在16*2 LCD与闪烁的LED。速度正弦波可以使用连接到销A0的罐变化电路:* LED从引脚6通过1K电阻接地*电位器连接到模拟输入A0*一侧引脚(任意一个)接地*将另一侧针脚连接至+5V液晶显示器:* LCD RS引脚到数字引脚12* LCD使能引脚到数字引脚11* LCD D4引脚到数字引脚5* LCD D5引脚到数字引脚4*LCD D6引脚至数字引脚3* LCD D7引脚到数字引脚2* LCD R / W PIN到地面*10K电阻器:*端到+5V和接地*雨刷到LCD引脚3* LED阳极连接到数字输出* LED阴极通过1K电阻连接到地面//================================= 如实验室 =======================================*///包含库代码:#include//使用接口引脚的编号初始化库液晶显示器(12,11,5,4,3,2);//----------------- 存储自定义字符数组 ---------------------//字节正循环[8]={0b00100,0B01010,0b10001,0b10001,0 b00000,0 b00000,0 b00000,0 b00000};字节否定_cycle [8] ={0 b00000,0 b00000,0 b00000,0 b00000,0b10001,0b10001,0B01010,0b00100};//----------------- 存储自定义字符数组 ---------------------////给LED引脚A名称:int-led=6;Int I = 0;Const int Applicinpin = A0;//电量计连接的模拟输入引脚int potvalue = 0;Int outputvalue = 0;无效设置(){// ----创建自定义字符---- //液晶显示器。positive_cycle createChar(1日);lcd.createChar(2,负循环);// ----创建自定义字符---- ////初始化led引脚作为输出。pinMode(领导、输出);//设置LCD的列和行数:LCD.BEGIN(16,2);液晶显示器。打印(车库“工程师”);延迟(2000);}无效循环(){//读取模拟值:potvalue = analogRead (analogInPin);//将其映射到模拟的范围:outputvalue=map(potvalue,0,1023,0,255);lcd.setcursor(0,1);(我= 0;我< 8;我+ +){lcd.write(1);lcd.write (2);}//---- blink LED -----//DigitalWrite(LED,高);延迟(((outputvalue * 5)/255 + 1) * 75);DigitalWrite(LED,低);延迟(((outputvalue * 5)/255 + 1) * 75);//---- blink LED -----//lcd.setcursor(0,1);(我= 0;我< 8;我+ +){lcd.write (2);lcd.write(1);}//---- blink LED -----/// / digitalWrite(领导、高);延迟(((outputvalue * 5)/255 + 1) * 75);/ / digitalWrite(领导、低);延迟(((outputvalue * 5)/255 + 1) * 75);//---- blink LED -----//}###