基于单片机的红外遥控小车设计 下载本文

沈阳理工大学课程设计说明书

4 系统软件设计

4.1 程序代码

#include {

#include #define uint unsigned int #define uchar unsigned char sbit RS=P2^0; sbit RW=P2^1; sbit E =P2^2; sbit ENA=P2^7; sbit ENB=P3^0; sbit IN1 = P2^3; sbit IN2 = P2^4; sbit IN3 = P2^5; sbit IN4 = P2^6; uchar cycle=100; uchar speed=80;

uchar code tab[] =\初始化 uchar code tab0[]=\初始化 uchar code tab1[]=\前进 uchar code tab2[]=\后退 uchar code tab3[]=\左转 uchar code tab4[]=\右转 uchar code tab5[]=\ Stop\ void Delay(uint t) //延时函数

{ int i,j;

for(i=110;i>0;i--) for(j=t;j>0;j--);

}

void t0(void) interrupt 1

14

if(cycle>100) cycle=0; if(speed

ENA=ENB=1;

cycle++;

}

void lcd_wcmd(uchar cmd) //写指令{ RS=0; RW=0; E=0; Delay(5); E=1;

P0=cmd; Delay(5); E=0; }

void lcd_wdat(uchar dat) //写数据 { RS=1; RW=0; E=0; Delay(5);

E=1; P0=dat; Delay(5);

沈阳理工大学课程设计论文说明书

E=0; }

} while(1)

void lcd_init() //LCD初始化

{ lcd_wcmd(0x38); //8位总线,

双行显示 Delay(1);

lcd_wcmd(0x01); //清屏 Delay(1);

lcd_wcmd(0x06); //数据读写屏 幕画面不动

Delay(1);

lcd_wcmd(0x0c); //开显示,无光 标,不闪烁

Delay(1);

}

void main() //主函数 { int i; EA=1; ET0=1; TMOD=0X02;

TH0=0XA3; TL0=0XA3; TR0=1;

lcd_init(); //初始化液晶 Delay(5); P1=0XFF;

lcd_wcmd(0x80); //第一行内容 for(i=0;i<16;i++) { lcd_wdat(tab0[i]); } lcd_wcmd(0xC0); //第二行内容 i=0;

while(tab[i]!='\\0') { lcd_wdat(tab[i]);

i++;

15

{ i=0;

if(P1==0XFE) //前进 { lcd_wcmd(0x01); //清屏 lcd_wcmd(0x80); //在液晶的第一行写入 for(i=0;i<16;i++) {

lcd_wdat(tab1[i]);//写入的内容 }

lcd_wcmd(0XC0);//第二行 i=0;

for(i=0;i<16;i++) { lcd_wdat(tab[i]); //第二行内容

}

IN1 = 0; //电机转动函数 IN2 = 1; IN3 = 0;

IN4 = 1;

}

if(P1==0XFD) //后退 {

lcd_wcmd(0x01); //清屏 lcd_wcmd(0x80); //在液晶的第一行写入 i=0;

for(i=0;i<16;i++) { lcd_wdat(tab2[i]);//写入的内容

}

lcd_wcmd(0xC0);//第二行

i=0;

沈阳理工大学课程设计论文说明书

}

for(i=0;i<16;i++) { }

IN1 = 1; //电机转动函数 IN2 = 0; IN3 = 1; IN4 = 0;

16

{ }

lcd_wcmd(0xC0);//第二行 for(i=0;i<16;i++) { }

IN1 = 0; //电机转动函数 IN2 = 1; IN3 = 0; IN4 = 0; }

lcd_wdat(tab4[i]);//写入的内容

lcd_wdat(tab[i]); //第二行内容

i=0;

lcd_wdat(tab[i]); //第二行内容

if(P1==0XFB) //左转 { lcd_wcmd(0x01); //清屏 一行写入

lcd_wcmd(0x80); //在液晶的第

i=0;

for(i=0;i<15;i++) { } i=0;

for(i=0;i<16;i++) { }

IN1 = 0; //电机转动函数 IN2 = 0; IN3 = 0; IN4 = 1; }

if(P1==0XEF) //停止 { lcd_wcmd(0x01); //清屏 lcd_wcmd(0x80); //在液晶的第

i=0;

lcd_wdat(tab3[i]);//写入的内容 lcd_wcmd(0x80+0x40);//第二行

一行写入

for(i=0;i<9;i++) { }

lcd_wcmd(0XC0);//第二行

i=0; for(i=0;i<16;i++)

{ lcd_wdat(tab[i]); //第二行 IN2 = 0; IN3 = 0; IN4 = 0;

lcd_wdat(tab5[i]);//写入的内容

lcd_wdat(tab[i]); //第二行内容

内容 } IN1 = 0; //电机转动函数

if(P1==0XF7) //右转 { lcd_wcmd(0x01); //清屏 行写入

_wcmd(0x80); //在液晶的第一

} }

i=0;

for(i=0;i<15;i++)

}

沈阳理工大学课程设计说明书

4.2 软件流程图

图4.1 软件流程图

结 束 结 束 ENA=0 ENA=1 执行相应操作 Y speed>cycle Y N 有按键按下? N Y Cycle=0 N LCD初始化 Cycle>100 定时器初始化 Cycle++ 开 始 开 始 17

沈阳理工大学课程设计说明书

5 调试与仿真

5.1 在keil中进行调试

(1)创建“智能小车”项目,选择单片机型号为AT89C51,汇编源程序,

保存为“智能小车.C”。

(2)将源程序添加到项目中。

(3)打开项目菜单,选择Options for target’target 1’选项,点击output一项,在Create HEX File前打上对勾。

(4)编译源程序,如果有问题,则需要调试修改,若没有错误,则成功创建“智能小车.HEX”文件。

图1.3 编译成功提示图

图5.1 编译成功图

18