智能护眼仪研究报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能护眼仪研究报告
摘要
本设计制作是一种预防近视的智能装置。

主要用来纠正使用者工作或学习时的坐姿,并可在使用者连续工作学习时间过长时,提醒使用者休息,从而达到预防近视的目的。

本设计制作以89S52单片机为主控芯片,利用超声波传感器感知人体与装置的距离,使用语音芯片进行语音提醒,且语音提醒内容可自定义。

一旦使用者与桌面的距离超过系统设定的最小距离,就会产生例如“请注意坐姿”的语音提示,提醒使用者纠正坐姿;一旦使用者工作学习时间超过系统设定的时间,就会产生例如“请注意休息”的语音提示,提示使用者注意休息。

同时,该装置可实时显示人体与设备之间的距离,方便使用者判断人体与装置之间的距离。

本设计制作无辐射,结构简单、成本较低、操作简单,适用于各类消费人群,可有效预防近视,具有很好的市场前景。

关键词:预防近视;单片机;超声波传感器;语音提醒
研究目的及现实意义
目前,我国近视发病率从1998年的世界第四位上升到世界第二位。

据教育部和卫生部的调查显示,全国现有盲人500多万,低视力者600多万,儿童斜弱视者1000万。

我国近视患者人数已达4.3亿,占总人口比例的33.6%,并显现出“总体人数越来越多”的趋势。

今年公布的最新数据显示,我国青少年近视发病率平均达40%,大学生近视率远远超过70%。

“冰冻三尺,非一日之寒”,我国青少年视力不良、近视发病率高居不下是一个逐步发展过程,而且伴随着迅猛的都市化、现代化进程,近视发病率还有加速趋势。

对于学生而言,一旦近视,要比同龄学生多付出30%的努力,近视产生的视物模糊、眼睛干涩酸痛、精神难以集中以及情绪烦躁甚至头晕等现象,会让学生比视力正常的学生多付出30%的时间和脑力劳动量,在学习上花费更长的时间,但是取得的效果却是很微小。

不仅如此,在升学的时候还会有多个专业报考受限,每年都有大批的考生,因为近视被限报专业拒之门外,涉及到电子信息、生物工程、医学制药、飞行、航海技术等近30个专业,严重影响孩子的人生职业规划。

对于上班族而言,一旦近视会使其工作效率迅速降低,长期的工作不在状态,会使其在领导心中的形象大大的打了折扣,时间久了,自然会失去工作。

而且对于有些岗位,对于工作者本身的形象也是有着很高的要求,因此近视同样影响着求职者的职场规划。

引起近视的原因很多,但在生长发育期,眼睛看近(一般指5米以内的范围)过度和近视的发生有明显的因果关系,而且看的距离越近,持续的时间越长,这种因果关系越明显。

因为连续长时间看近不休息,眼球内的睫状肌长期持续收缩,可先形成调节痉挛,眼睛酸胀疲劳,以后进一步发展出现眼球前后径增长,而成为近视眼。

可见,眼保护的重点是近视防控,避免近距离用眼时间过长。

本设计装置就是在使用者平时的学习工作中,起着监督提醒的作用,督促其保持用眼距离,注意用眼休息。

本设计结构简单,成本较低,操作方便。

市场调研
为考察本设计的新型性和实用性,我们在各个网站、中国国家知识产权局专利检索网站和现实生活中均未发现与本设计相类似的技术。

目前,我国市场中有不少预防近视的产品,但多是依附人体存在,增加了使用者的负担,长期使用会对人体产生一定的影响。

在进行距离测量时,大多利用红外线传感器测距,但红外线对眼睛有一定的影响,长期使用会对眼睛造成伤害。

本设计制作将装置安装于桌面,利用超声波测距,有效地避免了上述缺点,而且无辐射、结构简单、使用方便、易于操作、成本较低、适用人群广,因此推广前景良好。

