公交车语音报站系统 - - - 毕业论文

更新时间:2024-06-29 17:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计

完成日期 2013

年 5 月

日 15

摘 要

随着国民经济的快速发展,我国城市人口高度集中并大幅增长, 交通需求不断扩大导致城市道路交通拥挤,乘坐公交车出行是解决我国城市交通发展问题和实践低碳环保绿色出行的有效途径,随着近年来城市公交事业迅速发展,之前靠售票员报站的方式已经不能满足实际需要,在到站后能够及时报站的公交车语音报站系统不但能解决这个实际问题也有助于提高公交服务质量。

本设计介绍了基于单片机的公交车语音报站系统的设计,对系统软件设计和硬件实现进行了详细的描述,主要内容是用STC89C52单片机为核心控制元件,WT588D语音芯片为录音模块,以液晶屏为显示模块,以独立按键K1、K2为输入设备,扬声器为语音输出设备,设计一个带语音报站和液晶显示功能的公交车报站系统。先将语音内容通过录音键录入语音芯片中,当按下放音键时,语音模块进行放音同时通过液晶屏显示对应的文字信息。本系统运行稳定,硬件电路简单,软件功能完善,控制系统可靠,具有一定的实用和参考价值。

关键词: 单片机 语音提示 液晶屏 公交报站

Abstract

With the take-off of the national economy, China's urban population is remarkably exploding. The increasing demand for transports gives rise to traffic congestion in urban areas. Therefore, public bus system is not only an efficient way to solve the problem of traffic congestion but a way to put the “Low-Carbon Transportation” into of date. The recent development of public transportation requires a phonetic system which can automatically announce bus stations. The advanced system is conducive to solving many problems and improving service quality in transportation.

This paper introduces the automatic stop announcer based on STC89C52 and aims to explicitly describe the software and hardware applied in the system. The main features of the system are that STC89C52 is used for core controlling components, WT588D pronunciation chip for recording, LCD12864 screen for video displays, independent key K1 and K2 for input device, loudspeaker for output device. This is designed for a stop announcement and display system for buses. The voice message is recorded in the pronunciation chip in advance. When the “Play” key is pressed, the voice of station announcement simultaneously appears with the information on the screen. This system enjoys the advantage of stability, simplicity and reliability. The full-featured system is an ideal model and is easily put into use.

Key words: Microcontroller Voice prompt LCD screen Bus stop announcer

目 录

第1章 绪 论 ·························································································································1 1.1 课题研究的背景 ····················································································································· 1 1.2 课题研究的意义 ····················································································································· 1 1.3 课题研究的主要内容 ············································································································· 1 第2章 系统总体设计方案 ······································································································3 2.1 功能要求 ································································································································ 3 2.2 设计思路 ································································································································ 3 2.3 方案选择 ································································································································ 3

2.3.1 显示模块选择方案 ·································································································3 2.3.2 按键选择方案 ········································································································4 2.3.3 芯片选择方案 ········································································································4 2.4 总体设计框图 ·························································································································· 5 第3章 系统硬件设计 ··············································································································6 3.1 概述 ········································································································································ 6 3.2 主控模块 ································································································································ 6 3.2.1 STC89C52芯片的简介 ····························································································6 3.2.2 主控模块电路原理图 ·····························································································9 3.3 语音芯片模块 ······················································································································ 10 3.3.1 WT588D芯片简介 ································································································· 10 3.3.2 语音芯片模块电路原理图 ··················································································· 12 3.4 LCD液晶显示模块 ················································································································ 12 3.4.1 组成结构 ·············································································································· 13 3.4.2 引脚功能 ·············································································································· 13 3.5 按键控制模块 ·················································································································· 15 3.5.1 按键控制模块电路原理图 ································································································ 15 第4章 系统软件设计 ············································································································ 16 4.1 系统的主流程图 ················································································································ 16 4.2 显示模块设计 ······················································································································ 18 4.3 键盘扫描模块设计 ··············································································································· 18 第5章 系统分析与调试 ········································································································ 20 第6章 结论与展望 ················································································································ 22 参考文献 ··································································································································· 23 致 谢 ······································································································································ 24 附录A 程序清单 ························································································································· 30

I

第1章 绪 论

1.1 课题研究的背景

