基于微控制器的器件广泛应用于各种传感应用中。即使微控制器是纯粹的数字设备,工作在logic0和logic1电压,他们也可以读取模拟电压。大多数微控制器都有内置的模数转换器(ADC)模块,这有助于它们读取模拟电压输入。
LCD模块是微控制器板中最常见的输出单元。它非常有效,因为它可以显示消息、值和时钟等。使用特殊的液晶驱动器来驱动液晶显示器。LCD模块不仅可以显示ASCII字符,还可以显示自定义字符。用户可以将自定义字符对应的像素数组存储在LCD模块中。存储的自定义字符可以通过发送相应的值到LCD模块来显示。自定义字符用于在LCD板上动态显示。
这个项目利用了可以在LCD模块中生成的自定义字符。LCD模块具有两个或多个控制器,有助于显示与微控制器发送的ASCII值对应的字符。ASCII字符模式存储在LCD控制器的内部CGROM中。LCD模块还提供CGRAM,用户可以在其中存储自定义字符并显示它们。生成自定义字符的方法在以前的项目中有很好的解释如何在LCD中创建自定义字符.
本项目使用Arduino pro-mini板,在windows操作系统上借助Arduino IDE 1.0.3版本进行编程。Arduino pro-mini板和Arduino IDE的图像如下图所示;
图2:典型的Arduino Pro-Mini板
图3:Arduino IDE软件窗口
另一种硬件可以进行USB到TTL的转换,并将程序上传到arduino董事会。一个必须计算出自定义字符的字符,需要显示在LCD屏幕上的项目解释如何在LCD中创建自定义字符.该项目中显示的自定义字符如下图所示。
图4:利用面包板上的Arduino电路在LCD上自定义创建字符
图5:外接USB转TTL转换板,用于编程Arduino和串行通信
假设读者已经完成了这个项目如何开始使用arduino并且完成了书中提到的所有事情。arduino pro-mini板最多有8个模拟引脚,可配置为模拟输入引脚。板上的引脚标记为A0、A1、A2 ~ A7。它们实际上是内置ADC的输入通道,可以读取模拟值并将其转换为数字等效值。一些pro-mini板的模拟引脚数量较少。
在本项目中,电位器的可变引脚连接到模拟引脚;在本项目中,引脚为A0。电位器的另外两个引脚连接到VCC和GND,这样当变量移动时,它可以分割整个电源电压,并提供它作为arduino板的模拟输入电压。LED通过限流电阻连接到模拟输出引脚;在这个项目中,它连接到引脚6。该代码连续地从电位器读取值,并写入相应的值来改变连接到引脚6的LED的亮度。
Arduino IDE有一个名为
为这个项目编写的代码有一个函数LCD . createchar(),它帮助在LCD屏幕上创建自定义字符。下一节将讨论lcd.createChar()函数的详细信息。
lcd.createChar ()
函数lcd.createChar()可用于将自定义字符写入CGRAM中所需的位置。该函数有两个参数,其中第一个参数是CGRAM内存中需要存储与自定义字符对应的字符数组的位置,第二个参数是字符数组本身。例如,如果有一个名为“cc”的自定义字符数组,它需要存储在5thCGRAM的位置可以使用以下语句;
液晶显示器。createChar (cc);
上面的语句将字符数组写入5thLCD控制器CGRAM的位置,在那里可以通过调用LCD .write()函数来显示如何连接LCD和PC而且如何制作液晶滚动显示器.
lcd.write (5);
代码读取模拟计算模拟电压从它,然后显示自定义字符在LCD屏幕上。该代码还发光LED的亮度相当于从模拟输入引脚读取的值在以前的项目中讨论如何使用Arduino的模拟输入和输出.
项目源代码
### /*================================= 如实验室 ======================================= 传感器值在液晶动态显示电路:*导致连接销5地通过1 k电阻液晶:RS销数字销12 * *液晶LCD数字销使销11 *液晶D4销数字销5 *液晶D5销到数字销4 *液晶数字销3 D6销*液晶D7销到数字销2 *液晶R / W销地面* 10 k电阻:*端到+5V和地面*雨刷到LCD引脚3 * LED阳极连接到数字输出6 * LED阴极连接到地面通过1K电阻//================================= EG LABS =======================================*/ //包括库代码:#include //初始化库的接口引脚的数量LiquidCrystal LCD (12,11,5,4,3,2);//----------------- 存储自定义字符数组 ---------------------// 字节cc1 [8] = {0 b00000, 0 b00000 0 b00000 0 b00000, 0 b00000 0 b00000 0 b00000 0 b11111};Byte cc2[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};字节cc3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};字节cc4[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111};字节cc5[8] = {0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};//----------------- 存储自定义字符数组 ---------------------// const int analogInPin = A0;//电位器连接到const int analogOutPin = 6的模拟输入引脚;// LED连接的模拟输出引脚 int outputvalue=0; int no_bars = 0; int bar_height = 0; void setup() { //---- create custom characters ----// lcd.createChar(1, cc1); lcd.createChar(2, cc2); lcd.createChar(3, cc3); lcd.createChar(4, cc4); lcd.createChar(5, cc5); //---- create custom characters ----// // set up the lcd's number of columns and rows: lcd.begin(16, 2); } void loop() { lcd.print("EG LABS "); // read the analog in value: potvalue = analogRead(analogInPin); // map it to the range of the analog out: outputvalue = map(potvalue, 0, 1023, 0, 255); // change the analog out value: analogWrite(analogOutPin, outputvalue); // calculate the input voltage no_bars = (outputvalue * 5) / 255; // display custom bars according to the input voltage for(bar_height = 1; bar_height <= no_bars; bar_height ++) lcd.write(bar_height); // dispaly custom character // keep the same display for a while and then clear delay(200); lcd.clear(); } ###
与本文相关的问题?
询问和讨论Electro-Tech-Online.com而且EDAboard.com论坛。
告诉我们你的想法!!
你必须登录发表评论。