单片机设计吸油烟机的设计Word文档下载推荐.docx
- 文档编号:22490714
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:615.87KB
单片机设计吸油烟机的设计Word文档下载推荐.docx
《单片机设计吸油烟机的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机设计吸油烟机的设计Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
三、吸油烟机的硬件设计方案
1电极控制模块
电机控制电路的主要功能是完成吸油烟机风扇在高速转动与低速转动之间的切换。
其工作原理:
微处理器在确认风扇转动按键B2被按下后,则单片机的P1.6置为高电平,三极管V8导通,继电器KA2吸合,常开触点KA2闭合,直流电机电枢回路通电,风扇电机低速转动;
当按下按键B3后,则将单片机的P1.7置为高电平,三极管V7导通,继电器KA1吸合,常开触点KA1闭合,电阻R18被短路,此时电枢回路的总电阻小于KA1断开时的总电阻,而端电压保持不变,所以电枢回路的电流增大,故而风扇电机转速增大。
电机控制电路图如图3所示。
2键盘模块
根据设计要求,在本系统中共需要7个按键,照明灯按键B1、风扇转速控制键B2、B3,功能选择键B4、电子时钟设置调整键B5~B8。
为了节省I/O资源,采用2×
4键盘电路,键位的列线(输入线)连到P1.0~P1.2,行线(输出线)连到P1.2~P1.5,而2根列线则通过74LS08“与”门相连后,连到
端。
初态时,P1.2~P1.5全部为0,没有键压下时,
为高电平;
当键位上有任一键压下,
端变低,向CPU发出中断请求,执行中断服务程序扫面键盘。
键盘电路原理图如图4所示。
3指示灯模块
指示灯电路的主要功能是指示当前吸油烟的工作状态。
当按键B1被按下时,将P3.0置为低电平,发光二极管V1点亮。
指示灯电路原理图如图5所示。
4复位电路模块
复位电路采用STC813组成的看门狗电路。
它和单片机的连接电路如图6所示。
看门狗定时器对微处理机提供了独立的保护系统,当系统出现故障时,在可选的超时周期之后,STC813看门狗将发出RESET信号,使CPU自动复位。
利用STC813的低电压监测电路,可以保护系统免受低电压的影响,当Vcc低到转换点以下时,系统复位,并一直保持到Vcc返回并且稳定为止。
5时钟模块
若采用直接驱动法驱动6个七段显示器,共须6×
8=48条I/O线,而采用解码器驱动也要6×
4=24条I/O线,形成I/O口的浪费。
所以采用扫描显示法,再加上TTL七段显示译码器74LS48和3-8译码器74LS138,只需要7条I/O线,可节省硬件。
时钟电路原理图如图7所示。
四、吸油烟机的软件设计
1初始化程序和主程序模块
初始化程序流程图如图8所示,初始化程序部分主要使系统进入复位初始化的状态值。
具体过程为:
设置中断优先级IP,选择定时器0的工作方式,并且设置初始值,开外部中断0,时钟显示寄存器初始化,使之全部显示为0,键盘端口初始化,指示灯显示初始化。
主程序流程图如图9所示,具体过程为:
主程序调用初始化程序后,处于等待状态,当外部中断0产生中断,则调用外部中断0服务子程序,当外部中断0没有产生中断时,则调用定时器0服务子程序。
2定时器0中断服务程序模块
定时器0中断程序工作过程:
定时器0每隔4ms中断,一次中断相当于一个计数,每中断一次则计数加1。
当计数为250次时,则表示1s到了,调用计时子程序,秒变量加1,再判断秒变量是否到60,如果到了60,则说明一分钟到了,分变量加1,同理判断时变量是否1小时到了,若计数到了则将相关变量清除为0。
同时调用显示子程序和子程序来对显示器进行扫描,从而显示时间数据。
定时器中断服务子程序的流程图如图10所示。
3时钟程序模块
时钟程序设计主要包括计时子程序CLOCL、显示子程序DIS、显示准备子程序READY三部分。
计时子程序CLOCK主要功能:
每隔1S判断秒变量、分变量、时变量寄存器的值,当秒、分变量寄存器的值超过60则清零,而时变量寄存器的值超过24则清零。
显示子程序SCAN的主要功能:
将列扫描值和显示数值送到P2口。
显示准备子程序DIS的主要功能:
分别将显示的秒、分、时数值转换程十进制数值暂存到寄存器20H~25H。
计时子程序CLOCL、显示子程序DIS、子程序REDAY的程序流程图分别如图11、图12和图13所示。
4外部中断0服务程序
外部中断0中断服务程序的功能是:
当有键按下时,通过“与”门触发外部中断0中断,调用键盘扫描子程序获取键值,根据键值执行相应的动作。
外部中断0的服务程序流程图和键盘扫描子程序流程图分别如图14、图15所示。
五、仿真及调试
1程序调试及问题分析
在编写应用程序的过程中,无论是谁都难免出现一些或大或小的错误,尤其是我们这些编程不是很厉害的学生,在编程过程中必然会产生错误,所以编好初稿后必须进行程序调试。
程序调试过程确实不是一个容易的过程,我把程序在WAVE6000集成实验环境下编辑好后一编译发现二十几处错误,有些是丢了冒号,或使用的是中文式的冒号,有些是宏汇编出错了等等错误。
2仿真测试
在Proteus6.9S环境下进行仿真,仿真效果如图16、图17所示。
图17吸油烟机仿真图二
六、结束语
做了两周的课程设计,有很多的心得体会,有关于单片机方面的,更多的是关于人与人之间关系方面的。
我们组一共有四个人,我单片机学的不太好,为此还是搞的很认真。
开始几天我白天在电子阅览室查找资料,晚上在图书馆查看一些有关书籍,有时还请教我们的指导老师。
经过老师的多凡讲解讲解使我得到了很大的收获。
所幸的是,我得到了很多同学的帮助。
我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我理论联系不了实际。
以前的汇编语言没学好,一开始的程序这块儿就要令我不知所措了。
后来请教我们班的同学和老师,在他们的帮助下和大家的共同努力之下,终于写出了程序。
在此次课程设计中,我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。
51的引脚及其功能,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。
在这个过程中又发现了以前连电路当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,不要想那些如果,还是准备自己的,做好我现在能做的吧。
还好,验收还算成功,但是我觉得对我来说已经很好,代表了我真实的水平,我觉得我对单片机的一些知识在这个动手的过程中真的是从无到有增长的。
同时我也尽量不去想别人得了多少分,没有什么不平衡的,有些人付出的是努力,有些人付出的是风险代价,其实这也没有什么不一样,这一点我早就了解。
最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后补一补汇编语言。
有什么问题请教下以前的那些老同学好了。
附录A吸油烟机的程序清单
HOUREQU2AH;
存放小时变量
MINEQU2BH;
存放分钟变量
SECEQU2CH;
存放秒钟变量
GN_FLAGEQU20H.5;
功能选择标志位
ORG00H;
主程序起始地址
LJMPMAIN;
跳至主程序
ORG03H;
INT0中断起始地址
LJMPINT0;
跳至中断子程序INT0
ORG0BH;
TIMER0中断起始地址
LJMPTIMER;
跳至TIMER0中断子程序TIMER
**********************************************************
主程序
*********************************************************
MAIN:
MOVSP,#70H;
设置堆栈在70H
MOV28H,#00H;
显示寄存器初值为00
MOVHOUR,#08H;
"
时"
寄存器初值为09H
MOVMIN,#00H;
分"
寄存器初值为00H
MOVSEC,#00H;
秒"
MOVP2,#0FH;
键盘端口初始化,行线置0
MOVP3,#0FFH;
指示灯初始化
CLRGN_FLAG;
功能标志位清零
MOVTMOD,#01H;
TIMER0工作方式1
MOVTL0,#60H;
定时4MS
MOVTH0,#0F0H;
MOVIE,#83H;
中断使能
SETBPX0;
中断0优先级高
SETBIE0;
中断0跳变触发方式
MOVR4,#250;
中断250次
SETBTR0;
启动定时器0
AJMP$;
等待中断
********************************************************************
外部中断0处理子程序
INT0:
PUSHACC;
将ACC的值暂存于堆栈
PUSHPSW;
将PSW的值暂存于堆栈
AGAIN:
MOVP2,#0FH
JNBP2.0,ZHIX0
JNBP2.1,ZHIX1
AJMPEXIT
ZHIX0:
MOVP2,#0F0H
CALLDELAY
JNBP2.4,B5
JNBP2.5,B6
JNBP2.6,B7
JNBP2.7,B8
JMPEXIT
ZHIX1:
JNBP2.4,B1
JNBP2.5,B2
JNBP2.6,B3
JNBP2.7,B4
B1:
CPLP3.0;
照明灯点亮或熄灭
B2:
JBGN_FLAG,BB2
BB2:
CPLP3.1;
电机低速转动
CLRP1.7
B3:
JBGN_FLAG,BB3
BB3:
CPLP3.3;
电机高速转动
CLRP1.6
B4:
CPLP3.5;
电机功能选择
CPLGN_FLAG
B5:
MOVA,SEC;
将秒寄存器的值载入A
ADDA,#01H;
A的内容加1
DAA;
A做十进制调整
MOVSEC,A;
将A的值存入秒寄存器
CJNEA,#60H,EXIT;
是否等于60秒,不是跳至N1
是则清除秒寄存器的值为00
B6:
MOVA,MIN;
将分寄存器的值载入A
MOVMIN,A;
将A的值存入分寄存器
是否等于60分?
不是则跳到N3
是则清除分寄存器的值为00
B7:
MOVA,HOUR;
将时寄存器的值载入A
MOVHOUR,A;
CJNEA,#24H,EXIT;
是否等于24?
不是则跳到N5
MOVHOUR,#00H;
是则清除时寄存器的值为00
B8:
EXIT:
POPPSW;
至堆栈取回PSW的值
POPACC;
至堆栈取回ACC的值
RETI
TO定时中断处理子程序
TIMER:
计时到重新赋初值
DJNZR4,X2;
计时1S是否到?
未到则跳到X2
MOVR4,#250;
到了重新给R4赋值
CALLCLOCK;
调用计时子程序CLOCK
CALLDIS;
调用显示子程序DIS
X2:
CALLSCAN;
调用扫描子程序SCAN
RETI;
返回
扫描子程序
SCAN:
CLRRS0
CLRRS1;
选择工作寄存组0
MOVR0,#28H;
(28H)为扫描指针
CJNE@R0,#6,X3;
扫描完6个显示器?
不是则跳至X3
MOV@R0,#00H;
是则扫描指针为0
X3:
MOVA,@R0;
扫描指针载入A
ADDA,#20H;
A加上常数20H(显示寄存器地址)=各时间显示区地址
MOVR1,A;
各时间显示时间地址存入R1
SWAPA;
将A的高低4位互换(P1高四位为扫描值,低四位为显示值)
ORLA,@R1;
扫描值加显示值
MOVP1,A;
送至P1口显示
INC@R0;
扫描指针加1
RET;
*********************************************************************
计时处理子程序
CLOCK:
MOVA,SEC;
秒寄存器的内容载入A
加1秒
存入秒寄存器
CJNEA,#60H,X4;
是否超过60秒?
不是则跳到X4
是则秒位清零
MOVA,MIN;
分寄存器的内容载入A
加1分
做十进制调整
存入分寄存器
是否超过60分?
是则分位清零
时寄存器的内容载入A
加1时
存入时寄存器
CJNEA,#24H,X4;
是否超过24时?
是则时位清零
X4:
RET;
显示准备子程序
DIS:
SETBRS0
选择工作寄存器2
MOVR1,#20H;
(20H)为显示寄存器,R1=20H
将秒寄存器的内容存入A
MOVB,#10H;
设B的累加器的值为10H
DIVAB;
A除B,商(十位数)存入A,余数(个位数)存入B
MOV@R1,B;
将B的内容存入(20H)
INCR1;
R1=21H
MOV@R1,A;
将A的内容存入(21H)
INCR1;
R1=22H
将分寄存器的内容存入A
将B的内容存入(22H)
R1=23H
将A的内容存入(23H)
R1=24H
将时寄存器的内容存入A
将B的内容存入(24H)
R1=25H
将A的内容存入(25H)
延时子程序
DELAY:
MOVR6,#10;
5毫秒延时
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
END
附录B吸油烟机的电路原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 吸油烟机