资源简介
微机接口课设Proteus 8086汽车控制系统福利,工程项目 + 电路图 + C语言源代码!
摘要为什么要大于50字?
摘要为什么要大于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
评论
共有 条评论