基本设计思路
智能护眼仪的主要任务是用于预防近视,利用超声波传感器测量出人体与本装置之间的距离,从而判断出人体的坐姿是否正确,一旦超过系统所设定的防护距离,系统就会自动发出自定义的语音提示,提醒使用者及时纠正坐姿,规范用眼;装置一旦通电,就会自动开启计时功能,如若使用者学习工作时间过久,系统同样会自动发出自定义的语提示,提醒使用者要注意休息,合理用眼。

同时,本装置可实时显示人体与设备之间的距离。

硬件方面,系统框图见图1。

本设计制作包括单片机最小系统模块、测距模块、语音模块、显示模块四个部分。

选用ATMEL公司的AT89S52单片机作为控制器的核心,控制系统的运行;以HC-SR04超声波传感器,实现装置与人体的距离的测量;语音提醒模块选用ISD1760语音芯片,实现语音的录制和播放;由七段数码管实现眼睛与本装置距离的实时显示。

硬件原理图见附录1。

图1 系统框图
软件方面,主要设计思路见图2系统总流程图。

系统上电后,首先对各模块进行初始化,并播放第一段录音,第一段录音播放完毕后,采集人体与装置的距离,若距离小于50cm,则播放第二段录音,距离大于50cm,则判断使用者坐于桌面前的时间是否大于1分钟(为便于观察,特设1分钟,实际可以任意设置时间的长短),若大于1分钟,则播放第三段录音,否则重新开始检测距离,如此循环进行。

程序见附录3。

图2 系统总流程图
与现有预防器相比本预防仪的优点
本智能护眼仪与传统护眼产品相比,有很多优点。

具体体现在以下几点:
1、本设计装置在使用时只需放置在使用者工作学习的桌面上,打开电源即可,使用方便。

2、本设计装置以单片机为主控芯片,利用超声波传感器测量出人体与本设计装置之间的距离,从而判断出使用者的坐姿是否符合标准,对人体无伤害。

3、本设计装置带有自定义语音功能,使用者可以根据自己的喜好录下自己需要的语音提示。

该设计更具有人性化,符合现代消费人群的需求。

4、本设计装置能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。

可录、放音十万次,存储内容可以断电保留一百年。

5、本设计装置带有自动计时功能,当使用者工作或学习时间过久,会自动产生语音提示,提醒使用者要及时休息,注意健康用眼。

6、本设计装置适合于各类有需要的人群,只需改变其高度即可,操作简单。

7、本设计装置结构简单,成本较低,操作方便,易于携带,适合任何场合的使用。

8、本设计装置还可放置在电脑电视前,能够起到相同的提醒作用。

9、本设计装置可以和台灯、时钟、玩具等生活学习用品相结合,在今后的商业领域有着广阔的发展前景。

使用说明
本设计装置使用起来十分的简单方便。

使用前,将本设计装置放置在使用者工作学习的桌面正前方,开通电源即可。

如果使用者需要自己录音,只需在语音芯片上将原始录音擦出,再录入自定义的语音即可。

