物理与电信工程学院
3.3键盘中断程序设计
这一部分包括加、减、确定三个键,分别由外部中断1(INT1)外部中断0(INT0)和定时器1(T1)。
3.3.1增加键
在此程序中,剩余车位不超过最大车位数,即最大车位数不超过255.流程图3.3如下
断点保护 N 延时后判断P3.3是否为低电平 Y 当前是否正在设置剩余车位 最大车位数加一 剩余车位数加一 中断返回 图3.3 按键流程图
3.3.2减少键
减少键的程序段和3.3.1相似。
3.3.3确定键
确定键实现了用定时器1中断,其作用是判断手动设置以后的剩余车位是否大于最大车位数,防止系统紊乱。
16
物理与电信工程学院
结论
本课题所研究的是通过单片机来实现对停车场的管理,在设计的过程中硬件存在着这样的问题:
(1)本系统中所使用的红外线传感器TSOP1738过于灵敏,输出端出现电平抖动,可以通过软件或硬件去抖动。我选择了软件抖动,即分两次读取传感器的状态,对比两次读取的状态,系统做出对应的反应,键盘也是这样做。
(2)数码管显示亮度不够。AT89S52的I/O口得输入功率不够造成的,解决方法是在数码管输入端和I/O口之间添加7448芯片,进行驱动。 本系统的不足之处:
(1)没有实现对电机的无线控制。
(2)由于单片机芯片的局限,系统无车辆出入记录功能,有待改进。
17
物理与电信工程学院
致谢语
从刚接到毕业设计课题,我首先是查找一些相关的书籍及资料,并根据实际情况
拟定设计方案,从而达到优化方案。在研究设计电路时,最难的是调试了,但在老师和同学的帮助下使得本次设计达到了预定的要求。同时,通过这次毕业设计,在各个方面都有了很大的提高,特别是在理论和实践结合方面使我受益匪浅,使我大学里学习的理论知识在根本上得到一次最完整的实践和提高。也为我即将面临的工作奠定了很好的基础。在本次毕业设计中深深认识到自己的各个方面的不足之处,本着提高动手能力以及检测大学所学知识的目的,我严格要求自己,每一环节都认真对待,定期向知道老师报告进展情况和请教不懂的地方,得以完成任务。在经过系统的设计与制作后,感触最深的是解决问题的方法、技巧。在这个过程中,我遇到许许多多问题,对待问题要多方法处理,多角度处理。这不但增强了实践能力,而且懂得了联系实际的重要性,我坚信这对以后的学习和工作会有极大的帮助。当然,我的设计还存在着一些缺陷,有待于在将来设计中进一步提高。
参考文献:
[1] 李广弟.单片机基础[M].北京:北京航天航空大学出版社, 2005. [2] 胡汉才.单片机原理及接口技术[M].北京:清华大学出版社, 2004.
[3] 马忠梅.单片机C语言Windows环境编程宝典[M].北京:北京航空航天大学出版社,
2004.
[4] 佟云峰.单片机原理及应用[M].北京:机械工业出版社, 2006. [5] 郭天翔.51单片机C语言教程.电子工业出版社, 2008.
[6] 潘清明,刘启新.基于单片机路灯网络控制系统.中国制造业信息化, 2008.
18
物理与电信工程学院
附录1:系统程序清单
#include
#define OPEN_DOOR DOOR = 1 #define CLOSE_DOOR DOOR = 0
#define NO_FREE_PARK {RED_LED=1;GREEN_LED=0;} #define HAVE_FREE_PARK {RED_LED=1;GREEN_LED=0;} #define SEG P0
sbit baiw=P2^0; sbit shiw=P2^1; sbit gew=P2^2;
sbit EXT_LINE = P3^0; // sbit INT_LINE = P3^1; //
sbit SW1 = P0^3;
sbit DOOR = P0^2; //1 打开,0 关闭
sbit RED_LED = P0^0;//空闲指示灯 1 亮 表示无空闲车位 sbit GREEN_LED = P0^0;//空闲指示灯 1 亮 表示有空闲车位 unsigned char total_num=255;
//最大车位
unsigned char remain_num=255; //剩余车位 unsigned char dai,shi,ge; unsigned char check_car(void); void delay_ms(unsigned int ms); void display(unsigned char va); unsigned char
seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(void) { EX0=1;; EX1=1;
19
物理与电信工程学院
EA=1;
while(1) { if(1==check_car()) //如果检测到car 出入 { OPEN_DOOR; //启动定时器的程序 TMOD=0X01; TH0=0XFF; TL0=0; EA=1; ET0=1; TR0=1;
//end of\启动定时器的程序\
} else { ;// do nothing
}
if(0==remain_num) { NO_FREE_PARK;
} else { HAVE_FREE_PARK;
}
if(0==SW1) {
display(remain_num);
20