Wyświetlacz LCD – SMS

Wyświetlacz LCD – SMS

Program: wyświetlający znaki po wciśnięciu guzika.

Kolejne litery są tak długo podawane aż użytkownik zdecyduje się na daną, po czym następuje przejście do kolejnej komórki i proces jest powtarzany.

Kompilator: Code::Blocks

Kod programu:

#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
#include <stdio.h>
void wysChar(char c)
{
	PORTD = c>>4;
	_delay_ms(1);
	PORTA = 0x03;
	_delay_ms(1);
	PORTA = 0x02;
	_delay_ms(1);
	PORTD = c;
	_delay_ms(1);
	PORTA = 0x03;
	_delay_ms(1);
	PORTA = 0x02;
	_delay_ms(1);
}
void wysString(const char * text)
{
	for(int i = 0; i < strlen(text); i = i + 1)
	{
		if(i == 16)
		{
			PORTD = 0x0C;
			_delay_ms(1);
			PORTA = 0x01;
			_delay_ms(1);
			PORTA = 0x00;
			_delay_ms(1);
			PORTD = 0x00;
			_delay_ms(1);
			PORTA = 0x01;
			_delay_ms(1);
			PORTA = 0x00;
			_delay_ms(1);
		}
		wysChar(text[i]);
	}
}
void wysInt(int x){
	char buffer [32];
	itoa (x,buffer,10);
	wysString(buffer);
}
void wysDouble(double x){
	char buffer [32];
	dtostrf (x,1,3,buffer);
	wysString(buffer);
}

void main() {

_delay_ms(100);
DDRB = 0x00;
PORTB=0xFF;
DDRD = 0xff;
DDRA = 0xff;
PORTD = 0x03;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x03;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x03;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x02;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x02;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x08;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x00;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x01;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x00;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x06;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x00;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
PORTD = 0x0f;
_delay_ms(100);
PORTA = 0x01;
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
int h=0;
char x[32];
for (int i= 0;i<32;i=i+1)
	x[i]=' ';
x[0]='a'-1;
while(1){
while(1){
	if (!(PINB & 0x01)&&h==0)
	{
	 	h=1;
		if(x=='z')
			x[0]='a'-1;
		else
			x[0]=x[0]+1;	
	}
	else
	{	
		break;
	}}
    if((PINB & 0x01)&&h==1){
	PORTD = 0x00;
	_delay_ms(1);
	PORTA = 0x01;
	_delay_ms(1);
	PORTA = 0x00;
	_delay_ms(1);
	PORTD = 0x01;
	_delay_ms(1);
	PORTA = 0x01;
	_delay_ms(1);
	PORTA = 0x00;
	_delay_ms(1);
	wysString(x);
	h=0;
	}		
}
}