我有这个代码,我想摆弄,分析一个有希望了解它的人。假设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(只需要连接引脚)。希望你知道我在说什么。
答案 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位数据以及时钟和命令引脚。读取设备上的号码并在互联网上搜索。