微机原理 之“极品飞车”课程设计
2015-07-27 22:28
330 查看
#include<reg51.h> #define uchar unsigned char #define uint unsigned int #define YAN 1 uchar xdata *q=0xB000; uchar xdata *w=0xB001; uchar xdata *e=0xB002; uchar xdata *r=0xB003; uchar aa,bb,cc; int ff; uchar key; int f1,f2,f3,f4,f5; unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F uchar cord_h; uchar cord_l; uchar xdata *keyin=0x8001; uchar xdata *digit=0x8002; uchar xdata *xians=0x8004; int ss; //车速 int dd; int ff1,ff2; //车速 char code table1[]={ //车辆前进 0x7c,0x3e, 0x79,0x9e, 0x73,0xce, 0x67,0xe6, 0x4f,0xf2, 0x1f,0xf8, 0x3f,0xfc, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe }; char code table2[]={ //车辆后退 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x7f,0xfe, 0x3f,0xfc, 0x1f,0xf8, 0x4f,0xf2, 0x67,0xe6, 0x73,0xce, 0x79,0x9e, 0x7c,0x3e }; char code table3[]={ //车辆左拐 0x00,0x00, 0xff,0x9f, 0xff,0xcf, 0xff,0xe7, 0xff,0xf3, 0xff,0xf9, 0xff,0xfc, 0xff,0xfe, 0xff,0xfe, 0xff,0xfc, 0xff,0xf9, 0xff,0xf3, 0xff,0xe7, 0xff,0xcf, 0xff,0x9f, 0x00,0x00 }; char code table4[]={ //车辆右拐 0x00,0x00, 0xf9,0xff, 0xf3,0xff, 0xe7,0xff, 0xcf,0xff, 0x9f,0xff, 0x3f,0xff, 0x7f,0xff, 0x7f,0xff, 0x3f,0xff, 0x9f,0xff, 0xcf,0xff, 0xe7,0xff, 0xf3,0xff, 0xf9,0xff, 0x00,0x00 }; char code table5[]={ //停车 0xff,0xff, 0xff,0xff, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0xff,0xff, 0xff,0xff }; void delay1(int z) { int x,y; for(x=0;x<z;x++) for(y=0;y<100;y++) { } } void qian() { int num; uchar flag; *e=0x00; flag=0x01; for(num=0;num<=14;num=num+2) { *r=flag; flag=flag<<1; *q=table1[num]; *w=table1[num+1]; delay1(YAN); } *r=0x00; flag=0x01; for(num=16;num<=30;num=num+2) { *e=flag; flag=flag<<1; *q=table1[num]; *w=table1[num+1]; delay1(YAN); } // P3=dd; } void hou() { int num; uchar flag; *e=0x00; flag=0x01; for(num=0;num<=14;num=num+2) { *r=flag; flag=flag<<1; *q=table2[num]; *w=table2[num+1]; delay1(YAN); } *r=0x00; flag=0x01; for(num=16;num<=30;num=num+2) { *e=flag; flag=flag<<1; *q=table2[num]; *w=table2[num+1]; delay1(YAN); } } void ting() { int num; uchar flag; *e=0x00; flag=0x01; for(num=0;num<=14;num=num+2) { *r=flag; flag=flag<<1; *q=table5[num]; *w=table5[num+1]; delay1(YAN); } *r=0x00; flag=0x01; for(num=16;num<=30;num=num+2) { *e=flag; flag=flag<<1; *q=table5[num]; *w=table5[num+1]; delay1(YAN); } } void zuo() { int num; uchar flag; *e=0x00; flag=0x01; for(num=0;num<=14;num=num+2) { *r=flag; flag=flag<<1; *q=table3[num]; *w=table3[num+1]; delay1(YAN); } *r=0x00; flag=0x01; for(num=16;num<=30;num=num+2) { *e=flag; flag=flag<<1; *q=table3[num]; *w=table3[num+1]; delay1(YAN); } } void you() { int num; uchar flag; *e=0x00; flag=0x01; for(num=0;num<=14;num=num+2) { *r=flag; flag=flag<<1; *q=table4[num]; *w=table4[num+1]; delay1(YAN); } *r=0x00; flag=0x01; for(num=16;num<=30;num=num+2) { *e=flag; flag=flag<<1; *q=table4[num]; *w=table4[num+1]; delay1(YAN); } } uchar keyscan(void); void motor_delay(void) { unsigned int i; for(i=0;i<ss;i++) ; } void backward() { P1=0xfc; //P0口低四位脉冲1100 motor_delay(); P1=0xf9; //P0口低四位脉冲1001 motor_delay(); P1=0xf3; //P0口低四位脉冲0011 motor_delay(); P1=0xf6; //P0口低四位脉冲0110 motor_delay(); } void forward( ) //左转 { P1=0xFC; //P0口低四位脉冲1100 motor_delay(); P1=0xf6; //P0口低四位脉冲0110 motor_delay(); P1=0xf3; //P0口低四位脉冲0011 motor_delay(); P1=0xf9; //P0口低四位脉冲1001 motor_delay(); } void delay2(int ff) { int i,j; for(i=0;i<ff;i++) for(j=0;j<150;j++) ; } void stop(void) { P1=0xff ; //停止输出脉冲 } /* void delay() { int i; for(i=0;i<3277;i++) ; } */ void main() { EA=1; //开总中断 ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2 TH0=5500/256; //定时器T0的高8位赋初值 TL0=5500%256; //定时器T0的高8位赋初值 TR0=1; //从0开始累计中断次数 ET1=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T0的模式2 TH1=65036/256; //定时器T0的高8位赋初值 TL1=65036%256; //定时器T0的高8位赋初值 TR1=1; ff1=ff2=1; f1=f2=f3=f4=0; f5=1; while(1) { dd=0; ss=3000; if(key==0x08||key==0x02||key==0x04||key==0x06||key==0x05) { if(key==0x08) //前进 { f1=1; f2=f3=f4=f5=0; AA:while(key!=0x02&&key!=0x05) { if(ff1) { ss=3000; dd=0; ff1=0; } if(key==0x08) { if(ss-150>2000) ss=ss-150; else if(ss-80>1000) ss=ss-80; else if(ss-50>300) ss=ss-50; if(dd<=255) dd=dd+0x07; } aa=dd/100; bb=(dd%100)/10; cc=dd%10; backward(); if(key==0x04) { f2=1; f1=f3=f4=f5=0; } else if(key==0x06) { f3=1; f1=f2=f4=f5=0; } else if(key==0x08) { f1=1; f2=f3=f4=f5=0; } } if(key==0x02) { ff2=1; goto BB; } else if(key==0x05) stop(); } else if(key==0x02) { f4=1; f1=f3=f2=f5=0; BB: while(key!=0x08&&key!=0x05) { if(ff2) { ss=3000; dd=0; ff2=0; } if(key==0x02) { if(ss-150>2000) ss=ss-150; else if(ss-80>1000) ss=ss-80; else if(ss-50>300) ss=ss-50; if(dd<=255) dd=dd+0x07; } aa=dd/100; bb=(dd%100)/10; cc=dd%10; forward( ); if(key==0x02) { f4=1; f1=f2=f3=f5=0; } else if(key==0x04) { f2=1; f1=f3=f4=f5=0; } else if(key==0x06) { f3=1; f1=f2=f4=f5=0; } } if(key==0x08) { ff1=1; goto AA; } else if(key==0x05) stop(); } else if(key==0x05) //停车 { f5=1; f1=f2=f3=f4=0; while(key!=0x08&&key!=0x02) { aa=bb=cc=0x00; stop(); if(key==0x05) { f5=1; f1=f2=f3=f4=0; } else if(key==0x04) { f2=1; f1=f3=f4=f5=0; } else if(key==0x06) { f3=1; f1=f2=f4=f5=0; } } if(key==0x08) goto AA; else if(key==0x02) goto BB; } } } } void Time0(void) interrupt 1 using 1 //"interrupt"声明函数为中断服务函数 //其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器 { TR0=0; if(f1) qian(); else if(f4) hou(); else if(f2) zuo(); else if(f3) you(); else if(f5) ting(); TH0=5500/256; //定时器T0的高8位赋初值 TL0=5500%256; //定时器T0的高8位赋初值 TR0=1; } void Time1(void) interrupt 3 using 2 //"interrupt"声明函数为中断服务函数 //其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器 { TR1=0; cord_l=0; *digit=0x3b; *keyin=0xff; cord_h=*keyin; if(cord_h-0x0f!=0x00) { if(cord_h==0x0E) cord_l=0x0d; if(cord_h==0x0d) cord_l=0x0c; if(cord_h==0x0B) cord_l=0x0b; if(cord_h==0x07) cord_l=0x0a; } else { *digit=0x37; *keyin=0xff; cord_h=*keyin; if(cord_h-0x0f!=0x00) { if(cord_h==0x0e) cord_l=0x0e; if(cord_h==0x0d) cord_l=0x03; if(cord_h==0x0b) cord_l=0x06; if(cord_h==0x07) cord_l=0x09; } else { *digit=0x2f; *keyin=0xff; cord_h=*keyin; if(cord_h-0x0f!=0x00) { if(cord_h==0x0e) cord_l=0x0f; if(cord_h==0x0d) cord_l=0x02; if(cord_h==0x0b) cord_l=0x05; if(cord_h==0x07) cord_l=0x08; } else { *digit=0x1f; *keyin=0xff; cord_h=*keyin; if(cord_h-0x0f!=0x00) { if(cord_h==0x0e) cord_l=0x00; if(cord_h==0x0d) cord_l=0x01; if(cord_h==0x0b) cord_l=0x04; if(cord_h==0x07) cord_l=0x07; } } } } key=cord_l; *xians=dofly[aa]; *digit=0x04; delay2(1); *xians=dofly[bb]; *digit=0x02; delay2(1); *xians=dofly[cc]; *digit=0x01; delay2(1); TH1=50000/256; //定时器T0的高8位赋初值 TL1=50000%256; //定时器T0的高8位赋初值 TR1=1; }
相关文章推荐
- ZOJ 3209 Treasure Map
- 数据库前缀索引
- 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法
- JAVA之父子类的构造函数、静态代码块等执行顺序
- scala中的控制语句
- 微机原理实验 lab8000 键盘数码管显示测试
- CSS作业及答案
- Zabbix之action配置
- UIView 和其子类 UILabel 的基本方法
- 小白学开发(iOS)OC_成员变量的作用域(2015-07-27)
- 描写生活美好的句子大全
- 描写生活美好的句子大全
- Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
- zoj3210 A Stack or A Queue?
- mysql错误处理
- 2015 Multi-University Training Contest 2
- 【LeetCode】241. Different Ways to Add Parentheses
- HTML5中表单验证的8种方法
- Andoid Sqlite 增查
- Canopy聚类算法分析