夜班防睡控制与记录.docx

上传人:b****3 文档编号:3899175 上传时间:2022-11-26 格式:DOCX 页数:16 大小:205.56KB
下载 相关 举报
夜班防睡控制与记录.docx_第1页
第1页 / 共16页
夜班防睡控制与记录.docx_第2页
第2页 / 共16页
夜班防睡控制与记录.docx_第3页
第3页 / 共16页
夜班防睡控制与记录.docx_第4页
第4页 / 共16页
夜班防睡控制与记录.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

夜班防睡控制与记录.docx

《夜班防睡控制与记录.docx》由会员分享,可在线阅读,更多相关《夜班防睡控制与记录.docx(16页珍藏版)》请在冰豆网上搜索。

夜班防睡控制与记录.docx

夜班防睡控制与记录

综合实验报告

 

实验题目:

夜班防睡控制与记录

学生班级:

学生姓名:

学生学号:

指导教师:

实验时间:

2016.9.18

 

目录

一、设计要求2

1、环境需求2

2、功能需求2

二、软件设计3

三、硬件设计7

1、各芯片使用及说明7

2、硬件设计原理13

3、实验线路连接14

四、程序调试与运行15

五、课设小结15

附A:

参考资料16

附B:

源程序17

附C:

硬件原理图22

夜班防睡控制、记录器的设计与功能实现

一、引言

1、设计内容

用单片机实现对值夜班人员的防睡控制和记录睡着时间与次数的功能。

2、功能需求

基本功能需求如下:

1)每10min用较柔和的声音提醒一次值班者,值班者按某一键后复位,计时重新开始。

2)若计到11min时无人按复位键,则以较急促的声音报警,黄灯闪烁,并每隔10min计数器加1。

3)当到60min时红灯闪烁,并仧尖锐的声音持续报警。

以LED显示时、分、秒。

则记录下这个时刻,以便管理者查看。

显示格式:

时、分、秒。

二、总体设计

本次课程设计采用的主要是模块化的设计思想,首先对夜间防睡控制/纪录器的每个功能模块进行详细的需求分析,需求分析完之后确定各个模块功能之后,建立各个需求的功能模块图,最后细化每个模块的功能。

根据细化后的功能模块图对每个模块编写相应的子程序,对每个功能模块进行测试,在成功测试每一个功能模块之后,然后进行整个程序的测试。

夜间防睡控制的功能模块图如下:

 

1、各芯片使用及说明

本次夜间防睡系统主要使用了的芯片为:

80C51(CPU),8155。

 

MCS-51CPU中的位处理器,是一个完整的1位微计算机,它有自己的CPU、位寄存器、I/O口和指令集。

这个1位机在开关决策、逻辑电路仿真、工业控制方面很有效;而8位机在数据采集、运算处理有优势。

二者相辅相成,是单片机技术上的1个突破。

 

本次实验中主要使用了该CPU的主要使用情况及介绍如下:

 

(A)单片机中主要的端口主要使用情况如下:

1)P0口:

双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可带8个LSTTL负载。

2)P1口:

8位准双向I/O口,可带4个

LSTTTL负载。

3)P2口:

8位准双向I/O口,与地址总线

(高8位)复用。

4)P3口:

8位准双向I/O口,双功能复用口。

本次实验中主要用到了P0口的情况如下:

P0.4

作为复位键,提醒值班人员

P0.5

查看值班人员睡眠次数

P0.6

查看夜班人员开始睡眠时间

P0.0

控制黄灯信号

P0.1

控制红灯信号

P0.7

作为喇叭发声的脉冲频率输出

 

(B)定时器(T0/T1)

定时器/计数器简称定时器,8051单片机内部有2个16位的可编程定时/计数器:

定时器0(T0)和定时器1(T1)。

可编程是指其功能(如工作方式、定时时间、启动方式等)可以由指令来确定和改变。

在定时器/计数器中除了有两个16位的计数器之外,还有2个特殊功能寄存器(控制寄存器TCON和方式寄存器TMOD)。

该硬件图如下:

 

(C)数据存储器(RAM)

片内为128B,片外最多可外扩64KB。

数据存储器来存储单片机运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等。

