资源简介

微机接口课设Proteus 8086汽车控制系统福利,工程项目 + 电路图 + C语言源代码!
摘要为什么要大于50字?

资源截图

代码片段和文件信息

// 8255芯片1的I/O端口地址,并口
#define IOCON 8006H
#define IOA     8000H
#define IOB     8002H

// 8255芯片2的I/O端口地址,并口
#define IOCON2  90C0H
#define IOA2    9000H
#define IOB2    9040H

// 0809芯片的I/O端口地址,AD数模转换
#define AD0809 0E002H

// 档位
#define  STOP     0xfb
#define  BACK     0xfd
#define  SLOW     0xfe
#define  MID      0xf7
#define  FAST     0xef

unsigned char tableNum[10]={0xc00xf90xa40xb00x990x920x820xf80x800x90}; // 0 1 2 ... 9

unsigned char table1[8]={0x020x060x040x0c0x080x090x010x03}; // 八个方向,顺时针,相隔 45°
unsigned char table2[8]={0x030x010x090x080x0c0x040x060x02};

void outp(unsigned int addr char data)
// Write a byte to the specified I/O port
 { __asm
    { mov dx addr
      mov al data
      out dx al
    }
 }

char inp(unsigned int addr)
// Read a byte from the specified I/O port
{ char result;
   __asm
    { mov dx addr
      in al dx
      mov result al
    }
   return result;
}

 // 由档位和油门决定速度(delay的长短)
unsigned int speedAndDelay(unsigned char gear unsigned char digital) 
{
unsigned int accelerator = (unsigned int)digital;
unsigned int delay = 0;
unsigned int speed = 0;
if(gear==SLOW)
{
delay = accelerator/4 + 150;       //速度越慢,delay时间越长
if(accelerator<64)       speed=4;
else if(accelerator<128) speed=3;
else if(accelerator<192) speed=2;
else                     speed=1;
}
else if(gear==MID)
{
delay = accelerator/4 + 50;
if(accelerator<64)       speed=7;
else if(accelerator<128) speed=6;
else if(accelerator<192) speed=5;
else                     speed=4;
}
else if(gear==FAST)
{
delay = accelerator/4 + 10;
if(accelerator<64)       speed=9;
else if(accelerator<128) speed=8;
else if(accelerator<192) speed=7;
else                     speed=6;
}
else if(gear==BACK)
{
delay = 200;
speed = 2;              // 倒车恒速
}
for(unsigned int i=0; i {
}
return speed;
}

void print(unsigned int speed)
{
outp(IOA2 tableNum[speed]); 
outp(IOB2 0x08);
}


void main(void)
{
unsigned char digital;   // 转换成的数字信号
unsigned char gear=0;    // 汽车的档位
    outp(IOCON0x90);
outp(IOCON2 0x80);

    while(1)
    {
        gear=inp(IOA);

        if(gear==BACK)  // 倒车
{
while(1)
{
        
for(int indx=0;indx<8;indx++)
{
outp(IOBtable2[indx]);
for(int i=0;i<3;++i)   // 读三次
{
gear=inp(IOA);
}
                    if(gear==SLOW||gear==STOP||gear==MID||gear==FAST)
break; 

outp(AD08090);
digital=inp(AD0809);
unsigned int speed = speedAndDelay(BACK digital);

print(speed);

}
if(gear==SLOW||gear==STOP||gear==MID||gear==FAST)
break;
}
        }
if(gear==SLOW)  // 前进 1 
{
while(1)
{
for(int indx=0;indx<8;indx++)
{
outp(IOBtable1[indx]);
for(int i=0;i<3;++i)   // 读三次
{
gear=inp(IOA);
}
if(gear==B

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4422  2016-01-19 16:20  8086\main.c
     文件       45330  2016-01-19 12:53  汽车控制高级系统——电路图.PDF
     目录           0  2016-01-08 10:35  8086\
     目录           0  2016-01-08 17:49  8086\Debug\
     文件        3972  2016-01-19 12:24  8086\Debug\Debug.exe
     文件        1181  2016-01-19 12:24  8086\Debug\Makefile
     文件        2723  2016-01-19 12:24  8086\Debug\main.obj
     文件         190  2016-01-08 10:58  8086\Debug\rtl.obj
     文件         559  2016-01-08 09:48  8086\rtl.asm
     文件       32585  2016-01-19 12:56  汽车控制高级系统.pdsprj

评论

共有 条评论