3.2.2外部中断流程图
外部中断开始 红外线感应延 时重新初始化 退出外部中断 图 3-2
3.2.3定时器0中断流程图
定时器0开始 定时器重新 初始化 键盘消抖 定时状Y N 手动状Y N 自动状Y N 停止状Y 定时状态 键盘操作 手动状态 键盘操作 自动状态 键盘操作 停止状态 键盘操作 退出定时器 图 3-3
9
3.2.4定时器1中断流程图
定时器 1开始 定时器 1重新初始化 如果有定时则 定时倒计时, 计时结束关闭电 风扇 进入定时状态 不动超过一定 时间自动退回手动状态 键盘消抖 N N N 定时状态 手动状态 自动状态 停止状态 Y Y Y Y 如果有定时则如果有定时则显示时间 时间和温度交时间和温度交替显示,没有则替显示,没有则显示时间 只显示温度 只显示温度 退出定时器 图 3-4
10
结束语
早在《单片机原理及接口技术》这门课还未结束的时候,陆仲达老师就给我们布置了基于51单片机的课程设计。我从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。
关于51的应用设计,从上课开始我就不满足于那些诸如电子钟、交通灯控制等司空见惯的设计,我希望能把主题定位得更新颖、更具挑战性,正好夏天也到了,于是把题目定为:智能电风扇的设计。
题目确定下来,我便立刻着手资料的收集工作中,当时面对浩瀚的书海真是有些茫然,不知如何下手。在导老师的指导及同学的帮助下,我终于对自己的工作方向和方法有了初步掌握。资料已经查找完毕,我开始着手论文的写作。在写作过程中遇到困难我就及时和导师联系,并和同学互相交流,请教专业课老师。在大家的帮助下,困难一个一个解决掉,论文也慢慢成型。
当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的课程设计稿件我的心里是甜的,我觉得这一切都值了。这次课程设计论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。
本设计最终实现了电风扇的手动调速、温控自动调速、定时、温度显示、人体检测等预期功能,其中定时在1到99分钟连续可调,人体检测范围角度120度、距离6米,人体检测延时时间3分钟,定时器自动退出时间6秒。存在不足之处就是人体检测抗干扰方面不够好,需要提高。
我不会忘记这难忘的半个月的时间。课程设计论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手用protel 99 se设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。
在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成课程设计。
11
附录:程序清单
/*********************************************************************** touwenjian.h
***********************************************************************/ typedef unsigned char byte; typedef unsigned int word;
//以下管脚配置
//ds18b20部分 sbit DQ =P3^4; //显示部分 sbit DB=P2^0; sbit CP=P2^1; //发光显示部分
sbit LED_dingshi=P0^0; sbit LED_shoudong =P0^1; sbit LED_zidong=P0^2; sbit LED_kuai =P0^3; sbit LED_zhong =P0^4; sbit LED_man =P0^5; //键盘定义部分 #define wujian 0x3f
sbit KEY1=P1^0 ; //状态转换 /启动 sbit KEY2=P1^1 ; //+10 / 1 sbit KEY3=P1^2 ; //-10 / 2 sbit KEY4=P1^3 ; // 3 sbit KEY5=P1^4 ; // 0 确定 //继电器控制部分
sbit JDQ1=P2^4; //0表示开通,1表示关断 sbit JDQ2=P2^5; sbit JDQ3=P2^6; //蜂鸣器部分
sbit call=P2^7; //低电平鸣叫
12
/*********************************************************************** ds18b20.c
***********************************************************************/ #include
/*****************************************************
延时子程序
*****************************************************/ extern void delay(word useconds) {
for(;useconds>0;useconds--); }
/***************************************************** 复位子程序
******************************************************/ static byte ow_reset(void) {
byte presence; EA=0;
DQ = 0; // pull DQ line low
delay(45); // leave it low for 480us //551us DQ = 1; // allow line to return high delay(4);// wait for presence //61us
presence = DQ; // get presence signal
delay(40); // wait for end of timeslot //491us EA=1;
return(presence); // presence signal returned } // 0=presence, 1 = no part
/******************************************************* 从 1-wire 总线上读取一个字节子程序
********************************************************/ static byte read_byte(void) {
byte i;
byte value = 0; EA=0;
for (i=8;i>0;i--)
13