Solicite el programa de automóvil inteligente de Freescale
/*
************************************ ** ************************************************* *
* Test.c
* Descripción: Este archivo incluye la función de E/S para prueba, la función de salidas PWM para prueba, la función
* sensores de prueba .
* (c) Copyright 2006, Zhao Cheng
* Todos los derechos reservados
*
* Por: Zhao Cheng p>
* Nota: No cambie este archivo si es posible.
*************************** ** ************************************************* *** ****/
#include
#include
#define HIGHSPEED 8000
#define LOSPEED 11000 /* Variable de velocidad, 0-24000 Cuanto mayor sea el valor, más lenta será la velocidad*/
void PWMout(int, int);
/* 24000-20000 * /
void IOtest(void)
{
carácter estático sin firmar i=0,j=0x01,k;
DDRB = DDRA = 0xFF;
PORTB = 0xf0;
for(;;)
{
k=(~j)&0x7f;
PORTA = PORTB = k;
mientras (TCNT != 0x0000);
mientras (TCNT == 0x0000)
{
si(i>9)
{
j=j<<1;
i=0;
}
i++;
}
si(j>=0x80)
j=0x01;
}
}
void PWMtest(void)
{
int contador= -4500;
DDRB = 0xff;
PORTB = 0xff;
TSCR1 = 0x80; /* habilitar temporizador TCNT */
TSCR2 = 0x00; /* Configuración del preescalador TCNT */
for(;;)
{
mientras (TCNT != 0x0000);
mientras (TCNT == 0x0000);
contador=contador+30;
if(contador >= 3000)
{
contador = 0;
PWMout(4500, BAJA VELOCIDAD);
}
if(co
unter == 1500)
{
PWMout(-4500, LOWSPEED);
}
PORTB = (char)(contador /100);
}
}
void SignalTest(void)
{
señal de carácter sin firmar ;
int Dirección, Velocidad;
Dirección = 0;
Velocidad = BAJA VELOCIDAD;
DDRA = 0x00;
DDRB = 0xff;
señal = PORTA;
PORTB = ~señal;
interruptor(señal)
{
caso 0x08: /* 0001 1000 */
caso 0x10:
Dirección = 800;
Velocidad = ALTA VELOCIDAD;
descanso;
caso 0x04: /* 0010 0100 */
caso 0x20:
Dirección = 1500;
Velocidad = ALTA VELOCIDAD;
rotura;
caso 0x02: /* 0100 0010 */
caso 0x40:
Dirección = 2800;
Velocidad = ALTA VELOCIDAD;
romper;
caso 0x01: /* 1000 0001 */
caso 0x80:
Dirección = 4000;
Velocidad = LOWSPEED;
descanso;
caso 0x3c: /* 0011 1100 sobre la línea de salida */
caso 0xff: /* 1111 1111 cruzando la línea */
caso 0x00: /* 0000 0000 sigue recto, no es necesario cambiar el estado */
predeterminado:
romper;
}
if(señal > 0x0f)
Dirección = -Dirección;
PWMout(Dirección, BAJA VELOCIDAD );
}
/*
************************ ************************************************** * *********
* LCD1620.c
* Creador de aplicaciones ICC-AVR: 2006-1-8 21:43:48
* Objetivo: M8
* Cristal: 4.0000Mhz
*
* Nota: No cambie este archivo si es posible.
************************************************ *************************************/<
/p>
#define CMD_CLEAR 0x01
#define CMD_RESET 0x02
#include
#include
#define LCD_DATA 0xff
#define LCD_EN 0x01 //PORTC 0
#define LCD_RS 0x02 //PORTC 1
#define LCD_RW 0x04 //PORTC 2
#define LCD_DATAPORT PORTB
#define LCD_ENPORT PORTA
#define LCD_RSPORT PORTA
#define LCD_RWPORT PORTA
void lcd_init(void);
void lcd_write_cmd(cmd sin firmar,datos sin firmar);
void lcd_setxy(carácter x sin firmar,carácter y sin firmar); p>
p>
void lcd_write_string(carácter sin firmar);
void lcd_init(void)
{
DDRB |= LCD_DATA;
DDRA |= LCD_EN | LCD_RS | LCD_RW;
LCD_RWPORT&=~LCD_RW;
LCD_DATAPORT=0x30; 16x2, 3: 5x7
LCD_ENPORT|= LCD_EN;
delay_nus(1);
LCD_ENPORT&=~LCD_EN;
delay_nus( 40);
lcd_write_cmd(0,0x38 ); //Prueba de 8 bits
lcd_write_cmd(0,0x0c); //Mostrar en
lcd_write_cmd(0, 0x01); //Mostrar pantalla clara
lcd_write_cmd(0,0x06); //Mostrar configuración de movimiento del cursor
}
void lcd_write_cmd(unsigned cmd,unsigned datos)
{
if(cmd==0)
LCD_RSPORT&=~LCD_RS;
else
LCD_RSPORT|=LCD_RS;
LCD_DATAPORT&= 0x00;
LCD_DATAPORT=datos;
LCD_ENPORT|=LCD_EN;
delay_nus(10 );
LCD_ENPORT&=~LCD_EN;
delay_nus(10);
}
void lcd_setxy(carácter x sin firmar, carbón sin firmar y)
{
sin firmar
char addr;
si(y==0)
addr=x+0x80;
else
addr=x+0xc0 ;
lcd_write_cmd(0,addr);
}
void lcd_write_string(carácter X sin firmar, carácter Y sin firmar, carácter sin firmar *cadena)
{
lcd_setxy(X,Y);
mientras(*str)
{
lcd_write_cmd(1,* str);
str++;
}
}
void delay_1us(void) //función de retardo 1us
{
asm("nop");
}
void delay_nus(unsigned int n) //N us función de retardo
{
unsigned int i=0;
for (i=0;i delay_1us(); p> } void delay_1ms(void) //Función de retraso de 1 ms { unsigned int i; for (i =0;i<1140;i++); } void delay_nms(unsigned int n) //Función de retardo de N ms { unsigned int i=0; for (i=0;i delay_1ms(); } //llama a esta rutina para inicializar todos los periféricos void main(void) { lcd_init(); while(1) { lcd_write_cmd(0,0x01); //Borrar pantalla delay_nms(2); lcd_write_string(0,0,"feliz año nuevo"); delay_nms(100); lcd_write_string(0,1,"LCD exitoso!"); delay_nms(100); } } /***************** * **************** Fin del programa****************************** **** */ ¿Cómo?