电气与信息工程学院
单片机课程设计报告
设计题目:  病人呼叫器 
        业:
    电子科学与技术
  名:
      张超       
        级:
    电科2     
  师:
      谭兮       
        绩:
                 
    2016      11 21
报告内容主要包括:
一、 设计任务及要求
1.住院病人可通过按动自己的床位按扭开关向医护人员发出“呼喊”信号
   2.一旦有病人发出“呼喊”信号,医护人员值班室显示床位编号,扬声器
发出提示声响信号; 
3.“呼喊”器所需的直流稳压电源。 4.用相关仿真软件对电路进行仿真。
二、 硬件电路设计
(提供主要的电路原理图,并进行必要的文字说明)
1)按钮开关电路
键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等,本文按钮开关电路如图2所示
               
  按钮开关电路采用低电平有效。通过单片机检测P1口状态分别判断是几号按钮(病床)按下按钮。该电路总共采用7路,分别代表7个病床,如果想要扩展,可在该基础上进行扩展。此处为了便于设计,采用7路按钮开关。
2)单片机控制及显示电路
单片机控制及显示电路如图3所示。采用静态显示方式,利用单片机的P0口的P0.0P0.6作为数码管七段码的输入。采用共阳极数码管 (见图3)。单片机检测到按键信号,通过内部程序处理进行相应病床的显示。
声音报警电路
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的巨型波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。本文设计声光报警电路见图4。当有按键按下时,单片机从P1.7口输出一周期高低信号,控制三极管的通断,从而使扬声器通断,发出一定周期的音频报警信号。报警时间为5S
3)外部震荡电路
单片机必须在时钟的驱动下才能工作,在单片机结构内部有一个时钟振荡电路,只需要外部接一个震荡源就能产生一定的时钟信号,送到单片机内部的各个单元,决定单片机的工作速度。如图5
一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数。图中时钟频率为12MHz
4)单片机复位电路
单片机的第9RST为硬件复位端,只要将该端持续4个机器周期的高电平,即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图6
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
5)显示电路
显示电路使用了七段数码管,它是共阳极的,由低电平点亮.
系统软件流程图如图7所示。采用检测端口形式,当P1.0—P1.6有低电平输入。即做相应处理。  当检测到按键1按下时,扬声器发出间断的“嘟、嘟、嘟”声,共阳数码管显示1,说明是1病床按下呼叫按键,当检测到按键2按下时,扬声器发出间断的“嘟、嘟、嘟”声,共阳数码管显示2,说明是2病床按下呼叫按键,当检测到按键,3按下时,扬声器发出间断的“嘟、嘟、嘟”声,共阳数码管显示3,说明是3病床按下呼叫按键。如此类推。
三、 系统软件设计
(软件设计说明,并附原程序,程序加必要的注释)
      软件设计流程图
附带源程序
#include<reg52.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<intrins.h>
#include<string.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit com1=P1^0;
sbit com2=P1^1;
sbit com3=P1^2;
sbit com4=P1^3;
sbit com5=P1^4;
sbit com6=P1^5;
王文杰sbit com7=P1^6;
sbit SPK=P1^7;  //管脚说明
uint i,j;
void baojing(uchar yin,uchar xian);
void display(uchar xian);
void init();
void delay(uint z)
{
uint x,y;
for(x=20;x>0;x--)
for(y=z;y>0;y--);
}
void main() //主程序
{
while(1)
{
if(com1==0)
delay(5);  //持续5s
if(com1==0)
{
baojing(14,1);
}
if(com2==0)
delay(5);
if(com2==0)
{
baojing(14,2);
}
if(com3==0)
delay(5);
if(com3==0)
{
baojing(14,3);
}
if(com4==0)
delay(5);
if(com4==0)
{
baojing(14,4);
}
if(com5==0)
delay(5);
if(com5==0)
{
baojing(14,5);
}
if(com6==0)
delay(5);