单片机课设报告.docx
《单片机课设报告.docx》由会员分享,可在线阅读,更多相关《单片机课设报告.docx(19页珍藏版)》请在冰点文库上搜索。
![单片机课设报告.docx](https://file1.bingdoc.com/fileroot1/2023-6/15/147c2179-9ace-433c-b1d4-188a936e2f47/147c2179-9ace-433c-b1d4-188a936e2f471.gif)
单片机课设报告
单片机原理与接口技术
课程设计报告
课程设计名称:
医院住院病人呼叫器设计
学院:
信息工程学院
班级:
通信0802班
:
马滔
学号:
2008001307
同组人:
童辉
一、课题名称及设计技术指标
1)课题名称
医院住院病人呼叫器设计
2)设计技术指标
1)能同时检测8个床位的病人呼叫
2)显示病人呼叫总数
3)循环显示呼叫病人的床号
4)可以暂停显示
5)具有重新显示功能
6)在复位电路的作用下,复位单片机
7)使暂停功能的优先级高于重显功能,重显功能优先级高于定时功能
二、总体方案设计与论证
本方案选用80c51单片机,P1口依次连接病人床位,实时检测P1口的信号。
若与前一次的信号不一样,则判断端口是否为0。
如果没有病人呼叫则关蜂鸣器;如果有病人呼叫打开蜂鸣器提示一户人员,统计病人总数同时显示总数,统计病人床位并保存。
开启定时器进行循环显示床号,在显示的空闲时间继续检测P1口的端口状态。
如果有病人呼叫或者呼叫结束重新开始统计总数和床号,显示床号和总数。
重新显示时,只循环显示一次床号和总数。
利用外中断1实现中断跳转执行重显程序。
暂停功能,用外中断0引入,通过检查P3.3的值结束暂停。
使用74ls373锁存器驱动七段数码管显示器,可以不用单片机实时刷新七段数码管显示。
通过输出码表中的值显示相应的数字。
51单片机拥有5个中断源,其中两个定时/计数器中断,两个外部中断。
能够实现上述对单片机的控制功能。
同时可以通过设定PI寄存器的值设定优先级。
本方案可以通过加入接口扩展芯片,扩展检测病人数量。
同时加入T1中断后可以实现多种蜂鸣声音报警。
具有很强的扩展能力。
具体思路详见程序流程图
三、程序设计及调试
在waves6000按照流程图依次编写主程序、T0中断程序、暂停程序和重新显示程序。
进行编译调试。
程序附在最后
程序流程图如下
1)主程序:
2)T0中断:
3)暂停程序:
4)重新显示中断:
四、电路设计及器件选择
1)电路设计主图
2)器件清单
器件名称
80c51单片机
晶体管
蜂鸣器
电阻
七段数码管
电容
开关
220v交流电或者5v直流电源
3)器件简介
80C51
80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(PUSH)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。
采用40引脚双列直插式DIP(DualInLinePackage),有128个RAM单元及4K的ROM。
80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。
80C51部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。
由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故采用来作为控制核心。
选型表
特性
y80C51核心处理单元
4k字节FLASH89C51X2
8k字节FLASH89C52X2
16k字节FLASH89C54X2
32k字节FLASH89C58X2
128字节RAM89C51X2
256字节RAM89C52X2/54X2/58X2
布尔处理器
Vss(20脚):
接地
VCC(40脚):
主电源+5V
XTAL1(19脚):
接外部晶体的一端。
在片它是振荡电路反相放大器的输入端。
在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。
XTAL2(18脚):
接外部晶体的另一端。
在片它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。
若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。
RST(9脚):
单片机刚接上电源时,其部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)
PSEN(29脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。
ALE/PROG(30脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。
EA/VPP(31脚):
当EA端输入高电平时,CPU从片程序存储器地址0000H单元开始执行程序。
当地址超出4KB时,将自动执行片外程序存储器的程序。
当EA输入低电平时,CPU仅访问片外程序存储器。
在对87C51EPROM编程时,此引脚用于施加编程电压VPP。
输入/输出引脚:
(1)P0.0—P0.7 (39脚—32脚)
(2)P1.0—P1.7 (1脚—8脚)
(3)P2.0—P2.7 (26脚—21脚)
七段数码管
蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、机、定时器等电子产品中作发声器件。
;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
蜂鸣器的结构原理
1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。
当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣片由锆钛酸铅或铌镁酸铅压电瓷材料制成。
在瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
复位电路
电源电路
五、电路仿真
采用PROTEUS仿真软件效果非常好。
六、调试运行及结果
当床2和4开关按下去后总数显示为2,蜂鸣器报警。
循环显示床号2、4.。
当按下显示开关,开始重新显示,显示完后继续主程序的执行。
当按下暂停按键,暂停显示,数值保持不变。
关闭床2的开关后重新显示总数和床号1与4。
当全部关闭后,蜂鸣器关闭,显示总数为0,床号为0。
与设计技术要求相符。
七、课设心得
医院住院病人呼叫器作为单片机实际应用的一个例子,在日常生活中发挥着非常重要的作用。
从此可以看出单片机在日常生活中得到广泛的运用。
要实现意见具体的事件判断和做出反应,实现自动化。
万事开头难。
选定课题后,确定方案的时候让人很头痛。
由于以前学习过汇编语言,所以对汇编语言没有多大困难。
主要是算法的确定。
通过查阅资料和自习阅读教材深刻体会单片机硬件运行原理后,思路逐渐清晰。
记得花了两个晚上构思出整体算法,画出流程图。
流程图在编写程序时非常必要。
它可以明确思路,便于对程序进度的把握。
在画流程图时选定各个端口的功能和相应器件的选择。
这个过程是同步进行的。
通过这次编程提高了我的编程能力和是通过程序对外部器件的控制。
硬件电路设计。
由于采用锁存器驱动数码管的显示,这样就不用单片机实时刷新,只有当有改变时才更新数据。
一些经典电路,如:
电源和复位电路,我是通过查阅得到的。
由于使用PROTEUS软件不是很熟练,在电路设计的过程中又学习了该软件的使用。
熬夜设计电路,是我第二天成为熊猫超人,但当最后电路仿真的结果出现在眼前时,一切的付出都是值得的。
与童辉的合作使得课设的进度大大加快,互相补充思路的缺陷。
设计电路选择器件。
这次课设恰逢“考试周”,所以时间不多,做的还不够好。
还可以对本设计进行扩展,如:
采用无线通信,检测更多床位,通过驱动多媒体部件实现更多的功能。
课设就是一次工业设计,从项目建立、方案确定、程序编写、硬件电路设计到最后产品的完成。
单片机的课设,我收获了很多,对单片机的认识更加透彻,感受了它在实际生活中的运用。
付出就有回报。
八、参考资料
1)《单片机原理与接口技术》牛昱光主编
2)《微型计算机原理与应用》学坚周斌编著
九、源程序代码
主程序:
ORG0000H
AJMPMAIN
ORG0003H
LJMPPAUSE
ORG000BH
LJMPDINGSHI
ORG0013H
LJMPSHOW
ORG0030H
MAIN:
;显示编码初始化
MOV40H,#3FH
MOV41H,#06H
MOV42H,#5BH
MOV43H,#4FH
MOV44H,#66H
MOV45H,#6DH
MOV46H,#7DH
MOV47H,#07H
MOV48H,#7FH
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBEA;开中断,并设定优先级
SETBET0
SETBEX0
SETBIT0
SETBPX0
SETBPX1
MOVR7,#00H
MOVR4,#00H
MOVR1,#21H
SAO1:
MOVR5,P1
MOVA,R5
CLRC
SUBBA,R7
JZSAO1
BTAO:
MOVA,R5;检测到变化时,进行下一次重复判断显示
MOVR7,A
JNZNOSO
CLRP2.7;关蜂鸣器
SETBP2.1;显示总数0
MOVP0,#3FH
CLRP2.1
SETBP2.2;显示床号为0
MOVP0,#3FH
CLRP2.2
AJMPSAO1
;JIZONGSHU
NOSO:
MOVR2,#8
MOVA,R7
JI:
ANLA,#01H
JZNOJI
INCR4;加总数
MOV31H,A;保存A中的值
MOVA,#9H
CLRC
SUBBA,R2
MOVR1,A;床号
INCR1
MOVA,31H;恢复A
NOJI:
RRA
DJNZR2,JI
;总数显示
MOVA,R4
ADDA,#40H
MOVR0,A
SETBP2.1
MOVP0,R0
CLRP2.1
SETBP2.7;开蜂鸣
MOVTMOD,#01H;T0初始化
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR1,#21H
SETBTR0;启动T0
SMO:
MOVA,R1;床号显示
ADDA,#40H
SETBP2.2
MOVP0,A
CLRP2.2
MOV33H,#00H;初始化中断返回标志,
JCE:
MOVA,33H
CJNEA,#00H,SM0;T0中断返回显示床号
MOVR5,P1
MOVA,R5
CLRC
SUBBA,R7
JZJCE
CLRTR0
LJMPBTAO;检测到变化,跳至开始重新判断显示
;;;;;;;主程序结束
暂停程序:
;;;;PAUSE
ORG0900H
PAUSE:
CLRTR0
CLREA
PUSHPSW
PUSHACC
MOVC,P3.3;检查P3.3是否恢复为0
NCH:
JNCNCH
POPACC
POPPSW
SETBEA
SETBTR0
RETI
T0中断程序:
;;;;;;;T0中断
ORG0A00H
DINGSHI:
PUSHPSW
PUSHACC
MOVTH0,#3CH
MOVTL0,#0B0H
MOV33H,#01H;中断返回标志
MOVA,R4
ADDA,#20H
MOV32H,A
MOVA,R1
CJNEA,32H,BUXUN;如果显示到最后一个床号则循环显示
MOVR1,#21H
AJMPTC;循环开始显示I
BUXUN:
INCR1
TC:
POPACC
POPPSW
RETI
重新显示程序:
;;;;;;;;SHOW
ORG0B00H
SHOW:
CLRPX1;使T0中断能引发中断
MOV34H,R1
PUSH33H
MOV35H,R4
MOV36H,R0
PUSHACC
PUSHPSW
MOVTMOD,#01H;定时器T0初始化
MOVTH0,#3CH
MOVTL0,#0B0H
;;;;;ZONGXIAN
MOVA,R4
ADDA,#40H
MOVR0,A
SETBP2.1
MOVP0,R0
CLRP2.1
MOVR1,#21H
SETBTR0;开定时
SSS:
MOV33H,#00H;中断返回标志位初始化
MOVA,R1;床号显示
ADDA,#40H
SETBP2.2
MOVP0,A
CLRP2.2
DJNZR4,TTTT
SSSS:
MOVA,33H
CJNEA,#00H,SSS;T0中断返回,显示床号
AJMPSSSS
TTTT:
POPPSW
POPACC
POP33H
MOVR1,34H
MOVR4,35H
MOVR0,36H
SETBPX1
RETI