沈阳理工大学课程设计说明书
4 系统软件设计
4.1 程序代码
#include
#include
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