السلام عليكم
عندى مشكله مع LCD بشوف cursor بس بعد كده مش بيكتب الحرف.
ده أول مشروع ليه بس أعتقد أن المشكله فى delay أنا مش قدره أحلها .
أنا عوزه أشغله على Proteus لأنى سوف أضيف Keypad .
main.c
#include <avr/io.h>
#include <avr/delay.h>
#include "lcd.h"
int main(void)
{
DDRA = 0xff; //set port A as output port;
DDRB = 0x07; //set port B 0, 1, 2 pin as output port
LCD_init();//inti lcd
// while(1)
//{
//TODO:: Please write your application code
//}
LCD_SendData('A');//write to
return 1;
}lcd.h
#ifndef LCD_H_ #define LCD_H_ #define dataport PORTA #define commport PORTB #define rs PB2 #define rw PB1 #define en PB0 int LCD_init(void); int LCD_SendData(unsigned char D); int LCD_Comm(void); int LCD_Data(void); #endif /* LCD_H_ */
lcd.c
#include <avr/io.h>
#include <avr/delay.h>
#include <string.h>
#include "lcd.h"
int LCD_init()
{
dataport = 0x38; //init lcd
LCD_Comm();
dataport = 0x01; // clear lcd
LCD_Comm();
dataport = 0x0E; //display cursor
LCD_Comm();
dataport = 0x08; //cursor at line 1 position 1
LCD_Comm();
dataport = 0x1c; //display to right
LCD_Comm();
return 1;
}
int LCD_SendData(unsigned char data_Send)
{
dataport = data_Send;
LCD_Data();
return 1;
}
int LCD_Comm()
{
commport &= ~(1<<rs); // set rs = 0; for command register
commport &= ~(1<<rw); // set rw = 0
commport |= (1<<en); // set en = 1
_delay_ms(10);
commport &= ~(1<<en); // set en = 0
_delay_ms(200);
return 1;
}
int LCD_Data()
{
commport |= (1<<rs); // set rs = 1
commport &= ~(1<<rw); // set rw = 0
commport |= (1<<en); // set en = 1
_delay_ms(10);
commport &= ~(1<<en); // set en = 0
_delay_ms(200);
return 1;
}أنا أضفت the proteus file for this code
شكرا