参考文献
[1] 谢锋云.基于红外测距技术的预防近视系统设计[M].
[2] 张毅刚.新编MCS—51单片机应用设计第三版[M].
[3] 吴学中.基于AT89S52和ISD1760的水闸语音报警系统设计[J].
附录附录1电路原理图
附录2 器件参数表
附录3 程序
#include"reg51.h"
unsigned char code
TABLE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; #include "ISD1700.H"
#include "sound.h"
#define uchar unsigned char
#define uint unsigned int
extern void PlaySoundTick(uchar number);
extern void spi_pu (void);
extern void spi_play(void);
extern void spi_fwd (void);
sbit L0=P2^4;//SEC
sbit L1=P2^3;
sbit L2=P2^2;
sbit L3=P2^3;
sbit L4=P2^4;
sbit L5=P2^5;
sbit RX=P1^1; //echo
sbit TX=P1^2; //trig
sbit led=P3^5;
sbit Speeker=P3^7;
//sbit ledb=P3^0;
sbit ledc=P3^1;
sbit ledd=P3^2;
unsigned int Msec=0,Distance=0;
unsigned char Sel=0,flag=0;
unsigned int timer=0;
unsigned int S=0,time=0,PlayS=0;
void DelayMs(unsigned int z) //基本上是z赋值为1就对应1ms {
unsigned int a,b;
for(a=z; a>0; a--)
for(b=110; b>0; b--);
}
void Display(void)
{
switch(Sel)
{
case 0:
P2=0xFF;
L0=0;
P0=TABLE[Distance%100%10]; // 个位
Sel=1;
break;
case 1:
P2=0xFF;
L1=0;
P0=TABLE[Distance%100/10]; // 十位
Sel=2;
break;
case 2:
P2=0xFF;
L2=0;
P0=TABLE[Distance/100]; // 百位
Sel=0;
break;
}
}
unsigned char ScanTimes=0,GetTimes=0,OutTimes=0; unsigned int PlayTimes=0,RestTimes=0;
void time1 (void)interrupt 3
{
static unsigned int t=0;
TR1=0;
TH1=0xf8; //赋初值,应该是2ms?
TL1=0x30;
timer++;
ScanTimes++;
if(ScanTimes>=2)
{
ScanTimes=0;
Display(); //数码管显示
}
t++;
if(t>=500)
{
t=0;
RestTimes++;
}
GetTimes++;
OutTimes++;
PlayTimes++;
/*
if(timer>=400)
{
timer=0;
TX=1; //800MS 启动一次模块
Delay(30); //一次超声波信号时长30ms
TX=0;
}*/
TR1=1;
}
unsigned int a=0,b=0;
void Conut(void)///////////计算程序
{
time=TH0*256+TL0;
TH0=0; //定时器0的初始值为0
TL0=0;
S=(time*1.845)/100;
//time*12*170/(11.0592*1000)mm=time*1845/10000 mm if (S>=500) //最大距离5m,即500cm
S=888;
if (flag==1) //判断是否溢出
{
S=999;
TH0=0;
TL0=0;
}
a=S;
Distance=S;
}
/********************************************************/ void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{
flag=1; //中断溢出标志
}//这是最重要的计时0中断,TH0和TL0初始值为0
//主函数
bit PlayFlag=0;
void main(void)
{
TMOD=0x11; //设T0为方式1,GATE=1
TH0=0; //目的都是用中断T0和T1
TL0=0; //中断0初始化
TH1=0xf8; //2MS定时
TL1=0x30;
ET0=1; //允许T0中断
ET1=1; //允许T1中断
TR1=1; //开启定时器
EA=1; //开启总中断
Sel=1;
Distance=0;
spi_pu();
DelayMs(100);
PlaySoundTick(0);//播放第一段
PlayTimes=0;
while(PlayTimes<3000);//等待语音播放完毕
RestTimes=0;
while(1)
{
if(GetTimes>=50)//采集距离的时间间隔
{
ledc=~ledc;
TR0=0;
TH0=0;
TL0=0;
timer=0;
TX=1; //800MS 启动一次模块
DelayMs(30); //一次超声波信号时长30ms
TX=0;
OutTimes=0; //超时计数器
while(!RX && (OutTimes<40) );
if(OutTimes!=40)
{
ledd=~ledd;
OutTimes=0;
TR0=1; //开启计数 while(RX && (OutTimes<40) ); //当RX为1计数并等待
if(OutTimes!=40)
{
TR0=0; //关闭计数
Conut(); //计算
if(Distance<50)
{
Speeker=~Speeker;
if(PlayFlag==0)
{
PlaySoundTick(1);//播放第二段
PlayTimes=0;
while(PlayTimes<2000);//等待语音播放完毕
}
PlayFlag=1;
}
else
{
Speeker=1;
PlayFlag=0;
}
if(RestTimes>=1*60)
{
RestTimes=0;
PlaySoundTick(2);//播放第三段
PlayTimes=0;
while(PlayTimes<2000);//等待语音播放完毕
}
led=~led;
}
}
GetTimes=0;
}
}
}
//#pragma src
#include "reg51.h"
#include "ISD1700.H"
#include "sound.h"
#define uchar unsigned char #define uint unsigned int
sbit ISD_SS=P1^7;
sbit ISD_MISO=P1^6;
sbit ISD_MOSI=P1^5;
sbit ISD_SCLK=P1^4;
bit re_fig;
uchar data ISD_COMM_RAM[7]; uchar data ISD_COMM_RAM_C[7]; uchar data *isd_comm_ptr; uchar data *back_data_ptr;
void init(void);
void delay(int x);
void rest_isd_comm_ptr(void);
uchar T_R_comm_byte( uchar comm_data );
void isd1700_par2_comm(uchar comm_par, uint data_par);
void isd1700_Npar_comm(uchar comm_par,comm_byte_count); //no parameter comm
void isd1700_7byte_comm(uchar comm_par, uint star_addr, uint end_addr);
void spi_pu (void);
void spi_stop (void);
void spi_Rest ( void );
void spi_CLR_INT(void);
void spi_RD_STAUS(void);
void spi_RD_play_ptr(void);
void spi_pd(void);
void spi_RD_rec_ptr(void);
void spi_devid(void);
void spi_play(void);
void spi_rec (void);
void spi_erase (void);
void spi_G_ERASE (void);
void spi_wr_apc1 (void);
void spi_wr_apc2 (void);
void spi_wr_nvcfg (void);
void spi_ld_nvcfg (void);
void spi_fwd (void);
void spi_chk_mem(void);
void spi_CurrRowAddr(void);
void seril_back_sate(uchar byte_number);
void spi_set_opt(uchar spi_set_comm);
/*
//串口通信接口函数
void comm_sate(void)
{
uchar sate_temp;
uint apc_temp;
if(RI) //接收到命令
{ sate_temp=SBUF; //下面根据不同的命令执行不同的函数
if(sate_temp==0x09)
{ spi_devid();}
if(sate_temp==0x44)
{spi_rd_apc();}
if(sate_temp==0x40)
{spi_play();}
if(sate_temp==0x04)
{spi_CLR_INT();}
if(sate_temp==0x05)
{spi_RD_STAUS();}
if(sate_temp==0x43)
{ spi_G_ERASE();}
if(sate_temp==0x01) { spi_pu ();}
if(sate_temp==0x02)
{ spi_stop();}
if(sate_temp==0x03) { spi_Rest ();}
if(sate_temp==0x06)
{spi_RD_play_ptr();}
if(sate_temp==0x07)
{spi_pd();}
if(sate_temp==0x08)
{ spi_RD_rec_ptr();}
if(sate_temp==0x41)
{ spi_rec();}
if(sate_temp==0x42) { spi_erase();}
if(sate_temp==0x45)
{spi_wr_apc1 ();}
if(sate_temp==0x65)
{ spi_wr_apc2 ();}
if(sate_temp==0x46)
{ spi_wr_nvcfg ();}
if(sate_temp==0x47)
{ spi_ld_nvcfg ();}
if(sate_temp==0x48)
{ spi_fwd ();}
if(sate_temp==0x49)
{ spi_chk_mem();}
if(sate_temp==0x60)
{ spi_CurrRowAddr();} if(sate_temp==0x80)
{
spi_set_opt(ISD1700_SET_PLAY|ISD_LED);
//spi_set_opt(ISD1700_SET_PLAY);
}
if(sate_temp==0x81)
{
spi_set_opt(ISD1700_SET_REC|ISD_LED);
//spi_set_opt(ISD1700_SET_REC);
ISD_COMM_RAM_C[0]=ISD1700_SET_REC ;
seril_back_sate(1);
}
if(sate_temp==0x82)
{
spi_set_opt(ISD1700_SET_ERASE|ISD_LED);
//spi_set_opt(ISD1700_SET_ERASE);
}
if(sate_temp==ISD1700_WR_APC2)
{
RI=0;
while(!RI);
apc_temp=SBUF;
apc_temp=apc_temp<<8;
RI=0;
while(!RI);
apc_temp|=SBUF;
RI=0;
ISD_SS=0;
isd1700_par2_comm(ISD1700_WR_APC2,apc_temp); ISD_SS=1;
}
RI=0;
}
if(re_fig)
{
rest_isd_comm_ptr();
sate_temp=0;
do{
SBUF=*back_data_ptr++;
while(!TI);
TI=0;
}while(++sate_temp<=2);
re_fig=0;
}
}
*/
/********************************************************* *********/
/*******以下为ISD各子功能函数,详细请查阅ISD语音芯片数据手册******/
/*
//设置函数
void spi_set_opt(uchar spi_set_comm)
{
uint start_addr,end_addr;
RI=0;
while(!RI);
start_addr=SBUF;
start_addr=start_addr<<8;
RI=0;
while(!RI);
start_addr|=SBUF;
RI=0;
while(!RI);
end_addr=SBUF;
end_addr=start_addr<<8;
RI=0;
while(!RI);
end_addr|=SBUF;
RI=0;
ISD_SS=0;
isd1700_7byte_comm(spi_set_comm, start_addr, end_addr);
ISD_SS=1;
}
*/
//器件上电
void spi_pu (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_PU,2);
ISD_SS=1;
}
//器件停止
void spi_stop (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_STOP,2);
ISD_SS=1;
ISD_COMM_RAM_C[0]=ISD1700_STOP ;
seril_back_sate(1);
}
//器件复位
void spi_Rest (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_REST,2);
ISD_SS=1;
}
//清楚EOM标志
void spi_CLR_INT(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_CLR_INT,2);
ISD_SS=1;
}
//器件状态
void spi_RD_STAUS(void)
{
uchar i;
ISD_SS=0;
isd1700_Npar_comm(ISD1700_RD_STAUS,3);
ISD_SS=1;
i=ISD_COMM_RAM_C[1];
//j=ISD_COMM_RAM_C[2];
ISD_COMM_RAM_C[1]=ISD_COMM_RAM_C[0];
ISD_COMM_RAM_C[0]=i;
seril_back_sate(3);
}
//当前地址
void spi_CurrRowAddr(void)
{
uchar i;
ISD_SS=0;
isd1700_Npar_comm(ISD1700_RD_STAUS,3);
ISD_SS=1;
i=ISD_COMM_RAM_C[1];
ISD_COMM_RAM_C[1]=ISD_COMM_RAM_C[0]>>5|ISD_COMM_RAM_C[1 ]<<3;
ISD_COMM_RAM_C[0]= i >>5;
seril_back_sate(3);
}
//读播放地址
void spi_RD_play_ptr(void)
{
uchar i;
ISD_SS=0;
isd1700_Npar_comm(ISD1700_RD_PLAY_PTR,4);
ISD_SS=1;
i=ISD_COMM_RAM_C[3]&0x03;
ISD_COMM_RAM_C[3]=ISD_COMM_RAM_C[2];
ISD_COMM_RAM_C[2]=i;
seril_back_sate(4);
}
//器件掉电
void spi_pd(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_PD,2);
ISD_SS=1;
}
//读录音地址
void spi_RD_rec_ptr(void)
{
uchar i;
ISD_SS=0;
isd1700_Npar_comm(ISD1700_RD_REC_PTR,4);
ISD_SS=1;
i=ISD_COMM_RAM_C[3]&0x03;
ISD_COMM_RAM_C[3]=ISD_COMM_RAM_C[2];
ISD_COMM_RAM_C[2]=i;
seril_back_sate(4);
}
//器件ID
void spi_devid(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_DEVID,3);
ISD_SS=1;
ISD_COMM_RAM_C[2]=ISD_COMM_RAM_C[2]&0xf8;
seril_back_sate(3);
}
//播放当前
void spi_play(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_PLAY|ISD_LED,2);
ISD_SS=1;
}
//开始录音
void spi_rec (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_REC|ISD_LED,2);
ISD_SS=1;
ISD_COMM_RAM_C[0]=ISD1700_REC ;
seril_back_sate(1);
}
//擦除当前
void spi_erase (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_ERASE|ISD_LED,2);
ISD_SS=1;
}
//擦除全部
void spi_G_ERASE (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_G_ERASE|ISD_LED,2);
ISD_SS=1;
}
//返回状态寄存器信息
void spi_rd_apc(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_RD_APC,4);
ISD_SS=1;
seril_back_sate(4);
}
//写寄存器
void spi_wr_apc1 (void)
{
}
void spi_wr_apc2 (void)
{
ISD_SS=0;
isd1700_par2_comm(ISD1700_WR_APC2, 0x0400);
ISD_SS=1;
}
//将APC内容写入NVCFG
void spi_wr_nvcfg (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_WR_NVCFG,2);
ISD_SS=1;
}
////将NVCFG内容写入APC
void spi_ld_nvcfg (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_LD_NVCFG ,2);
ISD_SS=1;
}
//下一段
void spi_fwd (void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_FWD,2);
ISD_SS=1;
}
//检查环状存储体
void spi_chk_mem(void)
{
ISD_SS=0;
isd1700_Npar_comm(ISD1700_CHK_MEM,2);
ISD_SS=1;
}
//状态返回
void seril_back_sate(uchar byte_number)
{
uchar sate_temp;
rest_isd_comm_ptr();
sate_temp=0;
/*
do
{
SBUF=*back_data_ptr++;
while(!TI);
TI=0;
}while(++sate_temp<byte_number);*/
}
//复位
void rest_isd_comm_ptr(void)
{
isd_comm_ptr=ISD_COMM_RAM;
back_data_ptr=ISD_COMM_RAM_C;
}
//无参数命令
void isd1700_Npar_comm (uchar comm_par,comm_byte_count) {
uchar i;
i=0;
ISD_COMM_RAM[0]=comm_par;
isd_comm_ptr=&ISD_COMM_RAM[1];
do{
*isd_comm_ptr++=NULL;
}while(++i<comm_byte_count-1);
rest_isd_comm_ptr();
i=0;
do
{
*back_data_ptr++=T_R_comm_byte(*isd_comm_ptr++);
i++;
}while(i<comm_byte_count);
}
//2个字节命令
void isd1700_par2_comm(uchar comm_par, uint data_par) {
uchar i;
ISD_COMM_RAM[0]=comm_par;
ISD_COMM_RAM[1]=data_par;
ISD_COMM_RAM[2]=data_par>>8;
rest_isd_comm_ptr();
i=0;
do
{
*back_data_ptr++=T_R_comm_byte(*isd_comm_ptr++);
i++;
}while(i<3);
}
//7个字节命令
void isd1700_7byte_comm(uchar comm_par, uint star_addr, uint end_addr)
{
uchar i;
ISD_COMM_RAM[0]=comm_par;
ISD_COMM_RAM[1]=NULL;
ISD_COMM_RAM[2]=star_addr;
ISD_COMM_RAM[3]=star_addr>>8;
ISD_COMM_RAM[4]=end_addr;
ISD_COMM_RAM[5]=end_addr>>8;
ISD_COMM_RAM[6]=NULL;
rest_isd_comm_ptr();
i=0;
do
{
*back_data_ptr++=T_R_comm_byte(*isd_comm_ptr++);
i++;
}while(i<=7);
}
//SPI接口函数
uchar T_R_comm_byte( uchar comm_data ) {
uchar bit_nuber;
uchar temp;
bit_nuber=0;
temp=0;
do
{
ISD_SCLK=0;
delay(1);
if((comm_data>>bit_nuber&0x01)!=0)
{
ISD_MOSI=1;
}
else
{
ISD_MOSI=0;
}
if(ISD_MISO)
{
temp=(temp>>1)|0x80;
}
else
{
temp=temp>>1;
}
ISD_SCLK=1;
delay(1);
}while(++bit_nuber<=7);
ISD_MOSI=0;
return (temp);
}
//短延时
void delay(int x)
{
uchar i;
for(; x>=1; x--)
{
for(;i<=20;i++);
}
}
void delay_isd(uint time)
{
while(time--!=0);
}
void GetSound(uchar soundtick)
{
ISD_SS=0;
switch(soundtick)
{
case
0:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_0A, sound_0B); }break;
case
1:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_1A, sound_1B); }break;
case
2:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_2A, sound_2B); }break;
case
3:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_3A, sound_3B); }break;
case
4:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_4A, sound_4B); }break;
case
5:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_5A, sound_5B); }break;
case
6:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_6A, sound_6B); }break;
case
7:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_7A, sound_7B); }break;
case
8:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_8A, sound_8B); }break;
case
9:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_9A, sound_9B); }break;
case
10:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_10A, sound_10B); }break;
case
11:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_11A, sound_11B); }break;
default: break;
}
ISD_SS=1;
}
extern void DelayMs(unsigned int z);
/**********播放指定语音段************/
void PlaySoundTick(uchar number)
{
//spi_stop ();
//delay_isd(30000);
//GetSound(number);
static unsigned char num=0x55;
unsigned char i=0;
if(num!=number)
{
if(num==0x55)
{
spi_fwd(); //播放指针指向下一曲
DelayMs(20); //延时
for(i=0;i<number;i++)
{
spi_fwd(); //播放指针指向下一曲
DelayMs(20); //延时
}
}
else
{
if(num<number)
{
for(i=0;i<(number-num);i++)
{
spi_fwd(); //播放指针指向下一曲
DelayMs(20); //延时
}
}
else
{
for(i=0;i<(3-num);i++)
{
spi_fwd(); //播放指针指向下一曲
DelayMs(20); //延时
}
for(i=0;i<number;i++)
{
spi_fwd(); //播放指针指向下一曲
DelayMs(20); //延时
}
}
}
num=number;
}
spi_play(); //播放当?
}
以下为h文件:
#define ISD1700_PU 0x01 #define ISD1700_STOP 0X02 #define ISD1700_REST 0x03 #define ISD1700_CLR_INT 0x04 #define ISD1700_RD_STAUS 0x05 #define ISD1700_RD_PLAY_PTR 0x06 #define ISD1700_PD 0x07 #define ISD1700_RD_REC_PTR 0x08 #define ISD1700_DEVID 0x09
#define ISD1700_PLAY 0x40 #define ISD1700_REC 0x41 #define ISD1700_ERASE 0x42 #define ISD1700_G_ERASE 0x43
#define ISD1700_RD_APC 0x44
#define ISD1700_WR_APC1 0x45
#define ISD1700_WR_APC2 0x65
#define ISD1700_WR_NVCFG 0x46
#define ISD1700_LD_NVCFG 0x47
#define ISD1700_FWD 0x48
#define ISD1700_CHK_MEM 0x49
#define ISD1700_EXTCLK 0x4A
#define ISD1700_SET_PLAY 0x80
#define ISD1700_SET_REC 0x81
#define ISD1700_SET_ERASE 0x82
#define NULL 0x00
#define ISD_LED 0x10
以下为h文件:
//以下为语音信息对应播放起始地址定义,A为开始,B为结束#define sound_0A 0x0010
#define sound_0B 0x00bc
#define sound_1B 0x015e
#define sound_2A 0x015f #define sound_2B 0x01bf
#define sound_3A 0x013C #define sound_3B 0x019F
#define sound_4A 0x01A0 #define sound_4B 0x01EE
#define sound_5A 0x00C9 #define sound_5B 0x00E1
#define sound_6A 0x00E2 #define sound_6B 0x01F4
#define sound_7A 0x00F5 #define sound_7B 0x0119
#define sound_8A 0x0120
#define sound_9A 0x0132
#define sound_9B 0x015F
#define sound_10A 0x0160 //欢迎来访,请输入房号。

#define sound_10B 0x015E
#define sound_11A 0x015F //正在呼叫,请稍候。

#define sound_11B 0x018A
#define sound_12A 0x0000
#define sound_12B 0x0000
附录4 实物图。

相关文档
最新文档