目录
摘 要 1
ABSTRACT 2
第一章 绪论 4
1.1课题的选题背景 4
1.2国内外发展现状 5
1.3本论文主要研究内容 6
1.3.1主要内容 6
1.3.2基本要求 7
第二章 学生视力保护仪总系统设计 8
2.1系统总框图 8
2.2单片机的选择 8
2.3传感器的选择 9
2.4编程语言的选择 9
第三章 系统硬件电路的设计 11
3.1系统硬件总电路构成 11
3.2单片机系统 11
3.2.1单片机引脚介绍 12
3.2.2单片机最小系统 16
3.3显示系统 17
3.3.1 LED提示电路 17
3.3.2数码管显示 18
3.4蜂鸣器报警电路 19
3.5按键电路 20
3.6光敏模块电路 22
3.7测距电路 23
第四章 系统软件程序的设计 25
4.1Keil C51软件平台 25
4.2程序的模块化划分 26
第五章 结论及展望 28
参考文献 29
附录 A 31
附录 B 32
致 谢 38
1.3本论文主要研究内容
1.3.1主要内容
以51单片机为核心处理器、LM393电压比较器、光敏电阻、数码管等构成一款智能视力保护仪设计。鉴于单片机芯片的智能处理功能本设计采用理论计算和实验验证的方法相结合的以单片机芯片为核心的主体电路。首先是对各单元电路进行设计,并选择合适的元器件。在选择元器件时,要注意所选芯片的性价比,对于电阻、电容等常用元件要先进行参数计算后再选择。其次是设计整个电路,其中单片机芯片选用较为普遍的stc89c51型,红外测距选用利用光电反射累的,红外测距尾部有个电位器可以调节感应距离(0~80cm),当距离小于调节设定的距离时小灯快速闪烁同时蜂鸣器响提示,当光线过强或过弱时,也会提示;数码管显示时间,当时间到45分钟时,数码管和小灯闪烁,蜂鸣器滴滴提示,此时按下按键即可休息,防止过度伤身;当休息回来时,再按下按键此时系统又重新开始工作。设计利用红外测距传感器实在对距离的测量,比超声波测距更加可靠准确、健康安全。
1.3.2基本要求
1.当使用者脸部与桌面或电脑等之间的距离小于25CM(距离可以适当调整)时,电路将发出声光提示;
2.当使用时间达到45分钟时,电路自动发出声音提示,数码管闪烁,提醒使用者注意休息;
3.当读写环境光线照度不足或过强时,电路将发出声光提示;
4.感应环境光线的范围是可以调节的,实现智能化;
5.电路可靠,设计小巧省电,并且能够实现相应的功能。
真正帮助学生做到国家教委规定:学生在读写时,应在一定亮度下,眼离读物一尺,身离书桌一拳,时间不超过45分钟。
第二章 学生视力保护仪总系统设计
2.1系统总框图
硬件主要以STC89C51型单片机为核心,功能电路主要包括传感器辅助坐直报警电路、光线报警电路、定时报警电路以及蜂鸣器报警电路等核心电路。利用C语言进行编程。本设计的系统总框图如图2-1所示。
图2-1 系统总体框图
2.2单片机的选择
从控制系统的大小和复杂度出发,必须考虑单片机的基本参数和增强功能。前者往往需要考虑芯片的速度,ROM容量,I/O引脚数量和工作电压(1.8V/3V/5V)等,后者则包括是否拥有看门狗,双指针,双串口,实时时钟,CAN接口,SPI接口,USB接口等附加模块。本设计中受控对象只有超声波、声光报警,复杂度低,采用低端的通用的单片机芯片就能够满足要求。
从容易学习掌握的角度出发,要求所选单片机支持简单易学的编程语言,并且拥有软件支持的良好编程环境。同时还应当有丰富的资料支持,包括详尽的芯片说明书,应用指南,设计方案,范例程序等。
从工作可靠性的角度出发,要求所选芯片有较宽工作温度范围,较低的功耗和一定的抗干扰能力。按适用的工作温度分,常用单片机芯片可分为商用级、工业级、军品级,这里选择一般的商用机即可。在功耗和抗干扰方面,本控制系统的要求都不高,一般的单片机芯片都能满足要求。
综上所述,本系统选择STC89C51单片机作为主控芯片。足够本设计运行,且价格便宜,下载程序方便。
2.3传感器的选择
在测距模块中,常用超声波测距,它的原理是利用超声波的发射与接收,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距的两端,一端发射,另一端接受的直接波方式,适用于身高计;一种是发射波被物体发射回来后接收的反射波方式,适用与测距仪。本设计主要是测距要选用得体,要准确无误,通过查阅资料感觉利用超声波测距的设计较多,但是稳定性不是很好,所以决定采用光电式测距传感器,主要应用在生产加工等精密场合,稳定性极高。所以本设计选用光电式红外测距传感器。
在感光模块中,采用光敏电阻与LM393构成的电压比较器来构成感光模块的主要部分。通过对电压的采集,来实现智能化。
2.4编程语言的选择
对于指令系统兼容MCS51系列的单片机,其较为常用的编程语言有C和汇编语言。
C语言是一种结构化编程语言,可产生压缩代码。C语言在硬件结构上仅要求对单片机存储器等硬件结构有初步了解,寄存器分配,不同存储器寻址及数据类型等细节可由编译器管理。C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可以在不同种类的单片机之间相互移植。程序可划分为不同函数,结构规范,可读性强。C语言提供的库包含许多标准子程序,具有很强的数据处理能力。C语言作为一种方便、容易掌握的语言得到了广泛的应用,是目前单片机编程中应用最多的语言之一。
汇编语言同样在单片机编程中得到了广泛的应用,其具有简单实用,控制灵活,实时性强,程序效率高等特点。汇编语言有着极强的硬件控制能力,用其它的高级语言所无法控制的软硬件细节,在汇编语言中都可以实现,但是编程复杂。
综合考虑,软件的设计语言选择C语言。
#include<reg52.h>
#include<intrins.h>
#include<absacc.h> //头文件
#define uc unsigned char
#define ui unsigned int
sbit HW=P2^2; //红外感应
sbit BJS=P2^1; //报警声音
sbit BJG=P2^7; //报警光/指示灯/秒灯
sbit key=P2^0; //按键
sbit GQ=P2^4; //光线强感应
sbit GR=P2^6; //光线弱感应
bit bdata flag,flag1;
uc sec,min;
uc code tab[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7}; //gcpdebfa
//11010111
void delay(ui x)
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void work()//工作函数
{
if(flag1==0)
{
if(HW==0||GQ==1||GR==1)//红外、强、弱
{
delay(20);
if(HW==0||GQ==1||GR==1)
{
flag=1;
}
}
else
flag=0;
if(key==0)
{
delay(20);
if(key==0)
{
TR0=1;
BJG=0;
}
while(key==0);
BJG=1;
}
}
else if(flag1==1)
{
TR0=0;
if(key==0)
while(key==0);
BJG=1;
}
}
}
void display()
{
if(BJS==1)
{
P0=0x00;
P1=0xfe;
P0=tab[min/10];
delay(5);
P0=0x00;
P1=0xfd;
P0=tab[min%10];
delay(5);
P0=0x00;
P0=0x20;//小数点
P1=0xfd;
delay(5);
P0=0x00;
P1=0xfb;
P0=tab[sec/10];
delay(5);
P0=0x00;
P1=0xf7;
P0=tab[sec%10];
delay(5);
P0=0x00;
}
else
{
P1=0xff;
}
}