03年全国大学生电子设计竞赛智能小车资料mega16

作者: 佚名   发布日期:2006-03-12 15:22   查看数:7   出自:互联网
这是网友提供的03年全国大学生电子设计竞赛智能小车资料,所谓的资料也就源代码。但是代码风格不错。希望大家能更加代码推出硬件电路图。


/*********************************************
This program was produced by the
CodeWizardAVR V1.23.8d Standard
Automatic Program Generator
?Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro

Project :
Version :
Date : 2005-7-26
Author : jack
Company :
Comments:


Chip type : ATmega16
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/

#include <stdio.h>
#include <mega16.h>
#define uchar unsigned char
#define uint unsigned int
#define GXM12864_KS0108_ID PORTC.7
#define GXM12864_KS0108_E PORTC.0
#define GXM12864_KS0108_CSA PORTC.6
#define GXM12864_KS0108_CSB PORTC.1


char flash *p_to_flash;
uchar j,n,m,k,t,e,o,p,q,b;
uint i,u,distance,time_now,number,temp;
bit s=0,a,c;
uint distance_fe[4]={0,0,0,0};

flash uchar X0[]={/*-- 文字: 0 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
flash uchar X1[]={/*-- 文字: 1 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
flash uchar X2[]={/*-- 文字: 2 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};
flash uchar X3[]={/*-- 文字: 3 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};
flash uchar X4[]={/*-- 文字: 4 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};
flash uchar X5[]={/*-- 文字: 5 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};
flash uchar X6[]={/*-- 文字: 6 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};
flash uchar X7[]={/*-- 文字: 7 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};
flash uchar X8[]={/*-- 文字: 8 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};
flash uchar X9[]={/*-- 文字: 9 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};
flash uchar X27[]={/*-- 文字: ! --*/0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00};
flash uchar X28[]={/*-- 文字: : --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
flash uchar X21[]={/*-- 文字: , --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00};

flash uchar X10[] = {/*-- 文字: 河,宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x01,0xC6,0x30,0x02,0xE2,0x22,0x22,0xE2,0x02,0x02,0xFE,0x02,0x02,0x00,0x04,0x04,0xFF,0x00,0x00,0x00,0x07,0x02,0x02,0x07,0x40,0x80,0x7F,0x00,0x00,0x00};
flash uchar X11[] = {/*-- 文字: 海;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x01,0xF6,0x00,0x10,0xF8,0x17,0x34,0x54,0x14,0x14,0xF4,0x04,0x04,0x00,0x04,0x04,0xFF,0x00,0x01,0x01,0x1F,0x11,0x13,0x15,0x51,0x91,0x7F,0x11,0x11,0x00};
flash uchar X12[] = {/*-- 文字: 大;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00};
flash uchar X13[] = {/*-- 文字: 学;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00};
flash uchar X14[] = {/*-- 文字: 常;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x18,0x08,0x09,0xEE,0xAA,0xA8,0xAF,0xA8,0xA8,0xEC,0x0B,0x2A,0x18,0x08,0x00,0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00};
flash uchar X15[] = {/*-- 文字: 州;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xE0,0x00,0x00,0xFF,0x20,0xC0,0x00,0xFE,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,0x01,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x00,0xFF,0x00,0x00};
flash uchar X16[] = {/*-- 文字: 校;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x88,0x68,0xFF,0x28,0x48,0x00,0x88,0x68,0x09,0x0E,0x08,0xA8,0x48,0x88,0x00,0x02,0x01,0x00,0xFF,0x00,0x40,0x42,0x21,0x26,0x18,0x18,0x26,0x61,0xC0,0x40,0x00};
flash uchar X17[] = {/*-- 文字: 区;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x02,0x12,0x22,0x22,0x42,0x82,0x62,0x1E,0x0A,0x02,0x02,0x00,0x00,0x00,0x3F,0x20,0x30,0x28,0x24,0x22,0x21,0x20,0x21,0x26,0x3C,0x28,0x20,0x00,0x00};
flash uchar X18[] = {/*-- 文字: 欢;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00};
flash uchar X19[] = {/*-- 文字: 迎;宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00};
flash uchar X20[] = {/*-- 文字: 您;此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x40,0x30,0xFC,0x03,0x90,0x68,0x06,0x04,0xF4,0x04,0x24,0x44,0x8C,0x04,0x00,0x00,0x20,0x38,0x03,0x38,0x40,0x40,0x49,0x52,0x41,0x40,0x70,0x00,0x09,0x30,0x00};
flash uchar X23[]={/*-- 文字: 时;此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00};
flash uchar X24[]={/*-- 文字: 间;此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00};
flash uchar X25[] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*全黑*/
flash uchar X26[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; /*全白*/
flash uchar X29[] = {
/*-- 文字: 行 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00};
flash uchar X30[] = {
/*-- 文字: 车 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x84,0xC4,0xA4,0x9C,0x87,0x84,0xF4,0x84,0x84,0x84,0x84,0x84,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00};
flash uchar X31[] = {
/*-- 文字: 驶 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xFA,0x82,0x82,0xFE,0x80,0x80,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00,0x00,0x08,0x08,0x08,0x44,0x84,0x40,0x3F,0x42,0x24,0x18,0x17,0x20,0x60,0xC0,0x40,0x00};
flash uchar X32[] = {
/*-- 文字: 路 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x7E,0x22,0xE2,0x3E,0x20,0x10,0x08,0x0F,0xB4,0x44,0xA4,0x9C,0x04,0x00,0x00,0x20,0x3F,0x20,0x1F,0x11,0x11,0x02,0x7F,0x23,0x22,0x22,0x22,0x7E,0x03,0x01,0x00};
flash uchar X33[] = {
/*-- 文字: 程 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00};
flash uchar X34[] = {
/*-- 文字: 厘 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x02,0xFA,0x2A,0x2A,0x2A,0xFA,0x2A,0x2A,0x2A,0xFA,0x02,0x02,0x00,0x60,0x1C,0x43,0x40,0x4B,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x00};
flash uchar X35[] = {
/*-- 文字: 米 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x22,0x24,0x38,0xE0,0x20,0xFF,0x60,0xA0,0x30,0x28,0x26,0x20,0x20,0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0xFF,0x00,0x01,0x06,0x08,0x18,0x30,0x10,0x00};
flash uchar X36[] = {
/*-- 文字: 秒 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00};
flash uchar X37[] = {
/*-- 文字: 检 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x88,0x68,0xFF,0x28,0x48,0x10,0x48,0x44,0x43,0x44,0x48,0x50,0x10,0x10,0x00,0x02,0x01,0x00,0x7F,0x00,0x20,0x22,0x2C,0x21,0x2E,0x30,0x28,0x27,0x22,0x20,0x00};
flash uchar X38[] = {
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00};
flash uchar X39[] = {
/*-- 文字: 铁 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x30,0x2C,0xEB,0x28,0x08,0xC0,0xBC,0x90,0x90,0xFF,0x90,0x90,0x90,0x80,0x00,0x01,0x01,0x01,0x7F,0x21,0x51,0x48,0x20,0x10,0x0C,0x03,0x0C,0x30,0x60,0x20,0x00};
flash uchar X40[] = {
/*-- 文字: 片 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00,0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00};
flash uchar X41[] = {
/*-- 文字: 数 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00};
flash uchar X42[] = {
/*-- 文字: 块 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0xFF,0x10,0x10,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x08,0x18,0x0F,0x04,0x85,0x41,0x31,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00};
flash uchar X43[] = {
/*-- 文字: 距 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,0x40,0x7F,0x20,0x3F,0x11,0x11,0x00,0x7F,0x42,0x42,0x42,0x42,0x42,0x43,0x40,0x00};
flash uchar X44[] = {
/*-- 文字: 离 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x04,0xF4,0x84,0xCC,0xAD,0x96,0x94,0xAC,0xCC,0x84,0xF4,0x06,0x04,0x00,0x00,0x00,0xFE,0x02,0x1A,0x16,0x12,0x13,0x12,0x16,0x1A,0x72,0x82,0x7E,0x00,0x00};

void delay(uint n)//延时
{
for (i=0;i<n;i++)//执行n次延时
for (j=0;j<200;j++){}
}

// External Interrupt 2 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(c==0)
{
PORTB.7=1;
distance_fe[t]=distance;
t++;
delay(10);
PORTB.7=0;
}
a=!a;
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xed;
if(b==1)
{
s=0;
if(k>4)
{k=0;s=1;}
k++;
PORTD.7=s;
}
if(b==2)
{
s=0;
if(k>2)
{k=0;s=1;}
k++;
PORTD.7=s;
}
if(b==3)
{
s=1;
if(k>2)
{k=0;s=0;}
k++;
PORTD.7=s;
}
if(e==200)
{
e=0;
time_now++;
number=TCNT1;
distance=(number/4)*12;
}
e++;
}

void nop(void)//延时
{for (j=0;j<5;j++){}}

void LCD_C_D(uchar flag,uchar l) //写命令数据flag=1 common flag=0
{
GXM12864_KS0108_ID=0 ;//控制引脚赋值,准备读状态
nop();nop(); //等待
GXM12864_KS0108_ID=!flag;
PORTA=l; //写命令
GXM12864_KS0108_E=1;//读入数据允许
nop(); //延时
GXM12864_KS0108_E=0;//数据锁定
}

void dis_one_zi(uchar x_add,uchar y_add,char flash *po_to_flash) //写一个字
{
uchar i,j,w;
j=x_add*2+0xb8;
w=(y_add<4?y_add:y_add-4)*16+0x40; //左右半屏判断
GXM12864_KS0108_CSA=(y_add<4);
GXM12864_KS0108_CSB=!(y_add<4);
LCD_C_D(1,j);
LCD_C_D(1,w);
for(i=0;i<32;i++)//循环显示内容
{
if(i==16)
{
LCD_C_D(1,j+1);
LCD_C_D(1,w);
}
LCD_C_D(0,*po_to_flash++);
}
GXM12864_KS0108_CSA=GXM12864_KS0108_CSB=0;
}


void dis_one_ban_zi(uchar x_add,uchar y_add,uchar k_add,char flash *po_to_flash) //写数字K=0,显示前半个字
{
uchar i,j,w,e;
if(k_add==0){e=0;}
if(k_add==1){e=8;}
j=x_add*2+0xb8;
w=(y_add<4?y_add:y_add-4)*16+0x40; //左右半屏判断
GXM12864_KS0108_CSA=(y_add<4);
GXM12864_KS0108_CSB=!(y_add<4);
LCD_C_D(1,j);
LCD_C_D(1,w+e);
for(i=0;i<16;i++)//循环显示内容
{
if(i==8)
{
LCD_C_D(1,j+1);
LCD_C_D(1,w+e);
}
LCD_C_D(0,*po_to_flash++);
}
GXM12864_KS0108_CSA=GXM12864_KS0108_CSB=0;
}


void CLRLCD(void) //清屏
{
p_to_flash=X26;
for(n=0;n<4;n++){
for(m=0;m<8;m++)
{dis_one_zi(n,m,p_to_flash);}}
}

void GXM12864_KS0108_int(void) //显示屏初始化
{
GXM12864_KS0108_CSA=1;GXM12864_KS0108_CSB=0;
LCD_C_D(1,0x3f); // 左半屏
GXM12864_KS0108_CSA=0;GXM12864_KS0108_CSB=1;
LCD_C_D(1,0X3f); // 右半屏
//控制显示开
GXM12864_KS0108_CSA=1;GXM12864_KS0108_CSB=0;
LCD_C_D(1,0Xc0); // 左半屏
GXM12864_KS0108_CSA=0;GXM12864_KS0108_CSB=1;
LCD_C_D(1,0Xc0); // 右半屏
// 写起始行
GXM12864_KS0108_CSA=1;GXM12864_KS0108_CSB=0;
LCD_C_D(1,0X0b8); // 左半屏
GXM12864_KS0108_CSA=0;GXM12864_KS0108_CSB=1;
LCD_C_D(1,0X0b8); // 右半屏
//设置页地址
GXM12864_KS0108_CSA=1;GXM12864_KS0108_CSB=0;
LCD_C_D(1,0X40); // 左半屏
GXM12864_KS0108_CSA=0;GXM12864_KS0108_CSB=1;
LCD_C_D(1,0X40); // 右半屏
//设置y地址指针
CLRLCD();//清屏
}

void switch_p(uchar i) //指针赋值
{
switch(i)
{
case 0:{p_to_flash=X0;}break;
case 1:{p_to_flash=X1;}break;
case 2:{p_to_flash=X2;}break;
case 3:{p_to_flash=X3;}break;
case 4:{p_to_flash=X4;}break;
case 5:{p_to_flash=X5;}break;
case 6:{p_to_flash=X6;}break;
case 7:{p_to_flash=X7;}break;
case 8:{p_to_flash=X8;}break;
case 9:{p_to_flash=X9;}break;
}
}

void display_frist(void)
{

GXM12864_KS0108_int(); //液晶初始化

p_to_flash=X10; dis_one_zi(0,0,p_to_flash); //河海大学常州校区
p_to_flash=X11; dis_one_zi(0,2,p_to_flash);
p_to_flash=X12; dis_one_zi(0,4,p_to_flash);
p_to_flash=X13; dis_one_zi(0,6,p_to_flash);
delay(200);
p_to_flash=X14; dis_one_zi(1,4,p_to_flash);
p_to_flash=X15; dis_one_zi(1,5,p_to_flash);
p_to_flash=X16; dis_one_zi(1,6,p_to_flash);
p_to_flash=X17; dis_one_zi(1,7,p_to_flash);

for(n=0;n<5;n++)
{
PORTB.7=1;
p_to_flash=X18; dis_one_zi(3,2,p_to_flash); //欢迎您!
p_to_flash=X19; dis_one_zi(3,3,p_to_flash);
p_to_flash=X20; dis_one_zi(3,4,p_to_flash);
p_to_flash=X27; dis_one_ban_zi(3,5,0,p_to_flash);
delay(200);delay(200);
PORTB.7=0;
p_to_flash=X26; dis_one_zi(3,2,p_to_flash); //清除欢迎您!
p_to_flash=X26; dis_one_zi(3,3,p_to_flash);
p_to_flash=X26; dis_one_zi(3,4,p_to_flash);
p_to_flash=X26; dis_one_zi(3,5,p_to_flash);
delay(200);delay(200);
}

p_to_flash=X25; //黑屏
for(n=0;n<4;n++){
for(m=0;m<8;m++)
{dis_one_zi(n,m,p_to_flash);}}
delay(20);
CLRLCD(); //清屏
}

void display_second_st()
{
p_to_flash=X29; dis_one_zi(0,0,p_to_flash); //行车时间:*秒
p_to_flash=X30; dis_one_zi(0,1,p_to_flash);
p_to_flash=X23; dis_one_zi(0,2,p_to_flash);
p_to_flash=X24; dis_one_zi(0,3,p_to_flash);
p_to_flash=X28; dis_one_ban_zi(0,4,0,p_to_flash);
p_to_flash=X36; dis_one_zi(0,7,p_to_flash);

p_to_flash=X29; dis_one_zi(1,0,p_to_flash); //行驶路程:*厘米
p_to_flash=X31; dis_one_zi(1,1,p_to_flash);
p_to_flash=X32; dis_one_zi(1,2,p_to_flash);
p_to_flash=X33; dis_one_zi(1,3,p_to_flash);
p_to_flash=X28; dis_one_ban_zi(0,4,0,p_to_flash);
p_to_flash=X34; dis_one_zi(1,6,p_to_flash);
p_to_flash=X35; dis_one_zi(1,7,p_to_flash);

p_to_flash=X37; dis_one_zi(2,0,p_to_flash); //检测铁片数:*块
p_to_flash=X38; dis_one_zi(2,1,p_to_flash);
p_to_flash=X39; dis_one_zi(2,2,p_to_flash);
p_to_flash=X40; dis_one_zi(2,3,p_to_flash);
p_to_flash=X41; dis_one_zi(2,4,p_to_flash);
p_to_flash=X28; dis_one_ban_zi(2,5,0,p_to_flash);
p_to_flash=X42; dis_one_zi(2,7,p_to_flash);

p_to_flash=X43; dis_one_zi(3,0,p_to_flash); //距离:
p_to_flash=X44; dis_one_zi(3,1,p_to_flash);
p_to_flash=X28; dis_one_ban_zi(3,2,0,p_to_flash);
p_to_flash=X21; dis_one_ban_zi(3,4,0,p_to_flash);
p_to_flash=X21; dis_one_ban_zi(3,6,0,p_to_flash);
}

void display_second()
{
o=time_now/10;p=time_now-(10*o);
switch_p(o); dis_one_ban_zi(0,5,0,p_to_flash);
switch_p(p); dis_one_ban_zi(0,5,1,p_to_flash);

o=distance/100;p=(distance-(100*o))/10;q=distance%10;
switch_p(o); dis_one_ban_zi(1,4,1,p_to_flash);
switch_p(p); dis_one_ban_zi(1,5,0,p_to_flash);
switch_p(q); dis_one_ban_zi(1,5,1,p_to_flash);

switch_p(t); dis_one_ban_zi(2,6,0,p_to_flash);

o=distance_fe[0]/100;p=(distance_fe[0]-(100*o))/10;q=distance_fe[0]%10;
switch_p(o); dis_one_ban_zi(3,2,1,p_to_flash);
switch_p(p); dis_one_ban_zi(3,3,0,p_to_flash);
switch_p(q); dis_one_ban_zi(3,3,1,p_to_flash);
o=distance_fe[1]/100;p=(distance_fe[1]-(100*o))/10;q=distance_fe[1]%10;
switch_p(o); dis_one_ban_zi(3,4,1,p_to_flash);
switch_p(p); dis_one_ban_zi(3,5,0,p_to_flash);
switch_p(q); dis_one_ban_zi(3,5,1,p_to_flash);
o=distance_fe[2]/100;p=(distance_fe[2]-(100*o))/10;q=distance_fe[2]%10;
switch_p(o); dis_one_ban_zi(3,6,1,p_to_flash);
switch_p(p); dis_one_ban_zi(3,7,0,p_to_flash);
switch_p(q); dis_one_ban_zi(3,7,1,p_to_flash);


}
void car_stop(void)
{
b=0;
PORTD.6=0;
PORTD.7=0;
PORTD.4=0;
PORTD.5=0;
display_second();
}
void car_stop_c(void)
{
b=0;
PORTD.6=0;
PORTD.7=0;
PORTD.4=0;
PORTD.5=0;
temp=time_now;
for(u=0;u<5;u++)
{
PORTB.7=1;
delay(200);delay(200);
PORTB.7=0;
delay(200);delay(200);
display_second();
} //蜂鸣器开。蜂鸣器关
//do{display_second();}
//while(time_now>temp+5);
}

void pwm_moto2_back(void)
{
b=3;
PORTD.6=0;
}

void pwm_moto2_go(void)
{
b=1;
PORTD.6=1;
}

void pwm_moto2_godown(void)
{
b=2;
PORTD.6=1;
}

void direction_moto1(void)
{
if(PINB.2==1){PORTD.4=0;PORTD.5=1;}
if(PINB.3==1){PORTD.4=0;PORTD.5=1;}
if(PIND.1==1){PORTD.4=1;PORTD.5=0;}
if(PIND.0==1){PORTD.4=1;PORTD.5=0;}
if(PIND.0==0&&PIND.1==0&&PINB.3==0&&PINB.2==0){PORTD.4=0;PORTD.5=0;}
}

void avoid_block(void)
{
for(u=0;u<950;u++)
{
pwm_moto2_go();
PORTD.4=0;PORTD.5=1;//左转
if(PIND.3==0)
{
b=0;PORTD.6=0;
PORTD.4=1;PORTD.5=0;//右转
pwm_moto2_back();
delay(1600);
}
delay(2);
}
for(u=0;u<800;u++)
{
pwm_moto2_go();
PORTD.4=1;PORTD.5=0;
if(PIND.3==0)
{
b=0;PORTD.6=0;
PORTD.4=0;PORTD.5=1;
pwm_moto2_back();
delay(1600);
}
delay(2);
}
}
void search_way(void)
{
PORTD.4=1;PORTD.5=0;
pwm_moto2_godown();
//delay(100);
while(1)
{
if(PINB.0==0)
{
nop();
if(PINB.0==0)
{
PORTD.4=1;PORTD.5=0;delay(40);
//PORTD.4=1;PORTD.5=0;delay(50);
}
}
if(PINB.0==1)
{
nop();
if(PINB.0==1)
{
PORTD.4=0;PORTD.5=1;delay(40);
//PORTD.4=0;PORTD.5=1;delay(50);
}
}
if(PIND.3==0)break;
}
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=Out
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=0
PORTB=0x00;
DDRB=0x80;

// Port C initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=Out Func5=Out Func6=Out Func7=Out
// State0=T State1=T State2=T State3=T State4=0 State5=0 State6=0 State7=0
PORTD=0x00;
DDRD=0xF0;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 31.250 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x04;
TCNT0=0xFB;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: T1 pin Rising Edge
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x07;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;



// Global enable interrupts
#asm("sei")

t=0;e=0;k=0;time_now=0;b=0;c=0;
display_frist();

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

pwm_moto2_go();
display_second_st();

while (1)
{
direction_moto1();
display_second();
if(distance>240&&time_now<90){break;}
};
a=0;c=1;
while(1)
{
if(distance>230||PINB.2==1||PINB.3==1)
{
PORTD.4=0;
PORTD.5=1;
display_second();
if(a==1)break;
}
}
car_stop_c();
avoid_block();
search_way();
car_stop();
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
display_second_st();
display_second();
}


相关文章(最新&最热)