随着社会经济的发展,城市化进程越来越快,城市人口急剧增加从而使城市交通压力不断增大,在倡导绿色低碳环保的今天,公交车作为城市公共交通的重要方式,是城市居民出行的重要工具。因为公交车具有方便、快捷、经济实惠等优点。公共汽车为外出的人们提供了方便快捷的服务,而公共汽车的报站直接影响到服务的质量。

1.2 课题研究的意义

传统由乘务人员人工报站的方式工作强度大且效果差,并需要大量的人力资源。而通过单片机和语音芯片的结合,使得公交车到站信息及提示信息以语音和显示的方式告知乘客,为市民提供更人性化,完善的服务,并且节省了大量的人力资源。

公交车语音报站系统还可以结合每条线路的特点和实际情况自主设定不同的报站方式和站点设置,在为乘客提供方便的同时也便于公交车的运营和司乘人员的操作。

1.3 课题研究的主要内容

本论文主要是对C语言和单片机的一些基本知识、概念的应用学习和研究,以及STC89C52芯片模块、WT588D语音模块和LCD12864液晶屏的开发设计,该设计的目的是设计一实现单片机与语音控制芯片系统互联,通过按键,系统可播报相应的车站信息或者公益提醒,也可以实现录音和放音功能。本设计的主要工作有以下几个方面:

1、整体方案的设计

方案的选择要符合芯片功能的要求,既要保证操作简单适合公交司机操作,又要体现出本产品的特点,本文研究设计的带录音功能的公交车语音报站系统是采用STC89C52单片机和WT588D语音芯片,用来实现公交车站信息的播放以及录音和放音功能,用LCD12864带中文字库的液晶显示屏实现公交站名的显示。

2、程序流程图及软件设计

一个程序要想实现其功能,不能没有次序而盲目下手,必须对其有一个全面的了

1

解后画出流程框图,然后逐个模块的实现其功能,最终把模块之间合理的连接起来,构成完整程序。本设计的软件设计主要包括系统的初始化设计、延时子程序的设计、录音子程序的设计、放音子程序的设计、液晶屏的显示设计、中断程序设计、以及主程序设计等。整个系统程序采用模块化结构设计程序相对比较优化易修改和调试,系统软件的开发是用C语言设计的。

3、系统原理图及硬件调试

本设计在进行硬件原理分析后,需要连接实物进行实际操作,检验自己的设计是否可以行得通。需要在protel99SE环境下画出硬件原理图并进行电气测试,检测无异议后进行硬件系统的调试,为了保证系统的可靠性分析查找,硬件的调试分模块分别进行了模拟。

2

第2章 系统总体设计方案

2.1 功能要求

1、通过STC89C52芯片实现对按键的读取并将所对应的信息送至扬声器同时将到站信息通过液晶屏显示;

2、语音芯片WT588D完成语音模块,实现公交站信息的录入及到站时的放音功能;

3、采用两个独立按键,作为录音和放音的控制键; 4、采用LCD12864液晶屏,显示相对应的站的信息;

2.2 设计思路

电路总体上分为主芯片控制部分、语音芯片和液晶显示部分。以STC89C52单片机最小系统作为核心控制电路,控制独立按键对录音放音的选择,具体显示内容及方式由软件来完成。语音部分由WT588D芯片来实现,它是一个多功能的语音芯片,可以多次重复录放,本设计正是运用此特点,完成录音和放音功能的。具体步骤是:先录入两站的信息,存储到芯片内部,建立语音库,并且具体锁定到对应的地址中,通过按键的次序播放不同的信息。

2.3 方案选择

2.3.1 显示模块选择方案

方案一:用LCD1602液晶显示,但是由于1602主要显示英文和字符,不适合用于带汉字的公交车报站。

方案二:采用LCD12864不带字库芯片,但需要用取模软件取模,PROTEUS可以仿真HT1621(1602)KS0108(12864) T6963C(24064),等系列的模块,需先学会仿真软件

方案三:采用带字库的LCD12864芯片,可直接调用字库,使用比较方便。 鉴于上述对比与分析,本设计采用方案三。

3

2.3.2 按键选择方案

方案一:采用STC89C52的独立键盘,其独立键盘有4个按键,按键数量符合录音和放音两个按键的需要。

方案二:采用STC89C52的矩阵键盘,其矩阵键盘具有16个按键,数量太多,不如独立按键方便。

