#include "16f84a.h"
#fuses HS,NOWDT,PUT,PROTECT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#define UP input(PIN_A0)
#define DOWN input(PIN_A1)
#define RIGHT input(PIN_A2)
#define LEFT input(PIN_A3)
#define INICIO input(PIN_A4)
void recoger(void)
{
output_b(0b10000);
delay_ms(2000);
}
void subir(short relay)
{
output_b(0b0001 | (relay<<4));
while(UP) delay_ms(5);
delay_ms(100);
}
void bajar(short relay)
{
output_b(0b0010 | (relay<<4));
while(DOWN) delay_ms(5);
delay_ms(100);
}
void soltar(void)
{
output_b(0);
delay_ms(2000);
}
void derecha(short relay)
{
output_b(0b0100 | (relay<<4));
while(RIGHT) delay_ms(5);
delay_ms(100);
}
void izquierda(short relay)
{
output_b(0b1000 | (relay<<4));
while(LEFT) delay_ms(5);
delay_ms(100);
}
void regresar(void)
{
subir(0);
izquierda(0);
output_b(0);
}
void main(void)
{
output_b(0);
set_tris_a(0x1F);
set_tris_b(0);
regresar();
while(1)
{
if (!INICIO)
{
bajar(0);
recoger();
subir(1);
derecha(1);
bajar(1);
soltar();
regresar();
}
}
}
lunes, 7 de abril de 2008
Brazo con dos motores DC
ah! trucho ejemplo...
mi primer ejemplo con LCD
ejemplo #1 : las rutinas son por tiempo, y simulado en Proteus 6.9
#define F_CPU 1000000UL
#include
#include
#include
void retardo(int tiempo)
{
while(--tiempo)
_delay_ms(1);
}
#define RS (1)
#define RW (2)
#define EN (4)
void lcd_chr(char dato)
{
PORTB = RS;
PORTA=dato;
PORTB = EN;
PORTB &= ~EN;
//listo?
_delay_us(80);
}
void lcd_cmd(char dato)
{
PORTB &= ~RS;
PORTA=dato;
PORTB = EN;
PORTB &= ~EN;
//listo?
_delay_us(80);
}
#define lcd_clear() {lcd_cmd(1);retardo(5);}
void lcd_init(void)
{
PORTA=0;
PORTB=0;
DDRB = 0b00000111;
DDRA = 0xFF;
retardo(5);
lcd_cmd(0x30);
retardo(5);
lcd_cmd(0x30);
retardo(5);
lcd_cmd(0x38);
lcd_cmd(0x0F);
lcd_clear();
}
void lcd_print(const prog_char *cadena)
{
while(pgm_read_byte(cadena))
lcd_chr(pgm_read_byte(cadena++));
}
int main (void)
{
lcd_init();
lcd_print(PSTR("Hola Mundo"));
lcd_cmd(0xc0);
lcd_print(PSTR("Como están"));
while(1);
}
Suscribirse a:
Comentarios (Atom)
