我有我想摆弄的这段代码,希望对它进行分析。假定不使用适当的库就可以使Atmega32操作LCD显示器。
我是新手-我试图找出控制器应该通过哪些引脚连接(我的意思是4个数据引脚,en和rs)。我需要这方面的帮助。
代码如下:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/delay.h>
void wait_ms(int del) {
for (int i=0; i<del; i++) {
_delay_ms(1);
}
}
void LCD_command(int c) {
int d;
d=c;
PORTB = c >> 4;
PORTD = 0x01;
wait_ms(1);
PORTD = 0x00;
wait_ms(1);
PORTB = d;
PORTD = 0x01;
wait_ms(1);
PORTD = 0x00;
wait_ms(1);
}
void LCD_char(char c) {
char d;
d=c;
PORTB = (c & 0xf0) >> 4;
PORTD = 0x03;
wait_ms(1);
PORTD = 0x02;
wait_ms(1);
PORTB = d & 0x0f;
PORTD = 0x03;
wait_ms(1);
PORTD = 0x02;
wait_ms(1);
}
void LCD_text(char *s) {
while (*s) {
LCD_char(*s);
s++;
}
}
void LCD_IR(void) {
PORTD = 0x01;
wait_ms(1);
PORTD = 0x00;
wait_ms(1);
}
void LCD_init(void) {
wait_ms(20);
LCD_command(0x03);
LCD_command(0x03);
LCD_command(0x03);
LCD_command(0x02);
LCD_command(0x28);
LCD_command(0x01);
LCD_command(0x06);
LCD_command(0x0f);
}
int main(void) {
DDRB = 0xFF;
DDRD = 0xFF;
LCD_init();
char s[10];
//LCD_char('t');
//char w = "zmienna";
LCD_text(s);
while (1);
}
一旦启动并运行,我很可能就能弄清楚该怎么做。我只需要这个推动。
哦-我正在使用Kamami板并已安装LCD(只需连接引脚)。希望你知道我在说什么。
最佳答案
您没有在问题中提供足够的信息以帮助您。有许多卡玛尼板,其中一些带有LCD屏幕。不过,我没有看到带有LCD的AVR板。此代码在这样的板上工作吗?
无论如何,我们可以通过查看代码来了解它的作用。
PORTB似乎是4位数据总线。 PORTB = (c & 0xf0) >> 4;
通过引脚PORTB0:3发送c
的高位。然后,PORTB = c & 0x0f;
发送低位。
PORTD引脚0和1似乎是时钟和命令位。 (也许它们被标记为en和rs,但我对此表示怀疑。)PORTD0在正确的时间在0和1之间切换。 PORTD1对于命令为0,对于数据为1。
您应该找到正在使用的LCD显示器的数据表,并查看其是否使用4位数据以及时钟和命令引脚。从设备上读取该号码并在Internet上搜索。
关于c - 如何将Atmega32上的引脚连接到4位LCD,以便此代码有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35233247/