故采用K1和K2两个独立按键,K1为放音键,按第一下时,对应播放第一站信息,同时调用显示子程序,在液晶屏上显示对应信息。按第二下时,对应播放第二站信息,并在液晶屏上显示信息。K2为录音键,按下时,录制第一段语音信息并存放在对应的地址中,按下第二下时,录制第二段语音信息并存放于第二段语音对应的地址中,以方便调用。

2.3.3 芯片选择方案

方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。其片内的4K程序存储器是FLASH工艺的,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护我们的劳动成果。再者,AT89C51目前的售价比8031低,市场供应也很充足。AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需l0ms。AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。PO口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作[1]。

方案二:STC89C52单片机的指令系统和AT89C51系列的完全兼容

1、AT89C51不带ISP下载,要用下载器才行,STC89C52可以用你的USB转串口下载,下载软件可以到STC厂家网上去下。

2、STC单片机执行指令的速度很快,大约是AT的3-30倍,所以在AT上好使的程序在STC上不一定好用,最典型的例子就是那些对时序有严格要求的模块,比如IIC,DS18B20、DS1302等的时序。再者,由于执行速度的加快,非定时器控制的精确延时也会受到一定影响,用STC时注意得加长延时,大约是AT的10—30倍。

3、片机对工作环境的要求比较低,电压低于5伏时仍然正常工作,甚至3伏到4伏之间都还可以工作,然而这样的环境下AT肯定不行了,所以当一个系统用STC

4

单片机好用,但用AT的单片机不工作时,直接查最小系统,看单片机的供电是否正常。

比较这两种方案,由于在学校期间学过数字电路、单片机原理、C语言程序设计,综合考虑单片机的各部分资源和作为学生能够获得的资源,经过对比此次设计要求,我选择用STC系列芯片完成。而且学校也提供了相应的硬件操作平台,实际操作起来比较方便,故STC为更合理的选择。

2.4 总体设计框图

按照系统功能的具体要求,在保证实现其功能的然础上,尽可能降低系统成本。总体设计方案围绕上述思想,初步确定系统的方案如图2-1所示:

S T C 8 9 C 5 2 单片机 P2.2-P2.7 LCD12864液晶显示屏 P3.4-P3.7 WT588D语音模块 P3.2-P3.3 独立按键

图2-1 系统初步方案

从图中可以看出,系统有微处理器模块、液晶屏显示模块、独立按键模块和语音模块组成。在方案设计中,遵循简洁至上的原则,因此所有的外围模块采用串行方式与微处理器模块接口。该设计以STC89C52系列单片机为控制核心,实现公交车语音报站基本功能。在设计系统时,为了更好地采用模块化设计法,分步的设计各个单元功能模块,系统的硬件部分可以分为键盘设定、单片机控制、LCD显示和语音控制四大部分。

5

第3章 系统硬件设计

3.1 概述

此次的毕业设计主要由4个大的模块构成,分别是主控模块、语音芯片模块、LCD液晶显示模块、键盘控制模块,其中主控模块是此次毕业设计的核心模块,主要是指STC89C52芯片,它控制整个系统的运行,利用其各个口分别控制其他模块,使其他模块能够成为一个整体,实现功能的需要;语音模块主要指WT588D芯片和LM386芯片,用WT588D来实现录音功能,LM386实现功率放大;而LCD液晶显示模块是整个系统的辅助模块,用来显示到站信息;按键控制模块则是用按键来控制实现的是哪个功能,对应录音、放音。

3.2 主控模块

3.2.1 STC89C52芯片的简介

功能特性:STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案,如图3-1所示。STC89C52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2 个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

主要性能:与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz 、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符[1]。

如图3-1:

6

3.3.2 语音芯片模块电路原理图

STC89C52和WT588D之间的连接较少,其中P3.7接WT588D的片选引脚RESET,控制WT588D的选通与否。P3.5接WT588D的串行输入引脚VSDA,从该引脚读入放音的地址。P3.3接WT588D的串行时钟引脚VSCL,对于WT588D芯片所需要的连接还有音频信号输出引脚AUDOUT,该引脚通过一个滤波电容与扬声器连接,AMCAP为自动静音端,使用时通过一个电容接地。此外由于WT588D的工作电压为3伏,而单片机所需供电电压为5伏,因此需要采用变压电路得到3伏电压供WT588D使用。

语音芯片模块电路原理图如图3-7所示:

