毕设帮助、开题指导、技术解答(有偿)见文末。
摘要
随着国民经济的快速发展,我国城市人口高度集中并大幅增长, 交通需求不断扩大导致城市道路交通拥挤,乘坐公交车出行是解决我国城市交通发展问题和实践低碳环保绿色出行的有效途径,随着近年来城市公交事业迅速发展,之前靠售票员报站的方式已经不能满足实际需要,在到站后能够及时报站的公交车语音报站系统不但能解决这个实际问题也有助于提高公交服务质量。
本设计介绍了基于单片机的公交车语音报站系统的设计,对系统软件设计和硬件实现进行了详细的描述,主要内容是用STC89C52单片机为核心控制元件,WT588D语音芯片为录音模块,以液晶屏为显示模块,以独立按键K1、K2为输入设备,扬声器为语音输出设备,设计一个带语音报站和液晶显示功能的公交车报站系统。先将语音内容通过录音键录入语音芯片中,当按下放音键时,语音模块进行放音同时通过液晶屏显示对应的文字信息。本系统运行稳定,硬件电路简单,软件功能完善,控制系统可靠,具有一定的实用和参考价值。
关键词: 单片机 语音提示 液晶屏 公交报站
一、硬件方案
单片机最小系统+语音模块+LCD12864液晶+按键+喇叭+DS1302时钟芯片而成。
二、设计功能
1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)
2.设计自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
3.LCD12864液晶显示公交站名,并通过语音模块播放控制喇叭播放出来。
4.按键切换报站,可以实现向上报站、向下报站。
5.公交报站的内容可以根据您的要求进行修改。
6.采用DS1302时钟芯片设计,可以显示年月日、时分秒星期,可以通过按键设置时间。
7.自带3V纽扣电池,当系统掉电后,纽扣电池供电给时钟芯片继续工作,再次上电无需重新设置时间,使用起来非常方便。
三、实物图
四、原理图
五、PCB图
六、程序
部分代码
if(num == 6) //报第6个站
{
write_string(1,0,gj_ming);
write_string(2,0,table6);
}
if(num == 7) //报第7个站
{
write_string(1,0,gj_ming);
write_string(2,0,table7);
}
if(num == 8) //报第8个站
{
write_string(1,0,gj_ming);
write_string(2,0,table8);
}
if(num == 9) //报第9个站
{
write_string(1,0,gj_ming);
write_string(2,0,table9);
}
}
}
if(menu_1 != 0)
{
if(menu_1 == 1) //设置年
{
if(key_can == 2) //加键
{
nian+=0x01; //设置年加1
if((nian & 0x0f) >= 0x0a)
nian = (nian & 0xf0) + 0x10;
if(nian >= 0x9a)
nian = 1;
}
if(key_can == 1) //减键
{
if(nian == 0x01)
nian = 0x9a;
if((nian & 0x0f) == 0x00)
nian = (nian | 0x0a) - 0x10;
nian -- ; //设置年减1
}
}
if(menu_1 == 2) //设置月
{
if(key_can == 2) //加键
{
yue+=0x01; //设置月加1
if((yue & 0x0f) >= 0x0a)
yue = (yue & 0xf0) + 0x10;
if(yue >= 0x13)
yue = 1;
}
if(key_can == 1) //减键
{
if(yue == 0x01)
yue = 0x13;
if((yue & 0x0f) == 0x00)
yue = (yue | 0x0a) - 0x10;
yue -- ; //设置月减1
}
}
if(menu_1 == 3) //设置日
{
if(key_can == 2) //加键
{
ri+=0x01; //设置日加1
if((ri & 0x0f) >= 0x0a)
ri = (ri & 0xf0) + 0x10;
if(ri >= 0x32)
ri = 0;
}
if(key_can == 1) //减键
{
if(ri == 0x01)
ri = 0x32;
if((ri & 0x0f) == 0x00)
ri = (ri | 0x0a) - 0x10;
ri -- ; //设置日减1
}
}
if(menu_1 == 4) //设置时
{
if(key_can == 2) //加键
{
shi+=0x01; //设置时钟加1
if((shi & 0x0f) >= 0x0a)
shi = (shi & 0xf0) + 0x10;
if(shi >= 0x24)
shi = 0;
}
if(key_can == 1) //减键
{
if(shi == 0x00)
shi = 0x24;
if((shi & 0x0f) == 0x00)
shi = (shi | 0x0a) - 0x10;
shi -- ; //设置时钟减1
}
}
if(menu_1 == 5) //设置分
{
if(key_can == 2) //加键
{
fen+=0x01; //设置分钟加1
if((fen & 0x0f) >= 0x0a)
fen = (fen & 0xf0) + 0x10;
if(fen >= 0x60)
fen = 0;
}
if(key_can == 1) //减键
{
if(fen == 0x00)
fen = 0x5a;
if((fen & 0x0f) == 0x00)
fen = (fen | 0x0a) - 0x10;
fen -- ; //设置分钟减1
}
}
if(menu_1 == 6) //设置秒
{
if(key_can == 2) //加键
{
miao+=0x01; //设置秒钟加1
if((miao & 0x0f) >= 0x0a)
miao = (miao & 0xf0) + 0x10;
if(miao >= 0x60)
miao = 0;
}
if(key_can == 1) //减键
{
if(miao == 0x00)
miao = 0x5a;
if((miao & 0x0f) == 0x00)
miao = (miao | 0x0a) - 0x10;
miao -- ; //设置秒减1
}
}
if(menu_1 == 7) //设置星期
{
if(key_can == 2) //加键
{
week+=0x01; //设置星期加1
if((week & 0x0f) >= 0x0a)
week = (week & 0xf0) + 0x10;
if(week >= 0x08)
week = 1;
}
if(key_can == 1) //减键
{
if(week == 0x01)
week = 0x08;
if((week & 0x0f) == 0x00)
week = (week | 0x0a) - 0x10;
week -- ; //设置星期减1
}
}
write_shu16(1,1,nian); //显示年
write_shu16(1,3,yue); //显示月
write_shu16(1,5,ri); //显示日
write_shu16(2,1,shi); //显示时
write_shu16(2,3,fen); //显示分
write_shu16(2,5,miao); //显示秒
write_shu16(3,5,week); //显示星期
switch(menu_1) // 光标显示
{
case 1: write_guanbiao(1,1,1); break;
case 2: write_guanbiao(1,3,1); break;
case 3: write_guanbiao(1,5,1); break;
case 4: write_guanbiao(2,1,1); break;
case 5: write_guanbiao(2,3,1); break;
七、资料包括
需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。