博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
附录三 软件程序
********************************************************************************************
F3.1录音程序
#include
#define uint unsigned int #define uchar unsigned char
sbit start=P2^5;
sbit CE=P2^0;//定义ISD2560的控制引脚 sbit PD=P2^1; sbit EOM=P2^2; sbit PR=P2^3;
void delay(uint t)//延时函数,约1ms { }
void main() { }
********************************************************************************************
if(start==0) { }
P3=P3&0xFC;//A8=A9=0,即选取地址模式 P1=P1&0x00;//起始地址为0 CE=1; delay(5); PR=0; PD=1; uint i; while(t--) { }
for(i=0;i<125;i++) {}
CE=0;
F3.2智能车程序
#include
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、22 834
博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
#include
unsigned int m=0,n=0,t=0;
unsigned int ANGLE_R = 0, ANGLE_L = 0, zhongjian = 4370;
unsigned int V = 410; //车行驶速度
int temp_speed=0,a=0,y=0; //a计时变量
#define START PORTB1;
//**************始终初始化********************* void SetBusCock(uchar synr) {
SYNR=synr;
REFDV=0x01; // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1) // =2*16M*3/2=64M __asm {
BRCLR CRGFLG,#$08,* //Till VCO run Stable
BSET CLKSEL,#$80 //B7,PLLCLK 位,PLL Clock Enabled } }
//****************延迟函数************************ void delay(int ms) { int i,j;
for(i=0;i //****************电机正转************************ void pwmz2(void) { PWME_PWME2 = 0; // 关闭 PWM2 PWMCLK_PCLK2 = 0; //选CLOCKB PWMPRCLK |= 0x60; //64分频 PWMPOL_PPOL2 = 1; //高电平输出 PWMCAE_CAE2 = 0; //选择所要产生的方波的对齐方式,先高后低 PWMPER2 = 240; //周期为8.333KHZ 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、23 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 PWMDTY2 = 0; //初始化占空比为0 PWME_PWME2 = 1; //使能 PWM1 } /*******************电机反传pwm3******************/ void pwmf3(void) { PWME_PWME3 = 0; // 关闭 PWM3 PWMCLK_PCLK3 = 0; //选CLOCKB PWMPRCLK |= 0x60; //8分频 PWMPOL_PPOL3 = 1; //高电平输出 PWMCAE_CAE3 = 0; //选择所要产生的方波的对齐方式,先高后低 PWMPER3 = 240; //周期为8.333KHZ PWMDTY3 = 0; //初始化占空比为0 PWME_PWME3 = 1; //使能 PWM3 } //***************ATD 初始化********************* void InitATD(void) { ATD0CTL1=0x00;//8为精度 ATD0CTL2=0x40;//禁止外部出发,禁止中断 ATD0CTL3=0xc0;//结果右对齐,8次转换,确定8个光电管 ATD0CTL4=0x07;//4个时钟始, 总线频率8分频 ATD0CTL5=0x30;//多通道采样,从AN0开始 ATD0DIEN=0x00;//禁止数字输入 } //***************舵机初始化********************* void pwmd45(void) { PWME=0x00; PWMCTL=0x40; //45,级连,67,01,23不级连 PWMPOL=0x30; //45先输出高电平 PWMCLK_PCLK4=0x00; //Clock A 作时钟频率 PWMCLK_PCLK5=0x00; //Clock A 作时钟频率 PWMCAE=0x00; //输出左对齐 PWMPRCLK=0x03; // Clock A 8 分频 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、24 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 PWMPER45=60000; //p=1/3m *60000=20ms PWMDTY45=zhongjian; //产生1.5ms的高电平 PWME=0x20; } //****************定时器初始化************************ void timer1(void) { } //****************计数器初始化************************** void leijia_PACNT(void) { } //*******************PB5.PB7 初始化**************************** void init_portb57() { DDRB_DDRB4 = 0; DDRB_DDRB5 = 1; DDRB_DDRB7 = 0; } //*******************播放和显示************************************ void play_show() 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、25 834 PACTL_PAEN =0; /* 关闭 PACA*/ PAFLG =0x01; /*清标志寄存器*/ PACTL_PAMOD =0; /*事件计数型*/ PACTL_PEDGE =1; /*上升沿触发*/ PACTL_PAEN =1; /*使能 PACA*/ TSCR2_PR =0x04; //分频 32, bus clock/32=24Mhz/32=750 000,对频率进行修改 TIOS =0x01; //0 通道输出比较 TC0 =60000;//通道0输出寄存器为 60000 *1/6000 000=10ms TCTL2 =0x00; //输出gao电平 TSCR1=0x90; // TFLG1中断自动清零,定时器0使能且正常工作 TIE=0x01; //通道0中断允许 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 { PORTB_PB5= 0; //发送播放标志 delay(1); while (!PORTB_PB7) ; //等待播放完成 while (!PORTB_PB4) ; //等待显示完成 PORTB_PB5 = 1; //标志位清除 delay(1); while(PORTB_PB7); while(PORTB_PB4); } void main(void) { unsigned int first_play = 0; //第一次播放标志 unsigned int fazhi = 45; //AD采样阀值 unsigned int zhan_dian = 150; // 标志 unsigned int C=27; //27/° unsigned int adjieguo[8] = {0,0,0,0,0,0,0,0}; //采样结果数组寄存器初始化 unsigned int count = 0; //扫描次数 unsigned int i=0; //for循环变量 unsigned int j=1; //while循环变量 unsigned int PLATFORM = 0; //站点数 unsigned int hei_bai=0; //二值化后的存储 unsigned int pwm45d=0; //pwm45d舵机转角 unsigned int pwm2z=0; //pwm2z电机正 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、26 2010第六届“博创杯”全国大学生嵌入式设计大赛 作品设计报告 智能公交车 Intelligent buses 设 计 报 告 参赛学校:西安文理学院 作 者:孙战飞 邓锐兵 张 旭 指导教师:毕格萍 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 摘 要 随着我国国民经济的飞速发展,城市建设日新月异,城市交通问题日益严重,已成为严重影响许多大中城市发展的重点问题之一。本文采用飞思卡尔单片机MC9S12XS128单片机、STC89C52、光电对管、LED显示屏以及语音芯片ISD2560,实现了一款模拟一款智能公交车行驶、停止报站及显示站点的系统模型。本文分别从车模块、站点显示模块和语音模块详细介绍了模拟公交车报站系统的工作原理及工作方式。最后将三个模块经过一定的通信协议连接起来进行调试,完成模拟公交车行驶、停止报站及显示站点的功能。实现智能公交车的功能 关键词:智能公交车、MC9S12XS128、STC89C52、ISD2560 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、2 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 Abstract Along with the rapid development of our national economy, urban construction, urban traffic problems, has become increasingly severe serious influence on the development of many cities. Based on single-chip microcontroller, freescale MC9S12XS128 STC89C52, photoelectric tube, the LED display, and to realize the ISD2560 pronunciation chip, a simulation bus stops and driving, stop the system model that site. This paper from the car module, site display module and voice module are introduced in detail the bus stops simulation system and working principle of the way to work. Finally after three modules connected the communication protocol, finish debugging bus stops to stop driving simulation, and display the function of site. Realizing the function of intelligent buse Key words: Intelligent buses、MC9S12XS128、STC89C52、ISD2560 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、3 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 目 录 第一章 绪论.......................................................................................................................................... 1 1.1 选题的意义.............................................................................................................................. 1 第二章 系统方案.................................................................................................................................. 2 2.1 系统工作原理.......................................................................................................................... 2 2.2 系统工作方式.......................................................................................................................... 2 2.3 系统硬件设计.......................................................................................................................... 2 2.3.1 MCU模块 ...................................................................................................................... 2 2.3.2 路径识别模块设计........................................................................................................ 4 2.3.3 电机驱动模块设计........................................................................................................ 6 2.3.4 电源模块设计................................................................................................................ 7 2.3.5 LED显示模块 ................................................................................................................ 7 2.3.6 语音模块........................................................................................................................ 9 2.4 系统的软件设计.................................................................................................................... 12 2.4.1 主程序流程框图如图2.17所示。............................................................................. 12 2.4.2 路径计算...................................................................................................................... 13 2.4.3 舵机控制...................................................................................................................... 14 2.4.4 LED显示控制 .............................................................................................................. 15 2.4.5 语音程序控制.............................................................................................................. 15 第三章 系统调试................................................................................................................................ 16 3.1 联合调试................................................................................................................................ 16 附录一 硬件电路图............................................................................................................................ 17 F1.1 硬件电路总图 .............................................................................................................. 17 F1.2 语音模块电路图 .......................................................................................................... 18 F1.3 LED显示电路图........................................................................................................... 19 附录二 智能公交车............................................................................................................................ 20 F2.1 智能公交车 .................................................................................................................. 20 F2.2 智能车模块 .................................................................................................................. 20 F2.3 LED显示屏模块........................................................................................................... 21 F2.4 语音播放模块 .............................................................................................................. 21 附录三 软件程序................................................................................................................................ 22 F3.1录音程序 ....................................................................................................................... 22 F3.2智能车程序 ................................................................................................................... 22 F3.3语音播放程序 ............................................................................................................... 34 F3.4 LED显示程序............................................................................................................... 37 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、4 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 第一章 绪论 1.1 选题的意义 随着我国国民经济的飞速发展,城市建设日新月异,城市交通问题日益严重,已成为严重影响许多大中城市发展的重点问题之一。而城市公共交通与小汽车相比,具有客运量大、相对投资少、占有资源少、效率高、污染相对较少、人均占用道路少等优点,是普通百姓出行的首选交通工具,但大部分公交报站器采用驾驶员在进站前操作键盘报站,这样会使得驾驶员分散注意力,可能会出现交通事故,而且公交报站器若采用人为的,会难免漏报、误报,不利于乘客获取正确站牌信息,准确到达目的地。 我们所做的智能公交车是通过红外传感器和语音报站以及LED显示相结合所形成的全自动报站系统,实现语音、文字同时报站功能,为公交车装备现代化,提高服务档次。让人们的出行乘车成为一种有效地便捷方式,避免了交通事故的发生,另一方面为乘客提供了及时准确的公交信息,便于人们的出行。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、1 834 8F1.1 硬件电路总图 AB附录一 硬件电路图 CD 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 TitleSizeA2Date:File:2010-6-4F:\\Sheet1SchDocSheetofDrawnBy:8NumberRevision7KKCOOCLLBBW T OORHSEPRNNRRUUTTEERR__TRRTWRTOAOAPTHTESSSRNRVU5TTE6UR0_DOAVVW55O132T60TH62OODDMMUUTBBSBOO4KEER2LLWWPP057R48765KKK777V5TUO444A218901234XTD2D111117UNTNrOGUOG678eRRRBda-12345671PeJHTD2TD2101NNBBBN02NN5IGIGARP43U3KRT11234ER2_-PDDTBDIPNNR713RTOGG12-TBBAPDD4W5WTEEE13SSSSSRLLMM12KWW770PPR4CCCVCV510113Ore9TdOa123e0BJDMH1627384950020-022V1234567857RPR=TTUXXOTR1200OOMMTTOOOOCCMM2VX5246802468021T11111221Ur1234567edOOOOOOOO1357914a13579111112PeJH317V059QTCU531OFMMM3DUWWWr7E6Ned1XXPPPTGa1233e44TR100SH7CMMOOO1FCCV1U5C1776655443FTV1UUOAAOOAAO5C1OT12UOV643HH52117186CCTTTIIUOWW316DCNNESS09QDCUTUTII12ECVVOOV12RRETTCP6E2TA232NNUTUD320987654321X+-+-IIOO11221212NXV2111111111ACCCCTTRRGA56MM6420TDDDDO6420UC77665544134510295AAAAAAAAOCODDOODDOE1111VL30Fre1UdC1a1232e2SH33X35177DD2468024680210Q33SSN00112233N111112219LLGODDOODDOGFrCe44Ud77135791213a135791111125E110Pe1234567890CSSJH12HCDTIN5GWSO37531DDDDD7531NAAAAAAAAGDDN112233NGAOOAAOG3410Q3V95rCeTda1234EufU0701eOC1SH54CUF1O1H0CCTICVWS1357tuBBBBiioVmmSee3DFSFNpMr08aPpP79a7CCWed4G4CC49nPa1232g-e33iMVeRPH10Q9LltCo2VUF246802X3E41116C0r52ed1M2aVD1357916PeWNJHPTCCUG3CCOO6CUFVV0013232OVOVMO5TMO5TWOTUWOTU0246PMOPMOBBBB3210Q9098765432109876543211234567DH21111111112111111111DDDDDDDNRCAAAAAAAGV2ECD21222C21NNDP+TTDDDNNNNDP+222DDVTTNNNDICPVUU/GVOOGGDICPUUD/6PPOOGGPPTUFU0302OC1O66668D1188D118t8NDDTTCNN88NDDTTCNN8o33333G+UUNGG33G321CA/FSN+IVVOODPPC2CAN++UUNGGCRRPA2UMM/FSIVVOODPPUMMH012345678Xto0RV1111111119112345678901234567890SV5re11tRRPTAduoUa-123456789eVOPJH31D1N0Q7191GOC1n121gi1MVeOM1246802XRMOTWOV5TUO1E1161LPTltOroFWOedVFUUPMM11a1357911020eC1C1PJHCCCCCCVVV1234567EEEEEEE1O1S ABCD 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 765432117 3F1.2 语音模块电路图 KC522UFC622UF 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 Title20R744FK12CU30Kci7R1MM.44CRK2C1FCUFV7F12UCU.3F20C22CU12.0CCCCVVF1K8UR1.15C.08765432109876522222222211111DRKTNCFC/MDEFENA-I CPCPLPCVUI GCOORSVXEOAA CC ANCIVINAMAMN0123456789NRMMMMMMMMMMI0XDA6//////////U0123456789USS+5SS2T2AAAAAAAAAAAVVPSDEUSIR_1234567891T0123411111STRLROAPTECSRC23456789VAAAAAAAA09876543212345678012345674333333332222222211111111C0123456701234567................DD0101RDC0000000022222222VXXTTTTPPPPPPPPPPPPPPPPRTNN//WR////II45..//67.01...2333..3333PPPPPP33PP1_tn12eLLnAANT01234567DoTT........SEEpSLA11111111N1XXRPAEPPPPPPPPGmoUC98990112345678011233223456789AAAAAAAA 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 ABC18 D12 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 F1.3 LED显示电路图 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、19 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 附录二 智能公交车 F2.1 智能公交车 F2.2 智能车模块 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、20 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 F2.3 LED显示屏模块 F2.4 语音播放模块 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、21 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 图2.8 电机驱动电路 2.3.4 电源模块设计 标准车模使用7.2V 2000mAh Ni-cd蓄电池,但整个系统中,单片机系统、路径识别的光电传感器和接收器电路、车速传感器电路需要5V电压,舵机伺服电机工作电压6V,所以单独设计了供电模块如图2.9所示,提供各个模块所需要的正常工作电压。 电池7.2V电源模块5V5V6V电机驱动红外传感器微处理器舵机主伺服电机 图2.9 系统供电结构图 由于系统采用7.2V电池供电,线性稳压器一般要求3V以上的压差才能正常的输出稳定的电压,所以我们最终选取了只需少量外围元件的集成开关电源LM117作为6V电源。采用78M05作为5V电源模块的降压芯片。设计电路如图2.10所示。 图2.10 系统供电原理图 2.3.5 LED显示模块 该模块采用STC89C52单片机控制12个8X8点阵构成的16X48LED显示,锁存器74LS595控制列选,译码器74HC154控制行选。8X8LED点阵原理图如图2.11所示。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、7 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 图2.11 8X8LED点阵原理图 点阵内部结构及外形如上,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮。 该电路主要将单片机发送来的输出点阵数据,通过锁存器芯片扩展的I0口,来控制LED点阵的48个列线端。本设计中用的是6片74HC595锁存器来组成3组双缓冲寄存器,驱动LED点阵的3组列线,用译码器74HC154对LED点阵的行进行扫描。 列驱动原理如图2.12所示。由89c52单片机的串口向74ls595发送数据,数据缓存在74ls595中,等待一行数据全部缓存在74ls595中后,由89c52单片机发送74ls595输出控制信号,一行数据全部输出。 图2.12 列驱动原理图 行驱动原理如图2.13所示。74ls154是4-16 译码器,E1 E2是控制输出端。当一行数据输出后(如列驱动原理所述),74ls154 E1 E2控制端置低,对应74ls154输出端有输出。实现LED 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、8 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 屏一行点亮。 图2.13 行驱动原理图 如果增加扫描频率,只要超过人眼的视觉反应时间,就会出现一屏汉字如图2.14所示。16X48LED点阵模拟图: 图2.14 显示一屏汉字 在设计中由于列驱动74ls595和行驱动74ls154的驱动能力有限,我们还采用三极管增加了列的驱动能力和行的驱动能力。但是更好的方法是使用74ls245可以简单的实现增加驱动能力而且驱动效果很好。 2.3.6 语音模块 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、9 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 该模块是采用单片机STC89C52控制数码语音芯片ISD2560所组成的一套智能语音录放系统。ISD2560的内部原理图如图2.15所示 图2.15 ISD2560的内部原理图 各引脚功能: 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、10 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 ISD2560采用多电平直接模拟量存储技术,每个采样值可直接存储在片内单个EEPROM单元中,因此能够非常真实、自然地再现语音、音乐、音调和效果声。它内部包括了前置放大器、内部时钟、定时器、采样时钟、滤波器、自动增益控制、逻辑控制、模拟收发器、解码器和480K字节的EEPROM.可实现60s的录音,精度是100ms,即期最多可分段放音600段。单片机与ISD2560的接口电路以及外围电路图2.16所示。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、11 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 图2.16 接口电路以及外围电路图 单片机的P2口、P0.6、P0.7分别于ISD2560的地址线相连,用以设置语音断的起始地址,P1.0、P1.1、P1.2用以控制录放音状态。 2.4 系统的软件设计 系统的软件采用模块化设计,具有较强的可读性,可移植性。程序使用C语言进行编写,极大的提高了编程效率,调试方便快捷。 2.4.1 主程序流程框图如图2.17所示。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、12 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 初始化 adjieguo[i]清零 N AD转换完成? N 二值化 >=n 判断测到黑线的次数 发送显示标志位,速度清零转角保Y 接收到显示完成位? Switch语句给转角速度 终点? N Y 速度清零转角保持 图2.17 主程序流程框图 整个程序的总体结构如图2.17,主程序的主要功能是对开机参数进行初始化,更新各个中断输出的数据,计算并转换成其他程序模块需要的数据格式,同时调度各个控制子程序对车模进行实时控制。 2.4.2 路径计算 对车模的路径计算采用定时中断的方式,每隔1毫秒就对传感器进行一次采样,以确保车模在高速运行状态下能在足够短的时间内判断出轨道的变化,并及时刹车,防止车速过快冲出跑道。 经过实际的测试,车模在运行时并不需要很高的精度,为了简化算法,加快计算速度,我们最终确定使用7对红外传感器对路径黑线进行探测,如图2.18所示,黑线位置用0-8表示, 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、13 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 其中1-8表示各个探头的编号,0和8分别表示右边出轨。传感器部分输出模拟电压(0-2.2V),通过MC68S912XS128片内的8路10位AD对其进行采样。白色反射面反射大部分的红外线,而黑色的反射面则吸收大部分红外线,根据实际测试,将传感器放置在白反射面上测得的电压约为1.7V,黑色反射面上为0.5V,AD测得的数据为100和350。当数据低于150时认为是黑线,高于300则认为是白色面。 因为竞赛规则允许出现交叉跑道,而且在起跑线有两条起跑黑线标记,探头将会探测到两个或两个以上符合黑线要求的数据,所以程序首先判断是否出现两条惑两条以上黑线,如果是则输出上次计算的黑线位置数据,车模将保持原有运行状态,顺利通过起跑线或交叉跑道而不受影响;其次是判断是否没有黑线,如果是则读取上次的黑线位置数据来确定出轨方向,数据为第八探头是右边出轨,数据为第一探头则是左边出轨。保持最大转角以保证智能车在出轨之后能够及时转会到赛道上。 左01234567右正常路径1234567左边出轨右边出轨1234567 图2.18 路径计算示意图 2.4.3 舵机控制 车模自带的舵机通过PWM来控制角度如图2.19所示,经过实际调试经验,我们将舵机设 置为0-8九个档位。根据路径计算程序送出的数据,可以判断赛车当前所处的位置状态,根据这个状态给予相应的舵机控制量,使其转动到并保持相应角度。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、14 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 开始调用位置数据是是否出轨?保持上次转向,转角最大否小角度调整返回 图2.19 舵机控制流程图 2.4.4 LED显示控制 LED显示是由STC89C52单片机控制的,将要显示的文字通过自摸提取软件,提取出字模。单片机对LED显示屏的控制过程是先读后写。按LED点阵片在屏幕上的排列顺序,单片机先对第1排的第1片LED点阵片的列驱动锁存器,写入从外部数据存储器读得的字模数据,接着对第2片、第3片……直到这一排的最后一片都写完字模数据后,单片机再对这一排的行驱动锁存器写行扫描信号,于是第1排第1行与字模数据相关的发光二极管点亮。接着第2排第1行、第3排第1行……直到最后一排第1行的点亮。各排第1行都点亮后,延时一段时间,然后黑屏,这样就算完成了单片机对LED显示屏的一行扫描控制。 2.4.5 语音程序控制 本系统采用单片机来控制,不需读出信息地址,而直接设置信息段起始地址。其实现方式有两种:一是由于ISD2560 的地址分辨率为 100 ms,所以可用单片机内部定时器定时 100 ms,然后再利用一计数器对单片机定时次数进行计数,则计数器的计数值为语音段所占用的地址单元。该方式能充分利用ISD2560 内部的E PROM,在字段较多时可利用该方法。二是语音字段如果较少,则可根据每一字段的内容多少,直接分配地址单元。一般按每 1 s说3个字计算,60 s可说180个字,再根据ISD2560的地址分辨率为 100 ms,即可计算出语音段所需的地址单元数。本文采用第二种方式。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、15 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 第三章 系统调试 3.1 联合调试 完成各模块硬件电路的焊接,将各模块连接起来进行调试。首次调试时,站点显示和语音报站不能实现同步,将函数里的延迟函数进行了调整,达到期望的最佳效果。站点采集测试时根据车速设计的站点标志能过在智能车行驶中及时检查到站点。 调试完成后智能车完成设计之初所设想的功能。此智能公交车只是一个模型,在实际应用中可将GPRS功能集合其中提高在实际应用中的精确度。 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、16 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 unsigned int pwm3f=0; unsigned int pre_hei_bai=0;//上一次采样值预存 unsigned int speed_aim = 0; //目标速度 //pwm3f反转 DisableInterrupts; SetBusCock(2); pwmd45(); pwmz2(); pwmf3(); timer1(); leijia_PACNT(); init_portb57(); //play_show(); //***************** //EnableInterrupts; while (1) { DDRA=0xff; //PWMDTY2 = 40; InitATD(); for (i=0;i<8;i++) adjieguo[i]=0; PORTA=0xff; while (!ATD0STAT2_CCF7) // { } adjieguo[0]=ATD0DR0L; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、27 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 adjieguo[1]=ATD0DR1L; adjieguo[2]=ATD0DR2L; adjieguo[3]=ATD0DR3L; adjieguo[4]=ATD0DR4L; adjieguo[5]=ATD0DR5L; adjieguo[6]=ATD0DR6L; adjieguo[7]=ATD0DR7L; if (adjieguo[0] > zhan_dian) //判断站点标志 count++; if (adjieguo[1] >= fazhi) hei_bai |= 0x02; else hei_bai &= 0xfd; //保护前 1 位 第二位写 0 if (adjieguo[2] >= fazhi) hei_bai |= 0x04; else hei_bai &= 0xfb; //保护前 2 位 第三位写 0 if (adjieguo[3] >= fazhi) hei_bai |= 0x08; //第四位赋 1 else hei_bai &= 0xf7; //保护前 3 位 第四位写 0 if (adjieguo[4] >= fazhi) hei_bai |= 0x10; else hei_bai &= 0xef; //保护前 4 位 第5位写 0 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、28 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 if (adjieguo[5] >= fazhi) hei_bai |= 0x20; else hei_bai &= 0xdf; //保护前 5 位 第6位写 0 if (adjieguo[6] >= fazhi) else hei_bai &= 0xbf; //保护前 6 位 第7位写 0 hei_bai |= 0x40; if (adjieguo[7] >= fazhi) case 0x02 : if (pre_hei_bai == 0x80) break; switch (hei_bai) { case 0x00 : if (pre_hei_bai == 0x04) pwm45d = 4500 - C*31; if (pre_hei_bai == 0x40) pwm45d = zhongjian + C*31; else hei_bai &= 0x7f; hei_bai|=0x80; //保护前 7 位 第8位写 0 pwm2z = V; pwm3f = 0; break; if (pre_hei_bai == 0xc0) break; pwm45d = zhongjian - C*40; //左转最大角 左三高电位 0000001 0 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、29 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 pwm2z = V; // pwm3f = 0; // break; case 0x04 : if (pre_hei_bai == 0x80) break; if (pre_hei_bai==0xc0) break; pwm45d = zhongjian - C*20; pwm2z = V; pwm3f = 0; // break; case 0x06: if (pre_hei_bai == 0x80) break; if (pre_hei_bai == 0xc0) break; pwm45d = zhongjian - C*26; pwm2z = V; // pwm3f = 0; // break; case 0x08 : pwm45d = zhongjian - C*6; pwm2z = V; // pwm3f = 0; break; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 //左二高电位 0000010 0 //左三二全部高电位 0000011 0 //左一高电位 000 0 100 0 组委会联系电话:010-82110743转820、30 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 case 0x0c : pwm45d = zhongjian - C*17; //左二一全部高电位 000 0 110 0 pwm2z = V; // pwm3f = 0; // break; case 0x10 : pwm45d = zhongjian; pwm2z = V; // pwm3f = 0; // break; case 0x18 : pwm45d = zhongjian - C*4; pwm2z = V; // pwm3f = 0; // break; case 0x20 : pwm45d = zhongjian + C*6; pwm2z = V; // pwm3f = 0; // break; case 0x30 : pwm45d = zhongjian + C*4; pwm2z = V; // pwm3f = 0; // break; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 // 中间高点位 000 1 000 0 //中间左一高电位 000 1 100 0 //右一高电位 001 0 000 0 //中间右一高电位 001 1 000 0 组委会联系电话:010-82110743转820、31 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 case 0x40: if (pre_hei_bai == 0x02) pwm45d = zhongjian + C*20; //右二高电位 010 0 000 0 break; pwm2z = V; // pwm3f = 0; // break; case 0x60: if (pre_hei_bai == 0x02) break; if (pre_hei_bai == 0x06) break; pwm45d = zhongjian + C*17; pwm2z = V; // pwm3f = 0; // break; case 0x80: if (pre_hei_bai == 0x02) break; if (pre_hei_bai == 0x06) break; pwm45d = zhongjian + C*45; pwm2z = V; // pwm3f = 0; // break; case 0xc0 : 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 //右一二高电位 011 0 000 0 //右三高电位 100 0 000 0 组委会联系电话:010-82110743转820、32 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 if (pre_hei_bai == 0x02) break; if (pre_hei_bai == 0x06) break; pwm45d = zhongjian + C*23; //右三二高电位 110 0 000 0 pwm2z = V; // pwm3f = 0; // break; case 0xfe : pwm45d = zhongjian; //窄道处处理 pwm2z = V; // 窄道时的速度 V5 pwm3f = 0; // break; default : break; } pre_hei_bai=hei_bai; //pre_hei_bai 记录上次赛道信息 if (first_play == 0) { PWMDTY2 = 0; PWMDTY3 = 0; play_show(); first_play = 1; } if (count > 60) { PLATFORM ++; //站点停止 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 33 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 PWMDTY2 = 0; PWMDTY3 = 0; //delay(1000); play_show(); count = 0; } if(PWMDTY2==0) { pwm2z = V+40; //pwmz2(); delay(20); } speed_aim = pwm2z/5; PWMDTY45 = pwm45d; PWMDTY2 = speed_aim; PWMDTY3 = 0; if(PLATFORM == 4) //当count累加到8,到达终点站,车停止。 { PWMDTY45 = zhongjian; PWMDTY2 = 0; PWMDTY3 = 0; for(;;); } } } ******************************************************************************************** F3.3语音播放程序 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 34 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 #include #define uint unsigned int #define uchar unsigned char sbit START=P0^0; sbit RE_TURN =P0^2; sbit CE=P2^0;//定义ISD2560的控制引脚 sbit PD=P2^1; sbit PR=P2^3; sbit A9=P2^7; sbit A8=P2^6; uint i = 0; /***************************延迟函数**************************** 函数名称: delay 功能: 延迟 1ms 入口参数: z:延迟时间 ***************************************************************/ void delay(int ms) { int m,n; for ( m=0; m {} } /***************************播放函数**************************** 函数名称: play_c 功能: 控制ISD2560放音 入口参数: z:无 ***************************************************************/ void play_c() { CE=1; PD=0; PR=1; CE=0; } 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、35 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 /***********************************放音函数********************************** 函数名称: PLAY 功能:根据输入判断播放那一段语音,完成播放后停止 参数:num : 播放段数 p1 : 播放起始地址 p0 : 高位地址 time: 每段播放时间 count : 播放段数内部计数 通信参数: START :由xs12 发送用来控制播放开始,和停止 /*****************************************************************************/ void PLAY(int num,int p1,int p0,uint time) { int m=1; RE_TURN = 0; //初始标志位 为0 while (m) { if(START==0) m=0; } A9 =0; //地址高位始终为低 A8 =p0; //播放,从第一段起始地址开始 P1 =p1; // play_c(); //调用播放子程序 delay(time); //播放时间 CE =1; //停止播放 RE_TURN = 1; //向上位机发送播放完成标志 delay(1); while (!START); //等待返回 START==1 if (START == 1) { i++; } m = 1; RE_TURN = 0; //标志位 清零 } 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 36 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 void main() { START = 1; // 对于52单片机 端口拉高才能扫描到输入 故将 START 拉高 PLAY(0,0x00,0,2300); delay(1000); PLAY(1,0xbe,0,1500); delay(1000); PLAY(2,0x2c,1,1500); delay(1000); PLAY(3,0xae,1,1000); delay(1000); PLAY(4,0xff,1,2000); for(;;); } ******************************************************************************************** F3.4 LED显示程序 #include sbit START=P0^0; sbit RE_TURN =P2^4; sbit E1 = P3^4; sbit ST = P3^3; sbit MR = P3^2; /***************************延迟函数**************************** 函数名称: delay 功能: 用于扫描时的延迟 入口参数: t:延迟时间 ***************************************************************/ void delay( int t) { unsigned int n,m; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 37 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 for(n=0;n /***************************延迟函数**************************** 函数名称: delay1 功能: 用于闪烁的延迟 入口参数: z:延迟时间 ***************************************************************/ void delay1( int z) { unsigned int x,y; for(x=0;x {} } /*****************************显示函数********************************* 函数名称: show_0 功能:直接显示一屏字 入口参数: *location : 显示字的字模数组 内部参数: show_cnt : 扫描次数 i: 循环变量 j: while循环控制变量 *********************************************************************/ void show_0(unsigned char *location) { unsigned int i,j=1,show_cnt=0; while(j) { ST = 0; SCON = 0x00; P1=0X00; for(i=0;i<31;i=i+2) { SBUF = location[95-i]; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 38 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 while(TI==0); TI =0; SBUF = location[94-i]; while(TI==0); TI =0; SBUF = location[63-i]; while(TI==0); TI =0; SBUF = location[62-i]; while(TI==0); TI =0; SBUF = location[31-i]; while(TI==0); TI = 0; SBUF = location[30-i]; while(TI==0); TI=0; ST = 1; ST = 0; P1--; E1 =0; delay(1); E1 =1; } for(i=0;i<32;i++) { SBUF = 0x00; while(TI==0); TI=0; } show_cnt++; if(show_cnt==70) j=0; } } /*****************************显示函数********************************* 函数名称: show 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、834 39 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 功能: 完成在LED屏上的显示,每次显示三个字,从上到下滚动显示,当字完全显 示完成并保持一段时间,然后就是下一组字的显示。 入口参数: *location : 显示字的字模数组 内部参数: i:循环变量 j:控制while循环的变量 m:每一屏扫描次数计数变量 n:每一屏给定扫描次数值 h:行扫描范围变量 s:文字向下移动次数变量 t:行扫描范围变量 ***********************************************************************/ void show(unsigned char *location) { unsigned int i,t=7,m=0,n=200,j=1,h=0,s=0; while(j) { ST = 0; SCON = 0x00; //************等时间点亮************* if(t==7) n=100; if(t==15) n=50; if(t==23) n=20; if(t==31) n=150; //一屏发送完成的延时停留 // *************行选通的循环******************* if(t<=31) { h=0; if(m == n) { t=t+8; m=0; } P1=(t+1)/2; //每一次的点亮起始行 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、40 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 } if(t>31) { if(t==39) { s++; t=31; if(s==1) { n=50; h=8; } if(s==2) { n=75; h=16; } if(s==3) { n=150; h=24; j=0; } } } // ************循环点亮********************** for(i=0;i //发送第三个字 i=i+h; SBUF = location[95-i]; //发送数据; while(TI==0); //等待发送完毕 TI =0; //发送完成标志位清零 SBUF = location[94-i]; while(TI==0); TI =0; //发送第二个字 SBUF = location[63-i]; while(TI==0); TI =0; SBUF = location[62-i]; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、41 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 while(TI==0); TI =0; //发送第一个字 SBUF = location[31-i]; while(TI==0); TI = 0; SBUF = location[30-i]; while(TI==0); TI=0; ST = 1; //595输出已存数据 ST = 0; if(P1==255) //行扫描范围判断 P1=(t+1)/2; P1--; //行选通 E1 =0; //行选通使能 delay(1); E1 =1; //************清屏****************** for(i=0;i<32;i++) { SBUF = 0x00; while(TI==0); TI=0; } } } unsigned char code ti_yu_guan[96] ={ 0x10,0x80,0x10,0x80,0x10,0x80,0x20,0x88,0x2F,0xFC,0x62,0xA0,0xA2,0xA0,0x24,0x90, 0x24,0x90,0x28,0x88,0x2B,0xEE,0x30,0x84,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80, 0x02,0x00,0x01,0x04,0xFF,0xFE,0x04,0x00,0x08,0x10,0x3F,0xF8,0x00,0x08,0x1F,0xF0, 0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x50,0x10,0x20, 0x20,0x80,0x20,0x40,0x23,0xFE,0x3A,0x02,0x4C,0x04,0x51,0xF8,0x81,0x08,0x21,0x08, 0x21,0xF8,0x21,0x00,0x21,0xF8,0x25,0x08,0x29,0x08,0x31,0x08,0x21,0xF8,0x01,0x00, 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、42 834 } m++; //循环次数判断 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 }; unsigned char code tu_shu_guan[96] = { 0x00,0x00,0x7F,0xFC,0x44,0x04,0x47,0xE4,0x44,0x44,0x4A,0x84,0x71,0x04,0x42,0xC4, 0x4C,0x3C,0x71,0x14,0x40,0x84,0x42,0x04,0x41,0x84,0x41,0x04,0x7F,0xFC,0x40,0x04, 0x02,0x00,0x02,0x10,0x02,0x0C,0x3F,0xF6,0x02,0x14,0x02,0x10,0x02,0x10,0xFF,0xFC, 0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x48,0x02,0x28,0x02,0x10,0x00,0x00, 0x20,0x40,0x20,0x20,0x20,0x20,0x7D,0xFE,0x45,0x04,0x48,0xF8,0xA0,0x88,0x20,0x88, 0x20,0xF8,0x20,0x80,0x20,0xFC,0x24,0x84,0x28,0x84,0x30,0xFC,0x20,0x84,0x00,0x00, }; unsigned char code jiao_xue_qu[96] ={ 0x08,0x40,0x08,0x40,0x7F,0x40,0x09,0x44,0x0A,0x7E,0xFF,0x88,0x08,0x08,0x1F,0x48, 0x22,0x50,0xCC,0x50,0x08,0x20,0x0E,0x50,0x78,0x50,0x08,0x88,0x29,0x0E,0x12,0x04, 0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0, 0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00, 0x00,0x08,0x3F,0xFC,0x20,0x00,0x28,0x08,0x24,0x18,0x22,0x20,0x21,0x40,0x20,0x80, 0x21,0x40,0x22,0x30,0x24,0x18,0x28,0x08,0x20,0x00,0x20,0x04,0x3F,0xFE,0x00,0x00, }; unsigned char code nan_men[96] = { 0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x04,0x7F,0xFE,0x48,0x24,0x44,0x44, 0x5F,0xF4,0x41,0x04,0x41,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x41,0x14,0x40,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x04,0x1B,0xFE,0x48,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04, 0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x14,0x40,0x08,}; void main() { int i=1; RE_TURN = 0; START = 1; 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、43 834 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 delay(1); //********************第一次总显示********************** while(i) { if(START ==0) i=0; } i=1; delay(10000); show_0(ti_yu_guan); delay(500); show_0(tu_shu_guan); delay(500); show_0(jiao_xue_qu); RE_TURN = 1; delay(1); while(i) { if(START==1) i=0; } i=1; RE_TURN = 0; //*********************第一站显示******************************* while(i) { if(START==0) i=0; } i=1; delay(3000); show(ti_yu_guan); RE_TURN = 1; delay(1); while(i) 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、44 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 { if(START==1) i=0; } i=1; RE_TURN = 0; //*********************第二站显示******************************* while(i) { if(START==0) i=0; } i=1; delay(1500); show(tu_shu_guan); RE_TURN = 1; delay(1); while(i) { if(START==1) i=0; } i=1; RE_TURN = 0; //*********************第三站显示******************************* while(i) { if(START==0) i=0; } i=1; delay(1500); 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、45 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛 show(jiao_xue_qu); RE_TURN = 1; delay(1); while(i) { if(START==1) i=0; } i=1; RE_TURN = 0; //*********************第四站显示******************************* while(i) { if(START==0) i=0; } i=1; delay(1500); show(nan_men); RE_TURN = 1; delay(1); while(i) { if(START==1) i=0; } i=1; RE_TURN = 0; for(;;); } 官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834 组委会联系电话:010-82110743转820、46 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库智能公交车 开发文档在线全文阅读。
相关推荐: