摘要:
本文设计了一种基于STC89C52单片机的智能公交报站系统,该系统实现了公交车的自动报站功能,同时提供了丰富的信息显示和设置选项。通过初始化单片机I/O口、实时时钟芯片、定时器以及12864液晶屏等模块,系统能够准确显示时间、温度以及站台、公交车内信息等,提升了乘客的乘车体验。
关键词:STC89C52单片机;智能公交报站系统;12864液晶屏;实时时钟芯片
一、引言
随着城市化进程的加快,公共交通作为城市发展的重要组成部分,其服务水平直接关系到市民的出行体验。智能公交报站系统作为公共交通服务的重要组成部分,能够提高公交车的服务质量和效率,为乘客提供更加便捷、舒适的出行体验。本文设计了一种基于STC89C52单片机的智能公交报站系统,旨在满足现代公交服务的需求。
二、系统总体设计
本系统以STC89C52单片机为核心控制器,通过初始化各个模块,实现公交车的自动报站功能以及信息的显示和设置。系统主要包括主程序、显示模块和按键模块等部分。
三、主程序设计
主程序是系统的核心,负责初始化各个模块并控制整个系统的运行流程。在主程序中,首先给报站控制变量赋初值,然后初始化单片机的I/O口、实时时钟芯片、定时器0以及12864液晶屏等模块。接下来,系统开始检测按键输入,根据按键的不同执行相应的程序。如果检测到时间设置按键按下,则执行时间设置程序;如果检测到站台信息显示按键按下,则显示站台信息;如果检测到公交车信息显示按键按下,则显示公交车内信息。此外,主程序还负责每200ms刷新一次时间和温度显示数值,保证信息的实时性。
四、显示模块设计
显示模块采用12864液晶屏,用于实时显示时间、温度、站台以及公交车内等信息。在初始化过程中,设置液晶屏的显示参数和界面布局。开机时,液晶屏只显示时间和温度信息。当按下不同的按键时,液晶屏会切换到相应的信息显示界面,如站台信息显示界面、公交车信息显示界面等。同时,根据用户的需求,还可以设置到达站和下站信息的显示,以及手动播报功能。
五、按键模块设计
按键模块包括站台信息显示按键、公交车信息显示按键、时间设置按键、上下行设置键、手动播报键以及关闭播报键等。用户通过按下不同的按键,实现对系统的控制和信息的设置。例如,按下时间设置按键后,系统进入时间设置界面,用户可以通过按键调节年月日时分秒等数值;按下手动播报键后,系统会播报当前站和下站信息;按下关闭播报键后,系统回到开机显示界面。
六、系统测试与结果分析
经过实际测试,本系统能够准确实现公交车的自动报站功能,同时提供了丰富的信息显示和设置选项。液晶屏显示清晰,按键响应迅速,用户体验良好。在实际应用中,该系统能够有效提高公交车的服务质量和效率,提升乘客的出行体验。
七、结论
本文设计了一种基于STC89C52单片机的智能公交报站系统,通过初始化各个模块和设计合理的程序流程,实现了公交车的自动报站功能以及信息的显示和设置。该系统具有操作简便、显示直观、功能丰富等优点,为现代公交服务提供了一种有效的解决方案。
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#include "value.h"
sbit x_key=P1^3;
sbit s_key=P1^4;
sbit bz_key=P1^5;
sbit gb_key=P1^6;
sbit x_LED=P2^6;
sbit s_LED=P2^7;
sbit key_zhantai=P3^0;
sbit key_gongjiao=P3^1;
uchar x_mode,s_mode;
uchar x_num,s_num;
bit flag_200ms = 1;
uchar flag_c_en;
bit flag_100ms;
sbit dq=P3^2; //18b20 IO口的定义
uint temperature ; //温度变量
uint flag_zhantai ; //站台显示标志位
uint flag_gongjiao ; //公交显示标志位
/************ 延时函数 *****************/
void delay_uint(uint z)
{
while(z--);
}
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<115;j++);
}
uchar dis_lcd[10];
#include "lcd12864bu.h"
/******************显示时间函数***************************/
void dis_shijian() //显示时间
{
write_shu16(0,0*8,shi,0);
write_shuzi(1,0*2,2*8,fuhao[1],0);
write_shu16(0,3*8,fen,0);
write_shuzi(1,0*2,5*8,fuhao[1],0);
write_shu16(0,6*8,miao,0);
write_yhanzi(2,0,5*16,qita[6]); //星期
//write_shu16(0,14*8,week,0);
if(week==0)
{
write_yhanzi(1,0,7*16,xingqi[0]);
}
if(week==1)
{
write_yhanzi(1,0,7*16,xingqi[1]);
}
if(week==2)
{
write_yhanzi(1,0,7*16,xingqi[2]);
}
if(week==3)
{
write_yhanzi(1,0,7*16,xingqi[3]);
}
if(week==4)
{
write_yhanzi(1,0,7*16,xingqi[4]);
}
if(week==5)
{
write_yhanzi(1,0,7*16,xingqi[5]);
}
部分代码。..
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8