如何将Atmega32上的引脚连接到4位LCD,以便此代码可以工作

时间:2016-02-05 20:50:05

标签: c avr atmega lcd

我有这个代码,我想摆弄,分析一个有希望了解它的人。假设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 Board安装了LCD(只需要连接引脚)。希望你知道我在说什么。

1 个答案:

答案 0 :(得分:0)

你没有在你的问题中提供足够的信息来帮助你。有许多kamani板和几个带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位数据以及时钟和命令引脚。读取设备上的号码并在互联网上搜索。