南昌航空大学《单片机与接口技术》课程设计
第四章 设计体会与小结
通过这次课程设计,最大的收获就是动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,验证了一句话:实践出真知。
这几个礼拜有关于出租车计价器的课程设计,对单片机的应用有了更深的了解。在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件没能熟练掌握。通过这几天晚上的苦想和反复调试,以及参考网上的程序,最终还是把问题解决了。
在最初的设计中,和同组人增加了单程的双程的控制这一环节,即A地到B地和A地到B地再返回A地的设计,通过设计达到双程比单程略实惠的想法,但是,在检查中,老师说这样的设计是不符合常理的,因为出租车司机不可能在B地一直等待。所以,学会了在设计中要遵循日常生活的细节和常规做法,不刻意制造特殊情况,尽管设计看起来很有道理,但却不符合日程生活的规律,以后的设计一定要遵循生活准则,不胡思乱想,因为那样反而会事倍功半。
第二就是编程顺序,要写一个功能很复杂的程序首先写那些可以很快完成的较简单的内容,比如调单价时的闪烁,那么就可以开始只写调一位单价,然后再加入程序可以调两位单价,再然后加入闪烁功能,这样既可以使编程变得更有条理,而且对心态也是很有帮助的。做完后,学到了许多,心情变得轻松了,但是要学的东西还有很多,所以得继续努力。
凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。
16
南昌航空大学《单片机与接口技术》课程设计
参考文献
1. 李群芳、张士军、黄建.《单片微型计算机与接口技术》(第三版).电子工
业出版社,2008.
2. 张鑫、华臻、陈书谦.《单片机原理及应用》[M].电子工业出版社,2005. 3. 丁元杰、吴大伟.《单片微机实题集与实验指导书》[M].机械工业出版社,
2004.
4. 李群芳,肖看.单片机原理接口与应用.北京:清华大学出版社,2005. 5. 张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,
1999.
6. 高峰.单片微型应用系统设计及实用技术.北京:机械工业出版社,2004.
17
南昌航空大学《单片机与接口技术》课程设计
附 录
源程序
#include
#define uchar unsigned char #define uint unsigned int
uchar qianwei,baiwei,shiwei,gewei; //显示数据各个位置数字的临时变量 char led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码表
uint tt,distance,cost,danjia,wait;//定义路程、价钱、等待时间及一些全局的变量等;
uchar dengdai,second,minute,a,b;
//按键的定义,所有按键按下去为低电平 sbit key0=P1^0; //清零
sbit key1=P1^1; //切换路程与等待时间 sbit key2=P1^2; //单程还是往返设置 sbit key3=P1^3; //暂停按钮 sbit key4=P3^6; //晚上单双程键 sbit key5=P2^0; //白天和夜晚键 sbit led1=P1^4; // 指示 sbit led2=P1^5; sbit led3=P1^6; sbit led4=P1^7; sbit led5=P2^1; sbit clk =P3^7; sbit dula=P3^1; sbit wela=P3^2;
bit key1_flag; //由于按键会自动复位,这个为标位 bit key2_flag; bit key3_flag; bit flag;
bit key4_flag; bit key5_flag; //初始化函数 void initial_data() { distance=0;
18
南昌航空大学《单片机与接口技术》课程设计
cost=0; second=0; minute=0; tt=0; key1_flag=1; // 清零 key2_flag=0; //单程or往返,接指示灯; key3_flag=1; //暂停,接指示灯; key4_flag=1; //晚上的计价往返的标志 key5_flag=0; //白天和晚上的标志位 dengdai=0; led1=1; //双程指示 led2=1; //暂停指示 led3=1; //堵车指示 led4=1; // 等待时间切换标志 led5=1; //晚上计价指示 }
void delay(uint x) {
int i,j;
for(i=x;i>0;i--)
for(j=100;j>0;j--); }
//暂停程序
void zanting() { if(key3==0) { delay(5); if(key3==0) { IE0=0X00; //关闭中断 TR0=0; TR1=0; } } else { IE==0X80; TR0=1; TR1=1;
19
定时器 南昌航空大学《单片机与接口技术》课程设计
} // key3_flag=!key3_flag; }
//计算数据处理 void jisuan() { if(key5_flag==0) { if(tt<=60) { distance=tt*50; cost=50; //50角 } danjia=2; //白天单程价格 if(key2_flag) danjia=1; //白天往返价格 if(tt>60) { distance=tt*50; cost=danjia*(distance-3000)/100+50; } } else { if(tt<=60) { distance=tt*50; cost=80; //80角 } danjia=4; if(key4_flag) danjia=3; if(tt>60) { distance=tt*50; cost=danjia*(distance-3000)/100+80; } } wait=minute*100+second; }
20