图3-7 语音芯片模块电路原理图

3.4 LCD液晶显示模块

液晶显示器LCD(Liquid Crystal Display)广泛应用于微型计算机系统中,与LED相比,具有功率低,抗干扰能力强,体积小,价格低廉等优点。另外,LCD在大小和形状上更加灵活,接口简单,不但可以显示数字、字符,而且可以显示文字和图形。

字符和数字的简单显示,不能满足图形曲线和文字显示的要求。点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及文字,并且可以实现屏幕上下左右滚动、动画、分区开窗口、反转、闪烁等功能,用途十分广泛。现在,随着液晶技术的突破,液晶显示器的质量有了很大的提高,品种也在不断推陈出新,不但有各种规模的黑白液晶显示器,还有绚丽多彩的彩色液晶显示器。在点阵式液晶显示器中,把控制驱动电路与液晶点阵集成在一起,组成一个显示模组,可与八位微处理器接口

12

直接连接,不但使用方便,而且价格也比较便宜。

TH12864液晶显示模组是128×64点阵的文字图形型液晶显示模组,内置国标GB2312码简体中文字库(16×16点阵)、ASCII码字符集(8×16点阵)和64×256点阵显示RAM(GDRAM绘图区域);可与CPU直接接口,提供两种界面来连接微处理机(八位并行及串行连接方式);具有光标显示、画面移位等多种功能[8]。

3.4.1 组成结构

TH12864使用ST7920作为行驱动器,同时使用ST7921作为列驱动器。液晶显示中应尽量避免一个字符一半在左半屏显示,另一半在右半屏显示的情况。由于TH12864液晶显示器是一种带有输出驱动的完整的液晶显示器,八位微处理器可直接与其相连,对液晶屏进行行、列驱动。

3.4.2 引脚功能

TH12864液晶显示器有20个管脚,分电源线、数据线和控制线。其详细功能如下:

1、电源部分

VDD 电源正极,通常接+5V。

VSS 电源负极,接-5V。为了简化电路,可直接接地。

V0 电源控制端,用来调节显示屏灰度。调节该端的电压,可以改变显示屏字符、图形的颜色深浅。

2、数据线

DB0~DB7 数据总线,双向。 3、控制信号

PSB 并口/串口选择信号,接高电平时选择并口,接低电平时选择串口。模块上一般都有跳线方式将其接高或接低,用户可以不处理(事先须声明是用并口还是串口);也可以选择不在模块上处理,而由用户自己选择并口还是串口[9]。

RS(CS) 寄存器选择信号,高电平时为数据操作,低电平时为写指令或读状态(串行方式下为片选信号,低电平有效)。

R/W(SID) 读/写选择信号,高电平为读选通,低电平为写选通(串行方式下作数据线使用)。

E(SCLK) 读/写使能信号,在E的下降沿,数据被锁存(写)入ST7921;在E为高电平期间,数据被读出(串行方式下作时钟输入)。

13

RST 复位信号,低电平有效。当其有效时,关闭液晶显示,使显示起始行为0。可与单片机相连,由单片机控制;也可直接接VDD,使之不起作用。

BLA 背光源正极(LED+5V)。 BLK 背光源负极(LED0V)[10]。 电路原理图如图3-8:

图3-8 液晶显示模块电路原理图

14

3.5 按键控制模块

3.5.1 按键控制模块电路原理图

按键分为两类:独立式按键和矩阵键盘。

独立式键盘是最简单的键盘电路,各个键相互独立,每个按键独立的与一根数据输入线相连接。任何一个键按下时,通过门电路都会向CPU申请中断,在终端服务程序中,读入对应值,从而判断是哪一个按键被按下。查询时,平时所有的数据输入线都通过上拉电阻被连接成高电平;当任何一个键被压下时,与之连接的数据输入线将被拉成低电平,要判断是否有键被压下,只要用位处理指令即可。

15

第4章 系统软件设计

4.1 系统的主流程图

在对所要设计的课题有了整体的了解之后,需要先建立程序框架的流程图,对整个设计划分模块,逐个模块实现其功能,最终把各个子模块合理的连接起来,构成总的程序。主程序首先要对整个系统进行初始化,然后将指令传给芯片,设置按键功能,按下按键,看其对应的按键,完成预期的功能。

系统的主流程图如图4-1所示:

开始 系统初始化 N K1是否被按下? Y 调用按键子程序 调用录音子程序 K2是否按下? Y 判断按键次数 调用语音模块放音子程序 调用液晶显示子程序 结束

16

第6章 结论与展望

本系统以单片机为核心部件的控制系统,利用软件编程,最终基本上实现了各项要求。虽然系统还存在一些不足,比如放音时侯噪声比较大等问题,我们尝试了很多改进的方法,虽然效果不理想,但是,我们还是从中学到了很多的解决问题的方法。

经过近两个月的奋斗,从确定题目,到后来查找资料,理论学习,实验编程调试,这一切都使我的理论知识和动手能力有了很大的提高。了解了单片机的硬件结构和软件编程方法,对单片机的工作方式有了很大的认知。同时,对一些外围设备比如WT588D芯片等有了一定的了解,学会了对一项工程如何设计:首先,要分析需要设计的系统要实现什么功能,需要什么器件;然后,针对设计购买相应的硬件,选用硬件时不仅要选用经济的,更重要的是如何能更精确更方便的完成系统的要求;再次,对各个硬件的软件实现要弄清楚,如何更好的实现各个硬件的协调,更好的通过主控制器件实现硬件的功能。最后,通过各种测试与调试,让设计更好的完成系统要求。

但因为我们的水平有限,此设计中也存在一定的瑕疵,有待于我们去改善。由于使用的是单片机作为核心的控制元件,配合其它器件,使本控制系统具有性能良好、电路简单、成本低的特点。

22

参考文献

[1] 陈明荧.8051单片机课程设计实训教材[M]. 北京:清华大学出版社,2003 [2] 徐新艳.单片机原理、应用与实践[M]. 北京:高等教育出版社,2005

[3] 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M]. 北京:清华大学出版社,2002 [4] 王千.实用电子电路大全[M]. 电子工业出版社,2001

[5] 冯博琴.微型计算机原理与接口技术[M]. 北京:清华大学出版社,2004 [6] 张毅刚.MCS-51单片机应用设计[M]. 哈尔滨工业大学出版社,2004

[7] 张淑清,姜万录等.单片微型计算机接口技术及应用[M]. 国防工业出版社,2003 [8] 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M]. 北京:清华大学出版社,2001 [9] 赵亮,侯国锐.单片机C语言编程与实例[M]. 北京:人民邮电出版社,2003

[10] 王振红,李洋,郝承祥.WT588D语音芯片的工作原理及其在智能控制系统中的应用[J]. 子器件2002年3月第25卷第1期

[11] Ingle-Chip Voice Record/Playback Devices 4-, 5-, 6-, and 8-Minute Durations,1990 [12] ANALOG DEVICES.The technology of AT89C51[EB/OL].White Paper,Spe.28,2000

23

致 谢

这次毕业设计能够顺利完成,要非常感谢电子信息专业的所有老师和同学,尤其是我的毕业论文指导老师—高迎霞老师的指导和帮助,高老师在我毕业论文的撰写过程中,给我提供了极大的帮助和指导。从开始选题到中期修正,再到最终定稿,高老师都给我提供了许多宝贵建议。还要感谢实习期间实习老师对硬件方面的指导。

在本次设计中,我不仅学到了很多有关本次设计题目的知识,而且学到了很多治学态度和为人处世的道理,这一切都将使我终身受益。谨在此向致以崇高的敬意!对给予我支持和帮助的所有老师和同学们表示衷心的感谢。

24

附录A 程序清单

#include //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 #define uint unsigned int #include

uchar code shuzi[]=\

char code shuzi_c[]=\

sbit rs=P2^5; sbit rw=P2^6; sbit e =P2^7;

bit flag_200ms = 1; uchar menu_1; uchar flag_clock_en; uchar open1; uchar flag_c_en; bit flag_100ms;

uchar n_nian,n_yue,n_ri;

/***********************语音模块控制IO口的定义************************/ sbit VRST = P3^7; sbit VBUSY= P3^6; sbit VSDA = P3^5; sbit VCS = P3^4; sbit VSCL = P3^3; uchar yujing[3];

30

//闹钟标志位

//寄存器选择信号 H:数据寄存器 L:指令寄存器 //寄存器选择信号 H:数据寄存器 L:指令寄存器 //片选信号 下降沿触发

//无符号整型 宏定义

