Red de conocimiento informático - Conocimiento sistemático - Solicite el programa de automóvil inteligente de Freescale

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

* 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>

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();

}

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();

p>

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?