当前位置: 首页 > news >正文

【Proteus仿真】【51单片机】公交车报站系统

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD12864显示模块、DS18B20温度传感器、DS1302时钟模块、按键、LED蜂鸣器、ULN2003、28BYJ48步进电机模块等。

主要功能:
系统运行后,LCD12864液晶显示检测温度、日期时间、站台信息和运行方向;可按下K3键进入设置模式,默认调节年份,可再次按下K3键选择年月日时分秒星期,选择后可按下K1和K2键调节,按下K4键可保存时间并返回主界面。当到站后可按下K1键报站,显示屏显示当前站和下一站信息,并且蜂鸣器发出提示音,步进电机正反转控制门开关。可按下K2键切换运行方向,系统默认为下行。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据显示
void sys_data_show(void)
{u8 buf[11];while(1){//正常模式显示if(sys_ctrl.mode==0){//日期显示buf[0]='2';buf[1]='0';buf[2]=gDS1302_TIME[6]/16+0x30;buf[3]=gDS1302_TIME[6]%16+0x30;buf[4]='-';buf[5]=gDS1302_TIME[4]/16+0x30;buf[6]=gDS1302_TIME[4]%16+0x30;buf[7]='-';buf[8]=gDS1302_TIME[3]/16+0x30;buf[9]=gDS1302_TIME[3]%16+0x30;buf[10]='\0';lcd12864_show_string(0,1,buf,0);//时间显示buf[0]=gDS1302_TIME[2]/16+0x30;buf[1]=gDS1302_TIME[2]%16+0x30;buf[2]=':';buf[3]=gDS1302_TIME[1]/16+0x30;buf[4]=gDS1302_TIME[1]%16+0x30;buf[5]=':';buf[6]=gDS1302_TIME[0]/16+0x30;buf[7]=gDS1302_TIME[0]%16+0x30;buf[8]='\0';lcd12864_show_string(0,0,buf,0);//星期显示lcd12864_show_hz(14,0,gDS1302_TIME[5]+1);//温度显示buf[0]=sys_ctrl.temp/100+0x30;buf[1]=sys_ctrl.temp%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp%100%10+0x30;buf[4]='\0';lcd12864_show_string(11,1,buf,0);//运行方向if(sys_ctrl.dir==0)lcd12864_show_string(14,3,"->",0);else lcd12864_show_string(14,3,"<-",0);//站点显示//下行if(sys_ctrl.dir==0){switch(sys_ctrl.num){case 0:lcd12864_show_hz(8,3,17,0);//重新显示之前清屏的那块字lcd12864_show_hz(10,3,15,0);lcd12864_show_hz(6,2,3,0);//一号站lcd12864_show_hz(6,3,4,0);//二号站break;case 1:lcd12864_show_hz(6,2,4,0);//二号站lcd12864_show_hz(6,3,5,0);//三号站break;case 2:lcd12864_show_hz(6,2,5,0);//三号站lcd12864_show_hz(6,3,6,0);//四号站break;case 3:lcd12864_show_hz(6,2,6,0);//四号站lcd12864_show_hz(6,3,7,0);//五号站break;case 4:lcd12864_show_hz(6,2,7,0);//五号站lcd12864_show_string(6,3,"      ",0);break;}		}//上行else{switch(sys_ctrl.num){case 0:lcd12864_show_hz(8,3,17,0);//重新显示之前清屏的那块字lcd12864_show_hz(10,3,15,0);lcd12864_show_hz(6,2,7,0);//五号站lcd12864_show_hz(6,3,6,0);//四号站break;case 1:lcd12864_show_hz(6,2,6,0);//四号站lcd12864_show_hz(6,3,5,0);//三号站break;case 2:lcd12864_show_hz(6,2,5,0);//三号站lcd12864_show_hz(6,3,4,0);//二号站break;case 3:lcd12864_show_hz(6,2,4,0);//二号站lcd12864_show_hz(6,3,3,0);//一号站break;case 4:lcd12864_show_hz(6,2,3,0);//一号站lcd12864_show_string(6,3,"      ",0);break;}	}}//设置模式显示else{switch(sys_ctrl.mode){case 1://年lcd12864_show_hz(4,2,sys_ctrl.set_time[5]+1,0);buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,1);break;case 2://月buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,1);break;case 3://日buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,0);buf[0]=sys_ctrl.set_time[3]/16+0x30;buf[1]=sys_ctrl.set_time[3]%16+0x30;buf[2]='\0';lcd12864_show_string(10,0,buf,1);break;case 4://时buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,0);buf[0]=sys_ctrl.set_time[3]/16+0x30;buf[1]=sys_ctrl.set_time[3]%16+0x30;buf[2]='\0';lcd12864_show_string(10,0,buf,0);buf[0]=sys_ctrl.set_time[2]/16+0x30;buf[1]=sys_ctrl.set_time[2]%16+0x30;buf[2]='\0';lcd12864_show_string(0,1,buf,1);break;case 5://分buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,0);buf[0]=sys_ctrl.set_time[3]/16+0x30;buf[1]=sys_ctrl.set_time[3]%16+0x30;buf[2]='\0';lcd12864_show_string(10,0,buf,0);buf[0]=sys_ctrl.set_time[2]/16+0x30;buf[1]=sys_ctrl.set_time[2]%16+0x30;buf[2]='\0';lcd12864_show_string(0,1,buf,0);buf[0]=sys_ctrl.set_time[1]/16+0x30;buf[1]=sys_ctrl.set_time[1]%16+0x30;buf[2]='\0';lcd12864_show_string(4,1,buf,1);break;case 6://秒buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,0);buf[0]=sys_ctrl.set_time[3]/16+0x30;buf[1]=sys_ctrl.set_time[3]%16+0x30;buf[2]='\0';lcd12864_show_string(10,0,buf,0);buf[0]=sys_ctrl.set_time[2]/16+0x30;buf[1]=sys_ctrl.set_time[2]%16+0x30;buf[2]='\0';lcd12864_show_string(0,1,buf,0);buf[0]=sys_ctrl.set_time[1]/16+0x30;buf[1]=sys_ctrl.set_time[1]%16+0x30;buf[2]='\0';lcd12864_show_string(4,1,buf,0);buf[0]=sys_ctrl.set_time[0]/16+0x30;buf[1]=sys_ctrl.set_time[0]%16+0x30;buf[2]='\0';lcd12864_show_string(8,1,buf,1);break;case 7://星期buf[0]='2';buf[1]='0';buf[2]=sys_ctrl.set_time[6]/16+0x30;buf[3]=sys_ctrl.set_time[6]%16+0x30;buf[4]='\0';lcd12864_show_string(0,0,buf,0);buf[0]=sys_ctrl.set_time[4]/16+0x30;buf[1]=sys_ctrl.set_time[4]%16+0x30;buf[2]='\0';lcd12864_show_string(6,0,buf,0);buf[0]=sys_ctrl.set_time[3]/16+0x30;buf[1]=sys_ctrl.set_time[3]%16+0x30;buf[2]='\0';lcd12864_show_string(10,0,buf,0);buf[0]=sys_ctrl.set_time[2]/16+0x30;buf[1]=sys_ctrl.set_time[2]%16+0x30;buf[2]='\0';lcd12864_show_string(0,1,buf,0);buf[0]=sys_ctrl.set_time[1]/16+0x30;buf[1]=sys_ctrl.set_time[1]%16+0x30;buf[2]='\0';lcd12864_show_string(4,1,buf,0);buf[0]=sys_ctrl.set_time[0]/16+0x30;buf[1]=sys_ctrl.set_time[0]%16+0x30;buf[2]='\0';lcd12864_show_string(8,1,buf,0);lcd12864_show_hz(4,2,sys_ctrl.set_time[5]+1,1);break;	}			}		break;}
}//门的开关动作
void _door_open_close(void)
{u8 i=3;while(i--){step_motor_28BYJ48_send_pulse(4,0,80,1,1);}delay_ms(1000);i=3;while(i--){step_motor_28BYJ48_send_pulse(4,1,80,1,1);}	
}//应用控制系统
void appdemo_show(void)
{u8 i=10;sys_parm_init();//系统参数初始化lcd12864_init();
//	ds1302_init();ds18b20_init();//间隔一段时间,等待数据稳定while(i--){//温度获取sys_ctrl.temp=ds18b20_read_temperture()*10;delay_ms(100);	}sys_open_show();//系统开机界面显示	while(1){	sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关文章:

【Proteus仿真】【51单片机】公交车报站系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD12864显示模块、DS18B20温度传感器、DS1302时钟模块、按键、LED蜂鸣器、ULN2003、28BYJ48步进电机模块等。 主要功能&#xff1a; 系统运行后&…...

C++--STL总结

参考教程&#xff1a;黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 软件界一直希望建立一种可重复利用的东西&#xff0c;C的面向对象和泛型编程思想&#xff0c;目的就是复用性的提升。 大多情况下&#xff0c;数据结构和算法都未能有一套标准,…...

Python----图像的手绘效果

图像的数组表示 图像是有规则的二维数据&#xff0c;可以用numpy 库将图像转换成数组对象 : from PIL import Image import numpy as np imnp.array(Image.open("D://np.jpg")) print(im.shape,im.dtype)结果&#xff1a; 图像转换对应的ndarray 类型是3 维数据&am…...

Android13集成paho.mqtt.android启动异常

项目中原依赖是&#xff1a; implementation(org.eclipse.paho:org.eclipse.paho.android.service:1.1.1) {exclude module: support-v4transitive true } implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5在Android10系统运行正常&#xff0c;能够连接…...

STM框架之按键扫描新思路

STM框架之按键扫描新思路 引入代码展示思路分析 我们学习了定时器实现毫秒级/秒级任务框架&#xff0c;这期我们基于任务框架学习按键扫描新思路。 引入 在按键扫描的过程中&#xff0c;最重要的一步就是按键消抖&#xff0c;解决的方法最简单粗暴的就是先扫描一次按键状态&am…...

Linux服务器挂载另一台服务器的文件夹(mount)

我们实际应用中&#xff0c;会常遇到多个Linux服务器之间需要频繁共享文件&#xff0c;或者是一台服务器需要使用另一台服务器的闲置磁盘空间。最方便的方法就是挂载另一台linux文件夹&#xff08;文件服务器&#xff09;&#xff0c;通俗理解为&#xff1a;当前服务器远程连接…...

剑指offer --- 用两个栈实现队列的先进先出特性

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 当我们需要实现队列的先进先出特性时&#xff0c;可以使用栈来模拟队列的行为。本文将介绍如何使用两个栈来实现队列&#xff0c;并给出具体的思路和代码实现。 一、读懂题目 题目&#xff1a;用两个栈实现一…...

流媒体协议

◆ RTP(Real-time Transport Protocol)&#xff0c;实时传输协议。 ◆ RTCP(Real-time Transport Control Protocol)&#xff0c;实时传输控制协议。 ◆ RTSP(Real Time Streaming Protocol)&#xff0c;实时流协议。 ◆ RTMP(Real Time Messaging Protocol)&#xff0c;实时…...

ClickHouse的分片和副本

1.副本 副本的目的主要是保障数据的高可用性&#xff0c;即使一台ClickHouse节点宕机&#xff0c;那么也可以从其他服务器获得相同的数据。 Data Replication | ClickHouse Docs 1.1 副本写入流程 1.2 配置步骤 &#xff08;1&#xff09;启动zookeeper集群 &#xff08;2&…...

C语言编程陷阱(五)

陷阱21:不要使用逗号运算符代替分号 C语言中,我们可以使用分号来结束一个语句,比如a = b;,这样可以让编译器知道语句的边界,以及执行的顺序。但是,如果我们想要在一个语句中执行多个表达式,就可以使用逗号运算符,比如a = (b = c, c + 1);,这样可以让编译器按照从左到右…...

chardet检测文件编码,使用生成器逐行读取文件

detect_encoding 函数使用 chardet 来检测文件的编码。然后&#xff0c;在 process_large_file 函数中&#xff0c;根据检测到的编码方式打开文件。这样&#xff0c;你就能够更准确地处理不同编码的文件。 import chardetdef detect_encoding(file_path):with open(file_path,…...

html所有标签和DOCTYPE的总结

一、DOCTYPE 1. 意义 DOCTYPE是一种标准通用标记语言的文档类型声明&#xff0c;告诉标准通用标记语言解析器它应该使用什么样的文档类型定义来解析文档。 2. 应用 现在&#xff0c;我们需要告诉标准通用标记语言解析器&#xff0c;我们接下去要用html来编写代码了。 <…...

2023年11月15号期中测验判断题(Java)

1-1 局部变量可以与成员变量重名。 正确答案&#xff1a;T 解释&#xff1a; 局部变量可以和成员变量重名&#xff0c;通常&#xff0c;为了区分局部变量和成员变量&#xff0c;会使用this关键字&#xff08;C称this指针&#xff0c;python是self关键字&#xff09;来特别声…...

基于 selenium 实现网站图片采集

写在前面 有小伙伴选题&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…...

vue3相关内容

ref声明/赋值 操作基本类型数据 string number // 引入方法 import {ref} from vue // 声明变量 const name ref(A) // 修改值 name.value Breactive声明/赋值 操作引用类型数据 array object proxy不能直接赋值&#xff0c;会破坏响应式对象 // 引入方法 import {reacti…...

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FreeRTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…...

《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化

上链接&#xff1a;P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干&#xff1a; 首先给你一个整数t&#xff0c;代表t次操作。 每一次操作包含以下内容&#xff1a; 1.给你一个整数n&#xff0c;让…...

基于单片机的自动循迹小车(论文+源码)

1.系统设计 此次基于单片机的自动循迹小车的设计系统&#xff0c;结合循迹模块来共同完成本次设计&#xff0c;实现小车的循迹功能&#xff0c;其其整体框架如图2.1所示。其中&#xff0c;采用STC89C52单片机来作为核心控制器&#xff0c;负责将各个传感器等模块链接起来&…...

linux系统中安装python到指定目录

Linux系统中安装python 下载Python源码包 根据服务器系统和需要的Python版本&#xff0c;在Python官网下载对应的Python源码包。 安装依赖&#xff08;需要权限&#xff09; yum install gcc gcc-c patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel…...

分布式事务 - seata安装

分布式事务 - seata 一、本地事务与分布式事务 1.1、本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中&#xff0c;必须要满足四个原则&#xff08;ACID&#xff09;。 1.2、分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...