变量范围0~255 变量范围0~65535

//闹钟开标志位

/******************************************************************** * 名称 : delay_1ms() * 功能 : 延时1ms函数 * 输入 : q * 输出 : 无

***********************************************************************/ void delay_1ms(uint q) { }

/*********************定时器0、定时器1初始化******************/ void time0_init() { }

uint i,j; for(i=0;i

for(j=0;j<115;j++);

EA = 1; TMOD = 0X11; ET0 = 1; TR0 = 1;

//开总中断

//定时器0、定时器1工作方式1 //开定时器0中断 //允许定时器0定时

/************ 延时函数 *****************/ void delay_uint(uint z) {

while(z--); }

/***************交换函数 高位变低位 低位变高位*****************/ uchar change_dat(uchar dat) {

uchar i,value;

31

for(i=0;i<8;i++) {

value <<= 1;

if((dat & 0x01) == 0x01)

value |= 0x01;

dat >>= 1;

}

return value;

}

/************ 写命令函数void write_com(uchar com) {

P0=change_dat(com); rw=0; rs=0;

delay_uint(25); e=1;

delay_uint(50); e=0; }

/************ 写数据函数void write_dat(uchar dat) {

P0=change_dat(dat); rw=0; rs=1;

delay_uint(25); e=1;

delay_uint(50); e=0;

*****************/ *****************/ 32

}

/********************************************************** *函数名: addr_12864 *功能:写地址

*说明:写汉字时要写个地址 *输入:无 *返回:无

**********************************************************/ void addr_12864(uchar hang,uchar lie) //地址转换 { }

/********************************************************** *函数名: write_string

*功能:在12864上显示字符数据 *说明: *输入:无

33

uchar address; switch(hang) { }

case 1: address=0x80 + lie ;

break;

case 2: address=0x90 + lie ;

break;

case 3: address=0x88 + lie ;

break;

case 4: address=0x98 + lie ;

break;

default :

break;

write_com(address);

*返回:无

**********************************************************/

void write_string(uchar hang,uchar lie,uchar *p) { }

/************12864液晶初始化函数*****************/ void init_12864() {

write_com(0x30); write_com(0x0c); write_com(0x01); }

/************初始化显示*****************/ void init_12864_dis() { }

34

write_string(1,0,\ 欢迎乘座 \write_string(2,0,\ BRT 3 号线 \write_string(3,0,\ \write_string(4,0,\ \addr_12864(hang,lie); while(*p != '\\0') { }

write_dat(*p); p++;

delay_uint(50);

//地址转换

/***********************小延时函数**************************/ void delay_us (unsigned int us) { }

/***********************三线发码子程序************************/ void Send_threelines(unsigned char addr) {

unsigned char i;

VRST=0; delay_1ms(5); VRST=1;

delay_1ms(20); /* 复位拉高20ms*/ VCS=0;

delay_1ms(5); /* 片选拉低5ms */ while(us--) { }

_nop_();

for(i=0;i<8;i++)

{

VSCL=0; if(addr&0x01) { } else

VSDA=0; VSDA=1;

addr>>=1;

delay_us(150); /* 150us */

35

VSCL=1;

delay_us(150); /* 150us */

} VCS=1;

delay_1ms(200); // while(VBUSY == 0);

//忙等待

}

/********************独立按键程序*****************/ uchar key_can; //按键值

void key() //独立按键程序 { static uchar key_new;

key_can = 20; //按键值还原 P1 |= 0x03;

if((P1 & 0x03) != 0x03)

//按键按下

{ delay_1ms(1);

//按键消抖动

if(((P1 & 0x03) != 0x03) && (key_new == 1)) {

key_new = 0; switch(P1 & 0x03) { case 0x02: key_can = 2; break; case 0x01: key_can = 1; break;

} }

}

else //按键松开

key_new = 1;

}

36

//确认是按键按下 //得到按键值 //得到按键值

/***************主函数*****************/ void main() { }

37

uchar num;

P0 = P1 = P2 = P3 = 0XFF; init_12864(); init_12864_dis();

Send_threelines(0); //语音播报 while(1) { }

key();

//独立按键程序

if(key_can < 20) { }

if(key_can == 1) { }

if(key_can == 2) { } }

if(num != 0)

num--;

if(num < 6) { }

num++;

38

本文来源:https://www.bwwdw.com/article/lv63.html

Top