片内的128B的RAM,以高速RAM的形式集成在单片机内,可以加快单片机运行的速度,而且这种结构的RAM还可以降低功耗。

本次程序中主要使用的内存情况如下:

片内:

R0~R7(0区),30H以后的部分单元。

扩展的数据存储存储器:

30H~3FH作为显示单元内容的存储。

(D)特殊功能寄存器(SFR)

特殊功能寄存器共有21个,用于CPU对片内各功能部件进行管理、控制、监视。

实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

(D)控制显示的芯片介绍如下:

8155芯片使用了地址为0FF20H,0FF21,0FF22H,0FF23H地址。

主用用来驱动LED显示和扫描键盘。

扫描键盘时,各个端口的使用情况如下:

0FF20H为输出口,用来扫描字位口。

在AL中送0,使键盘所有的行线输出为0,用来检测键盘的输入。

0FF22H为输入口,用来扫描键盘输入。

使用IN指令,从端口地址中读取输入键盘列号。

在驱动LED显示的时候,各个端口的使用情况如下:

0FF22H(B口)作为输出口,主要用来控制LED显示的字型码,驱动LED显示字型(0-9)。

0FF21(A口)作为输出口,也叫字位口,用来控制第几个LED显示屏显示。

(E)8051的各个引脚介绍如下:

⑴电源引脚

电源引脚接入单片机的工作电源。

Vcc(40引脚):

接+5V电源。

Vss(20引脚):

接地。

⑵时钟引脚

2个时钟引脚XTAL1、XTAL2外接晶体与片内的反相放大器构成了1个振荡器,它为单片机提供了时钟控制信号。

2个时钟引脚也可外接独立的晶体振荡器。

XTAL1(19引脚):

接外部晶体的1个引脚。

该引脚内部是1个反相放大器的输入端。

这个反相放大器构成了片内振荡器。

如果采用外接晶体振荡器时,此引脚应接地。

XTAL2(18引脚):

接外部晶体的另一端,在该引脚内部接至内部反相放大器的输入端。

若采用外部时钟振荡器时,该引脚接收时钟振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。

⑶RST/Vpd(9引脚)

RST(RESET)是复位信号输入端,高电平有效。

当单片机运行时,在此引脚加上持续时间大于2个机器周期(24个时钟振荡周期)的高电平时,就可以完成复位操作。

在单片机正常工作时,此引脚应为<=0.5V低电平。

Vpd为本引脚的第二功能,即备用电源的输入端。

当主电源Vcc发生故障,降低到某一规定值的低电平时,将+5V电源自动接入RST端,为内部RAM提供备用电源,以保证片内RAM中的信息部丢失,从而使单片机在复位后能继续正常运行。

⑷ALE/PROG(AddressLatchEnable/PROGramming,30引脚)

ALE引脚输出为地址锁存允许信号,当单片机上电正常工作后,ALE引脚不断输出正脉冲信号。

当单片机访问外部存储器时,ALE输出信号的负跳沿用于单片机发出的低8位地址经外部锁存器锁存的锁存控制信号。

即使不访问外部锁存器,ALE端仍有正脉冲信号输出,此频率为时钟振荡器频率fosc的1/6。

如果想初步判断单片机芯片的好坏,可用示波器查看ALE端是否有正脉冲信号输出。

如果有脉冲信号输出,则单片机基本上是好的。

PROG为本引脚的第二功能。

在对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。

⑸PSEN(ProgramStrobeEnable,29引脚)

程序存储器允许输出控制端。

在单片机访问外部程序存储器时,此引脚输出脉冲负跳沿作为读外部程序存储器的选通信号。

此引脚接外部程序存储器的OE端。

PSEN端可以驱动8个LS型TTL负载。

⑹EA/Vpp(EnableAddress/VoltagePulseofProgramming,31引脚)

EA功能为内外程序存储器选择控制端。

当EA引脚为高电平时,单片机访问片内程序存储器,但在PC(程序计数器)值超过0FFFH时,即超出片内程序存储器的4KB地址范围时,将自动转向执行外部程序存储器内的程序。

当EA引脚为低电平时,单片机则只访问外部程序存储器,不论是否有内部程序存储器。

对于8031来说,因其无内部程序存储器,所以该引脚必须接地,这样只能选择外部程序存储器。

