1、 摘 要 单片机自从70年代出现以后迅速发展起来,目前功能更加完善,广泛用于各种控制系统中。开发板以某一单片机为控制核心,集成一些基本硬件模块,可以作为主控模块在各种设备中实现控制功能,也可以用作实验板供初学者练习实践,使用方便,能加快产品开发速度。对自动化专业的学生来说,拥有一块单片机开发板,不管是用来开发产品或学习单片机都非常必要。所以,我设计了一个基于STC12C5410AD单片机的开发板。本文以STC12C5410AD单片机为控制芯片,设计了一个开发板最小系统,主要包括电源模块、DS1302时钟模块、矩阵键盘和独立键盘模块、LCD1206和12864液晶显示模块、数码管显示模块、步进电
2、机模块、RS232串行通信模块、DS18B20温度检测模块及存储器扩展模块,同时编写了相应的软件程序。关键词:单片机,开发板,STC12C5410AD Design of Development Board Based on STC12 Series MCUABSRACTSingle chip microcomputer has been developed rapidly since the 1970s, at present, its function is more perfect, and it is widely used in various control systems. De
3、velopment board use a single chip processor as the core, integrate some basic hardware modules, can be used as a main control module to control functions in a variety of devices, can also be used as the experimental plate for beginners to practice exercises, easy to use, can accelerate product devel
4、opment.For automation professional students, having a microcontroller development board, whether to develop products or learn microcontroller, is very necessary. So, I designed a development board based on STC12C5410AD MCU.This paper designed a development board minimum system based on STC12C5410AD
5、microcontroller, mainly including power supply module , DS1302 clock module, matrix keyboard and independent keyboard module, LCD1206 and 12864 liquid crystal display module, digital tube display module, stepper motor module, RS232 serial communication module, DS18B20 temperature detection module an
6、d memory expansion module, also write the corresponding software program.KEY WORDS: Single Chip Microcomputer, Development Board, STC12C5410AD目录前言1第1章系统方案21.1总体设计方案21.2设计原则2第2章 硬件电路设计42.1硬件整体结构框图42.2硬件电路设计52.2.1 STC12C5410AD单片机主控制模块52.2.2 键盘电路设计72.2.3 DS1302时钟模块82.2.4 测温模块102.2.5 RS232串行通信模块112.2.6
7、显示模块122.2.7 步进电机模块172.2.8 存储器扩展模块17第3章 软件设计193.1 整体程序设计193.2 各模块程序设计193.2.1 键盘模块程序设计193.2.2 DS1302时钟模块程序设计203.2.3 测温模块程序设计233.2.4 RS232串行通信模块程序设计263.2.5 显示模块程序设计273.2.6 步进电机模块程序设计33第4章 开发板PCB设计354.1 开发板PCB设计354.2 开发板功能说明35结论37谢 辞38参考文献39附录40外文资料翻译49IV前言 单片机诞生于1971年,经历了SCM、MCU、SOC三大阶段,单片机技术的发展以微处理器(M
8、PU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点,表现出较微处理器更具个性的发展趋势。小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机开发板也称单片机学习板、单片机实验板。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。 STC公司的单片机主要是基于8051内核,是
9、新一代增强型单片机,指令代码完全兼容传统8051,速度快812倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强。本文的主要内容是掌握STC12系列单片机的结构、接口、片上外设的特点,并用STC12C5410AD单片机的片上资源设计出适当的最小系统。包括整体方案设计、单片机及外设的选型、硬件电路设计及PCB图的绘制、软件程序编写。1 第1章系统方案1.1总体设计方案目前市场上单片机的品牌繁多,功能丰富,结合自身需要,以及综合功能设计要求,目前市场比较流行的STC单片机是个不错的选择。STC12系列 单片机是一款性价比非常高的单片机,它完全兼容 MSC-51 系列单片机, 除
10、此之外它自身还有很多特点,如:无法解密,低功耗,高速,高可靠,强抗静电,强抗干扰等。STC12C5410AD系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路,4路PWM,8路高速10位A/D转换,从而使得最小系统的硬件设计大为简单。本文设计一个STC12系列单片机开发板,主要内容有:(1) 总体方案设计,单片机及外设等的选型。(2) 设计硬件电路,完成开发板PCB设计。 (3) 软件设计,完成各功能模块软件例程设计。(4) 对设计的开发板进行分析,找出
11、系统的不足并提出改进的方法。1.2设计原则开发板系统的扩展和配置应遵循以下设计原则1: (1) 尽可能选择典型电路,并符合单片机常规用法。为硬件系统的标准化、模块化打下良好的基础;(2) 系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发; (3) 硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间;(4) 系统中的相关器件要尽可能做到性能匹配。如选用CMOS芯片单片机构成低功耗系统时,系统中所有
12、芯片都应尽可能选择低功耗产品; (5) 可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等;(6) 单片机外围电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载; (7) 尽量朝“单片”方向设计硬件系统。系统器件越多,器件之间相互干扰也越强,功耗也增大,也不可避免地降低了系统的稳定性。 第2章 硬件电路设计2.1硬件整体结构框图硬件电路主要包括:STC12C5410AD单片机主控制器模块、电源模块、DS1302时钟模块、矩阵键盘和独立键盘模块、数码管显示模块、步进电机模
13、块、DS18B20温度检测模块、RS232串口模块、LCD1602模块、LCD12864模块及存储器扩展模块。其中以STC12C5410AD单片机作为核心控制器,键盘模块用来向单片机输入特定编码的信,DS1302时钟模块用来实现实时时钟,测温模块用来测量环境温度,RS232模块通过电平转换实现通信,数码管模块用来显示简单的数字、字母;LCD1602模块用来显示字母、数字、符号,LCD12864模块用来显示图像、符号、汉字2。硬件结构框图如图2-1所示。图2-1 总体硬件结构框图2.2硬件电路设计2.2.1 STC12C5410AD单片机主控制模块STC12C5410AD单片机最小系统包括:MC
14、U、复位电路、晶振电路。原理图如图2-2所示11: 图2-2 STC12C系列单片机主控制模块原理图STC12C5410AD系列单片机特点:(1) 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051(2) 工作电压:STC12C5410AD 系列工作电压: 5.5V - 3.5V(5V单片机)STC12LE5410AD 系列工作电压: 3.6V - 2.2V(3V单片机)(3) 工作频率范围:035MHz,相当于普通8051的 0420MHz(4) 用户应用程序空间 12K /10K / 8K / 6K / 4K / 2K / 1K 字节.(5) 片上集成512字节
15、 RAM(6) 通用I/O口( 27/23/15个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55mA(7) ISP(在系统可编程)/ IAP(在应用可编程),可通过串口(P3.0/P3.1)直接下载用户程序(8) 有 EEPROM功能(9) 看门狗(10) 内部集成MAX810专用复位电路(外部晶体12M以下时,可省外部复位电路)(11) 时钟源:外部高精度晶体/时钟,内部R/C振荡器,用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/ 时钟。常温下内部R/C振荡器频率为:5.2MHz
16、 6.8MHz(12) 共6个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0 和T1,没有定时器2,PCA模块可再实现4个16位定时器(13) 2个时钟输出口,可由T0的溢出在P1.0输出时钟,可由T1的溢出在P1.1输出时钟(14) 外部中断9路,下降沿中断或低电平触发中断,PCA模式可分别或同时支持上升沿中断/下降沿中断,Power Down模式可由外部中断唤醒(15) PWM(4路)/PCA(可编程计数器阵列4路)- 也可用来当4路D/A使用- 也可用来再实现4个定时器- 也可用来再实现4个外部中断(上升沿中断/下降沿中断均可分别或同时支持)(16) A/D转换,1
17、0位精度ADC,共8路(17) 通用全双工异步串行口(UART),由于STC12系列是高速的8051可再用定时器软件实现多串口(18) SPI同步通信口,主模式/从模式(19) 工作温度范围:-40 +85(工业级) / 0 75(商业级)(20) 封装:LQFP-32,,SOP-32/28/20,SKDIP-28,PDIP-20,TSSOP-20 (超小封装6.4mm6.4mm),LQFP32/SOP32有27个I/O口,SOP28/SKDIP28有23个I/O口,SOP20/TSSOP20/PDIP20有15个I/O口,I/O口不够时,可用2到3根普通I/O口线外接74HC595/164/
18、165(均可级联)来扩展I/O口还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。图2-3 STC12C5410AD内部结构图2.2.2 键盘电路设计键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)5。本设计键盘模块包括独立键盘和矩阵键盘,当所需按键数量很少的时候选择独立按键,独立按键原理图如图2-4所示:图2-4 独立按键电路原理图在键盘中按键数量较多时
19、,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图2-5所示: 图2-5 矩阵键盘电路原理图矩阵键盘通过JPZ1和PJZ用排插和单片机P2口连接,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P2口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键),在需要的按键数较多时,采用矩阵法来做键盘是合理的6。2.2.3 DS1302时钟模块DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可
20、以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.55.5V。采用三线接口与MCU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。主要性能指标有:31字节带后备电池的RAM用于数据存储;串行I/O口,管脚数量少;宽范围工作电压:2.05.5V;工作电压2.0V时,电流小于300nA;读/写时钟或RAM数据时有两种传送方式单字节传送和突发模式传送;8 脚DIP封装或其他可选封装方式;简单的3线接口;与TTL 兼容(Vcc = 5V);可选工业级温度范围:- 40+ 85;与DS12
21、02 兼容4。DS1302 的引脚如图2-6所示: 图2-6 DS1302引脚图Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2高于Vcc1时,Vcc2给DS1302供电。当Vcc2低于Vcc1时,DS1302由Vcc1 供电。X1、X2为振荡源,外接32.768MHz晶振。I/O为串行数据输入/输出端(双向),SCL K为时钟输入端。RST是复位片选线,通过把RST输入驱动置为高电平来启动所有的数据传送。RST输入有两种功能:RST接通控制逻辑,允许地址/命令序列送入移位寄存器;RST提供了终止
22、单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许DS1302进行操作。如果在传送过程中置RST为低电平,则会终止此次数据传送,并且I/ O引脚变为高阻态。上电运行时,在Vcc高于2. 5V之前,RST必须保持低电平。只有在SCL K为低电平时,才能将RST置为高电平。DS1302时钟模块的原理图如图2-7所示:图2-7 DS1302时钟原理图单片机与DS1302通过P3.5、P3.6、P3.7相连,分别为时钟信号线、输入输出线、复位信号线。DS1302的晶振引脚连接32.768MHZ的晶振。2.2.4 测温模块 DS18B20 是DALLAS 半导体公司生产的,是
23、一种单总线温度传感器,属于新一代适配微处理器的智能温度传感器,有两种封装形式分别为3脚PR-35封装和16脚SSOP封装3。本文采用的是3脚PR-35封装,其具有以下特点:采用了单总线技术,传感器直接以二进制输出被测温度,可通过串行口线,也可与单机通过I/O 口连接;测量温度范围为:- 55+125,测量精度高达+0.5;内含寄生电源,在两线方式下可通过数据线提供寄生电源,而不需要再单独供电;转换时间在分辨率为12位(即0.0625)时最大为750ms;用户可分别对每个器件设定温度上下限;DS18B20 在使用时不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;电源极
24、性接反时,芯片不会因发热而烧毁,但不能正常工作;每个DSl8B20 器件对应一个唯一的64 位长的序号,该序号值存放ROM中,可通过序号匹配实现多点测温。DS18B20温度传感器模块的原理图如图2-8所示:图2-8 DS18b20温度传感器模块原理图(1) VDD接电源引脚,电源供电3.05V(2) DQ为数据的输入和输出引脚(3) GND接地DS18B20通过插针与单片机的P3.7相连,作为数据/控制信号线。在两线方式下可通过数据线提供寄生电源,而不需要再单独供电,本设计中采用三线方式,由电源直接供电。2.2.5 RS232串行通信模块RS232是由电子工业协会(Electronic Ind
25、ustries Association,EIA) 所制定的异步传输标准接口。对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。RS232与TTL电路之间需要进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。MAX232芯片可完成TTLRS232双向电平转换。MAX232芯片是RS232标准接口芯片,使用+5v单电源供电。是PC机与单片机串口进行通讯的电平转换芯片。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS232串口电平的需要。第二部分是数据转换
26、通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5V)。MAX232模块的原理图如图2-9所示:图2-9 MAX232模块的
27、原理图单片机与MAX232通过P3.0、P3.1相连,分别为发送线、接收线,另外单片机要与MAX232共地。2.2.6 显示模块1. 数码管模块(1) 数码管静态显示原理当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。(2) 动态扫描显示原理 动态扫描显示中,八个数码管依次被点亮并不断循环, 如果速度足够快,那么将看到连续的数
28、字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,每个时刻只有一个数码管被点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。(3) 硬件实现数码管模块的原理图如图2-10所示:图2-10 数码管模块原理图如图2-10所示,单片机通过一片74HC573锁存器控制数码管的段选,通过一片74LS138译码器控制数码管的位选7,74HC573的使能直接接单片机的P2.5引脚,PSC通过8PIN排线接单片机的P1口。2. LCD1602模块(1) LCD1602简介LCD16
29、02点阵字符液晶模块是由点阵字符液晶显示器件和专用的行列驱动器,控制器及必要的连接件,结构件装配而成,可以显示数字和英文字符。LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2-1所示:表2-1 LCD1602引脚接口图 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3数据 3 VL 液晶显示偏压 11 D4数据 4 RS 数据/命令选择 12 D5数据 5 R/W 读/写选择 13 D6数据 6 E 使能信号 14 D7数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK
30、 背光源负极(2) 硬件实现LCD1602模块的原理图如图2-11所示:图2-11 LCD1602模块原理图LCD1602通过插针可以与单片机P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6、P1.7、P2.0、P2.1、P2.2相连,P1.0P1.7为数据线,P2.0、P2.1、P2.2为控制线。3. LCD12864模块(1) LCD12864简介8LCD12864汉字图形点阵液晶显示模块可以显示汉字、图形、ASC码和自定义字形,内置8192个16*16的中文汉字、128个8*16字符、以及64*256点阵显示RAM,控制器为ST7920,具有串/并接口方式,其内部含有
31、中文字库,LCD12864显示屏为128*64点阵,可显示4行,每行8个字,模块内含有多种软件功能:光标显示、画面移位、自定义字符、反白、清除、关闭显示和睡眠模式等,可方便地对模块进行控制。模块内置升压电路,无需负压,配置LED背光。3V低电平工作时,只需一个20K的电阻与Vo的地相接。适用于3.3V5V宽范围工作电压的系统。RS,R/W的配合决定的4种模式见表2-2:表2-2 RS,R/W决定的控制模式 RS R/W功能说明 L LMPU写指令到指令暂存器(IR) L H读出忙标志(BF)及地址记数器(AC)的状态 H LMPU写入数据到数据暂存器(DR) H HMPU从数据暂存器(DR)中
32、读出数据LCD12864的并行接口见表2-3:表2-3 LCD12864的并行接口 管脚号管脚名称 电平 管脚功能描述1 VSS 0V电源地2 VCC 3.0+5V电源正3 V0 -对比度(亮度)调整4RS(CS)H/L RS=“H”,表示DB7-DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/L R/W=“H”,E=“H”,数据被读到DB7-DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7 DB0H/L三态数据线8 DB1H/L三态数据线9 DB2H/L三态数据线10 DB3H/L三态数据线11 DB4
33、H/L三态数据线12 DB5H/L三态数据线13 DB6H/L三态数据线14 DB7H/L三态数据线15 PSBH/LH:8位或4位并口方式,L:串口方式16 NC-空脚17 /RESETH/L复位端,低电平有效(见注释2)18 VOUT-LCD驱动电压输出端19 AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接
34、。(2) 硬件实现开发板上LCD12864模块的原理图如图2-12所示:图2-12 LCD12864模块原理图LCD12864通过插针可以连单片机的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6、P1.7、P2.0、P2.1、P2.2,P1.0-P1.7为数据线,P2.0、P2.1、P2.2为控制线。2.2.7 步进电机模块步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积
35、误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用,它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用.步进电机有三线式、五线式和六线式,但其控制方式均相同,都要以脉冲信号电流来驱动。假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电机前进1.8。其旋转角度与脉冲的个数成正比。步进电动机的正、反转由励磁脉冲产生的顺序来控制。本设计采用五线四相步进电机,原理图如图2-13所示。步进电机模块使用达林顿驱动器ULN2003,该芯片单片最多可一次驱动八线步进电机,当然只有五线更没有问
36、题。本实验原理图如图2-13所示。JBJ2为电机五线接口,其中JBJ2的2至5脚通过插针连单片机的P1.0-P1.3,分别控制步进电机的相序A,B,C,D。 图2-13 步进电机模块原理图2.2.8 存储器扩展模块传统51很多时候都采用并行扩展存储器,技术较为成熟,且较为简单。串行存储器扩展用到较少的I/O口,编程简单,在远距离通信时较并行传输有廉价的优势,且随着科技的进步,串口也已走红。考虑到选用的单片机I/O口有限以及学习串行传输的前瞻性,本设计选择串行存储芯片24C02扩展串行存储器。原理图如图2-14所示。 图2-14 存储器扩展模块原理图 A0、A1、A2三个引脚为AT24C02的硬
37、件地址线,根据引脚上的电平决定当前器件的硬件地址。WP为AT24C02的写保护引脚,当该引脚为高电平时,器件只读不写。SCL、SDA分别为器件的IIC协议接口。18洛阳理工学院毕业设计(论文)第3章 软件设计3.1 整体程序设计软件设计主要包括数码管显示程序、键盘程序、DS1302时钟程序、DS18B20测温程序、串口通信程序、LCD1602和12864显示程序、步进电机程序。3.2 各模块程序设计依据开发板上硬件资源,进行程序的开发,在软件的设计过程中,采用模块化的设计方法,依次分别为每个模块设计软件。下面分别介绍以上各个模块的程序设计。3.2.1 键盘模块程序设计矩阵式键盘的按键识别方法为
38、:判断键盘中有无键按下:将全部行线KEY0-KEY3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 矩阵式键盘的按键编码处理:将行线和列线依次进行数值编码,然后进行一定规则的运算,就是对键值的编码。 键盘
39、程序流程图如图3-1所示。图3-1 键盘程序流程图键盘采用的是行扫描法确定键值,在程序中具体是这样扫描键盘的:将键盘扫描码送入P2口,先是使行线依次为低电平,顺序为KEY1、KEY2、KEY3、KEY4,在某一行线为低电平的状态下,读取P2口的状态,将状态值依次右移四位,这样便将KEY5-KEY8的状态值移到了低四位,再将高四位状态值置一,将处理后的状态值与当前的扫描码比较,如果此时的状态值与四个扫描码中的一个相同,证明有键按下,此时保存扫描码的数组下标和与状态值相等的扫描码数组下标,并将两个值按照键盘编码值进行某一规则的四则运算后返回给主函数中的某一变量;如果在全部行线依次为低电平情况下的状
40、态值与四个扫描码中没有一个相同,证明没有键按下,返回-1到主函数。在主函数中调用键盘扫描函数对键盘进行扫描,判断返回键值,若返回值不为-1,证明右键按下,在某一个数码管上显示键值,若返回值为-1,证明没有键按下,显示先前按下的按键键值。3.2.2 DS1302时钟模块程序设计1. DS1302的工作时序DS1302 的复位特征和时钟控制要求:复位() 输入有两种功能:首先,用于接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,用于终止单字节或多字节数据的传送。当为高电平时,所有的数据传送被初始化,允许对DS1302 进行操作。如果在传送过程中置为低电平,则会终止此次数据传送,并且I/ O
41、引脚变为高阻态。上电运行时,在Vcc2.0之前,必须保持低电平。另外,当为高电平时,SCLK必须为低电平。DS1302 的数据输入输出:向DS1302 写入数据时,数据在控制字节输入后的下一个SCLK周期的上升沿被写入,多余的SCLK将被忽略。数据写入时从低位(位0) 开始;同样,从DS1302 读取数据时,数据在紧跟控制字节后的下一个SCLK的下降沿读出,读出数据时也是从低位(0位) 到高位(7位) ,只要 保持高电平,额外的SCLK将导致数据字节的持续读出,这个特性用于实现该芯片的突发读模式。数据读写时序如图3-2所示。图3-2 DS1302的读写时序突发模式下,可以一次性读出所有日历时钟
42、数据或RAM数据。2. DS1302的寄存器DS1302 共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD 码格式。其日历、时间寄存器及其控制字见表3-1:表3-1 DS1302的寄存器寄存器名 命令字 取值范围各位内容 写操作读操作 76 5 43210秒寄存器 80H 81H00-59启动 十位个位分寄存器 82H 83H00-590十位个位时寄存器 84H 85H00-12或00-2312/24010/AP十位个位日寄存器 86H 87H01-3100 十位个位月寄存器 88H 89H01-12000十位个位周寄存器 8AH 8BH01-0700000个位年寄存器
43、 8CH 8DH00-99 十位个位3. DS1302时钟程序流程图 操作DS1302的大致过程,就是将各种数据写入DS1302的寄存器,以设置它当前的时间已经格式。然后使DS1302开始运作,DS1302时钟会按照设置情况运转,再用单片机将其寄存器内的数据读出,再用数码管显示。DS1302时钟程序流程图如图3-3所示。 图3-3 DS1302时钟程序流程图在程序中定义了一个结构体,用来存储秒、分、时、星期、日、月、年信息,对DS1302的寄存器地址进行了声明,方便在编程时使用,依据DS1302读写单字节数据时序图编写实时时钟读写一个字节的函数,依据DS1302读写数据时序图编写向DS1302
44、某地址写入数据和从DS1302某地址读出数据的函数,从DS1302某地址读出数据可以获取时钟芯片的时钟数据到自定义的结构型数组中,这样单片机就可以实时的从DS1302获取时间了,向DS1302某地址写入数据可以实现单片机对DS1302进行时间的初始化和修改操作。3.2.3 测温模块程序设计1. DS18B20的工作时序单总线在任何时刻只能有一个控制信号或数据,数据要能在单片机和单总线芯片之间实现可靠的传送,遵循单总线处理次序通信协议,确保数据有条不紊地传送,单总线处理次序图如图3-4所示。图3-4 单总线处理次序图处理次序操作时,一般有以下4个过程:(1) 初始化。基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机的应答脉冲组成。应答脉冲使主机知道总线上有从机设备,且准备就绪。(2) ROM 操作命令。在主机检测到应答信号后,主机可以发出ROM 操作命令之一。所有的ROM 命令都是8 位,而且这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。可发送的ROM 命令有:读ROM,匹配ROM,