我有我想摆弄的这段代码,希望对它进行分析。假定不使用适当的库就可以使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/

10-11 18:55