Vpp为本引脚的第二功能。

在对EPROM型单片机8751片内EPROM固化编程时,用于施加较高的编程电压。

对于89C51,则加在Vpp引脚的编程电压为+12V或+5V。

 

2、硬件设计原理

本次夜间防睡控制/记录的课程设计主要是利用了8031这块微处理器做为控制器来控制整个程序的执行。

本次课程设计除了控制程序执行的运算器和控制器之外,主要使用了该芯片的两个定时器。

其中定时器T0主要用来做为计时的控制,在该程序中用来产生100ms频率的脉冲,每次计数10次时为1s中。

采用的定时器T0的方式一。

装入的计数初值为:

3CB7H。

每次计数完成之后执行中断程序时要重新装入计数初值。

而定时器T1主要用来产生发生频率的控制,在该程序中用来产生不同频率的脉冲。

当然人儿能分辨的频率范围为:

20HZ~20000HZ,所以必须保证产生的频率在这个范围之内。

比如说,当频率为500HZ时,该频率范围的声音比较柔和。

我采用的该定时器T1的工作方式二,该方式能够自动重新装入计数初值。

喇叭的发声是在计时30s值班人员还没有按键的情况下,开始发声的,如果有人按复位键的话,喇叭发声停止,并且重新开始计数。

显示部分主要使用8155芯片来控制显示。

显示的LED采用的是动态扫描的显示方式动态显示。

各个端口的使用见硬件介绍部分。

3、实验线路连接

本次课程设计的连线比较简单,采用的连线如下:

1)P0.0连接开关SW1;

2)P0.1连接开关SW2;

3)P0.2连接开关SW3;

4)P0.7连接开关SW4;

5)P0.4连接开关SW5;

6)P0.5连接开关SW6。

三、程序调试与仿真

本次实时时钟设计主要采用的是模块化的设计思想。

所以首先必须对每一个模块进行单独的测试连接。

程序中测试的过程如下所述。

首先对计时单元进行测试。

首先编好计时单元模块之后进行调试。

看计时的脉冲是否准确,通过P1.3引脚输出的脉冲;连接示波器,观察屏幕上显示的脉冲频率,看是否为100ms的脉冲,结果频率为100ms,说明该频率通过了测试阶段。

接下来观察时钟的计时是否准确。

对秒中进行测试,观察秒钟的显示是否正确;如果9加1是为10秒;如果59加1秒,则应为1分钟;如果59分,59秒加1秒中,则为1小时;通过观察所有的测试均能够通过测试。

所有计时均能够通过测试的则整个计时功能模块均通过了测试。

然后继续测试。

测试发声模块。

当10s中如果能够听到发出柔和的声音,则通过了测试;按下键喇叭停止了发声。

当发生之后没有按下复位键且到了20s的话,说明值班人员还在睡觉,则发出急促的声音,并且黄灯同时闪烁;如果到了30s中还没有按键的话,则发出尖锐的声音,同时红灯开始闪烁,黄灯停止计时,直到值班人员醒来之后,在按复位键为止,同时值班人员可以查看红灯开始闪烁的时间。

如果这些都通过了测试,则整个程序就通过了测试,否则的话逐个测试各个功能模块的程序。

四、设计心的及体会

通过本次单片机课程设计的实践环节,我学会了不少东西。

本次课设让我对《单片机原理及应用》这一门课程有了更深刻的了解和认识。

这是一门综合性很强的课程,要能够顺利的实现实时时钟的全部功能,不仅要把这一门课程的基本理论学好,还要有良好的编程基础,尤其是C语言程序的编写。

如果没有这些基石作为铺垫,我想要夜间防睡控制的功能,将会寸步难行。

当然理论基础固然重要,但是如果没有较强的实践能力的话,我想要能够实现这些基本功能也会很困难的。

实验的过程中不可能是一帆风顺的。

在遇到问题的时候我们总是要去不断的思考,不断的探索。

如果没有刻苦钻研的精神,半途而费,那么我们将会没有收获,问题将不能得到解决。

我想这次课程设计不仅让我学到了更多的知识,更重要的是学会了如何去思考问题,解决问题。

实践出真知。

通过本次课程设计我想在以后的学习和工作过程中我会受益匪浅。

最后,我想感谢老师的指导及帮助过我的同学。

五、参考文献

[1]《单片机原理及应用》(第二版)人民邮电出版社

[2]《电子电路Protel98实用教程》邓胡滨中国水利水电出版社

附录:

源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineSEGP0//数码管接P0

uintcount_T0,count;//计数,定时.

ucharflag10,flag11,flag60,seconds,minutes,jishuqi;

ucharcodeTAB[]={0xc0,0xf9,0xb0,0x99,0x92,0x82,0xf8,0x98};//5-9

uchardisp[6]={0,0,0,0,0,0};//显示数组

sbitredled=P1^0;//红灯接P1.0

sbityewled=P1^1;//黄灯接P1.1

sbitspeaker=P3^7;//音响.

sbitkey=P3^2;//复位键

voidinit(void);//声明初始化函数

voiddelay1ms(uchar);//延时函数

voidscanner(uchar);//显示函数

voidway(void);//状态函数

main()

{

init();

for(;;)

{

scanner

(1);//一直显示.

if(flag10)//10分到.

way();//进入状态

}

}

voidinit(void)

{

EA=1;

ET0=1;

ET1=1;

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-count)/256;

TL1=(65536-count)%256;

TR0=1;

speaker=1;

key=1;

count_T0=0;

count=1980;//声响音调.柔和.

seconds=0;minutes=0;

flag10=0;//提醒标志.

flag11=0;//黄灯闪烁标志.

flag60=0;//红灯闪烁标

jishuqi=0;}

voidscanner(uchary)

{

uchari,j,scan;

for(j=0;j

{

scan=0x01;

for(i=0;i<6;i++)

{

SEG=0xff;//防闪烁.

P2=~scan;

SEG=TAB[disp[i]];

delay1ms

(1);

scan=scan<<1;

}

}

}

voidtimer0(void)interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(++count_T0==20)//1S到.

{

count_T0=0;

seconds++;

if(seconds==60)

{

seconds=0;

minutes++;

}

if(minutes==10)//10分钟到.

flag10=1;

if(minutes==60)

minutes=0;

}

disp[0]=minutes/10;//分离显示.

disp[1]=minutes%10;

disp[2]=seconds/10;

disp[3]=seconds%10;

disp[4]=jishuqi/10;

disp[5]=jishuqi%10;

}

voidtimer1(void)interrupt3

{

TH1=(65536-count)/256;

TL1=(65536-count)%256;

speaker=~speaker;

if(flag11)

{

yewled=~yewled;//红灯闪烁.

if((minutes%10)==1)//判断是否隔10分

jishuqi++;//是,记数器加1

}

if(flag60)//60分到.

redled=~redled;//红灯闪烁.

}

voidway(void)

{

TR1=1;//开音响.

if(key==0)//有键按下.

{

scanner

(2);//延时.

if(key==0)//再次判断.

{

minutes=0;//确认按下.分清0

seconds=0;//秒清0

TR1=0;//关音响.

flag10=0;

}while(key==0)scanner

(1);//等待退出.

}if(TR1)//无键按下.

{

if(minutes==11)//11分钟到.

{

count=956;//急促

flag11=1;//开黄灯闪烁标志

if(key==0)//有键按下.

{

scanner

(2);//延时.

if(key==0)//再次判断.

{

minutes=0;//确认按下.分清0

seconds=0;//秒清0

TR1=0;//关音响.

jishuqi=0;

flag10=0;

flag11=0;

}

while(key==0)scanner

(1);//等待退出.

}

}

}

if(TR1)

{

if(minutes==60)//60分钟到.

{

count=478;//尖锐

flag60=1;//开红灯产闪烁标志.

if(key==0)//有键按下.

{

scanner

(2);//延时.

if(key==0)//再次判断.

{

minutes=0;//确认按下.分清0

seconds=0;//秒清0

TR1=0;//关音响.

jishuqi=0;

flag10=0;

flag11=0;

flag60=0;

}

while(key==0)scanner

(1);//等待退出.

}}}}

voiddelay1ms(uchary)

{

uchari,j;

for(i=0;i

for(j=0;j<120;j++);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1