基于51单片机的无线投票表决器设计.docx
- 文档编号:10036629
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:57
- 大小:1.10MB
基于51单片机的无线投票表决器设计.docx
《基于51单片机的无线投票表决器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的无线投票表决器设计.docx(57页珍藏版)》请在冰点文库上搜索。
基于51单片机的无线投票表决器设计
无线投票器的设计
摘要:
本设计以直流电压源为核心,STC89C52RC增强型单片机为主控制器,单片机系统是无线投票器的核心。
它通过软件的运行来控制整个系统的工作,从而完成设定的功能。
通过三个数字键盘来进行投票,三个按键之中任意两个按下系统便认为投票通过,用24L01无线模块发射出去。
在接收端,可由液晶屏LCD1602显示实际投票结果,当三个按键中任意两个按下时,系统在1602液晶上显示Pass,反之显示Down.实际测试结果表明,本系统实际应用于投票领域。
关键词:
无线;投票器;单片机;24L01;STC89C52RC
Thedesignofwirelessvotingdevice
Abstract:
Inthisdesign,theDCvoltagesourceasthecore,STC89C52RCenhancedmicrocontroller-basedcontroller,microcontrollersystemisthecoreofthewirelessvotingdevice.Itthroughtheoperationofthesoftwaretocontroltheinstrument,thuscompletingthesetfunction.Threenumerickeypadtovoteonanytwoofthreekeypressthinksthatvotedtolaunchoutusing24L01wirelessmodule.BeLCDLCD1602displaystheactualvotingresultsatthereceivingend,whenanytwoofthethreebuttonsispressed,thesysteminthe1602'sLCDdisplayPass,contraryShowDown.Actualtestresultsshowthatthissystemisactuallyusedinthevotingfield.
Keywords:
Wireless;votingmachine;microcontroller;24L01;STC89C52RC
1引言
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
投票器,是投票反馈系统中的终端设备,是一种代替常规会议举手表决,会议举手投票,民主举手选举的一种装置。
投票器系统主要由:
基站,软件,终端设备三部分组成。
可以自由选择实名投票与非实名投票。
使用时,与会者只需按动手中投票器上对应的,“赞同”“反对”或者“弃权”即可,相应的投票结果会在电脑中记录并实时显示的屏幕上,从而公平公正的展现出来。
随着无线技术的发展,以及有线投票器的不方便性,无线投票器逐渐取代了有线投票器的市场。
基于单片机与无线技术的投票器的设计制作过程,以MCS-51系列单片机为控制核心设计投票系统的投票发射器与接收器。
投票发射器由单片机、三个按键、三个指示灯和NRF24L01模块等组成.三个键分别表示不按代表反对,按下代表同意。
投票器把投票结果信息编码后通过NRF24L01发射出去,接收器接收后,辨别发射传输的信息,若三个按键之中任意两个按下系统便认为投票通过,可由液晶屏LCD1602显示实际投票结果,当三个按键任意两个按下时,系统在LCD1602液晶上显示Pass,反之显示Down。
2设计要求及方案论证
2.1设计要求
单片机在各种电子产品中的应用已经越来越广泛,很多的电子产品利用单片机所取得的便利性得到了人们的好评,针对多路数据采集系统的要求提出了以下的方案:
设计一款能进行远程无线投票的设备,由2个投票端和一个控制端所组成,模拟远程投票。
2.2设计方案及论证
2.2.1控制模块方案及论证
方案一:
采用各类数字电路来组成键盘控制系统,进行信号处理,如选用CPLD等可编程逻辑器件。
本方案电路复杂,灵活性不高,效率低,不利于系统的扩展,对信号处理比较困难。
方案二:
采用STC89C52RC单片机作为这个系统的控制单元,可方便利用单片机内部的定时器等各种资源,方便程序的编写和无线射频模块的操作。
比较以上两种方案的优缺点,方案一采用中、小规模器件实现系统的数控部分,使用的芯片很多,造成控制电路内部接口信号繁琐,中间相互关联多,抗干扰能力差。
在方案二中采用单片机完成整个数控部分的功能,也便于系统功能的扩展[5]。
2.2.2显示模块方案及论证
方案一:
使用数码管显示
使用多位数码管显示,显示不灵活。
方案二:
使用LCD1602液晶显示
液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点。
本方案采用LCD1602,它具有两行显示,每行显示16个字符,采用单+5V供电,外围电路简单,价格便宜,具有很高的性价比。
而数码管虽然便宜,但显示单调。
占用过多的I/O。
综上所述,得到系统整体结构框图如图1所示。
图1系统整体结构框图
3.系统的硬件电路设计
3.1主控制器模块的设计【2】
本设计采用PDIP封装的STC89C52RC芯片为主控制器,该芯片正常工作电压为5V,支持的最高时钟频率为80MHz,Flash程序存储器为8KB,RAM数据存储器为512B,内置看门狗电路,支持ISP/IAP[6]。
本单片机具有以下优点:
(1)超低功耗。
●掉电模式:
典型功耗为0.5uA,可由外部中断唤醒,中断返回后,继续执行原程序。
●空闲模式:
典型功耗为2mA。
●正常工作模式:
典型功耗为4mA-7mA。
(2)超强抗干扰。
●I/O口、电源、时钟、看门狗、复位电路都是经过特殊处理。
●宽电压,不怕电源抖动,工作电压范围为3.4–6V。
●高抗静电(高ESD保护),轻松过2000V。
●快速冲干扰。
STC89C52RC芯片引脚图如图2所示。
图2STC89C52RC芯片引脚图
控制部分是系统整机协调工作和智能化管理的核心部分,采用STC89C52RC单片机实现控制功能是其关键,采用单片机不但方便监控,并且大大减少硬件设计。
由于本设计分两个板子但上面的单片机最小系统电路是一样的,所以在此仅以发射板单片机电路为例,STC89C52RC芯片原理图如图3所示。
图3STC89C52RC芯片原理图
3.2NRF24L01无线模块的设计【10】
NRF24L01是NORDIC公司最近生产的一款无线通信通信芯片,采用FSK调制,内部集成NORDI自己的EnhancedShortBurst协议。
可以实现点对点或是1对6的无线通信。
无线通信速度可以达到2M(bps)。
NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。
嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。
发射数据时,首先将nRF24L01配置为发射模式:
接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。
如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TXFIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。
最后发射成功时,若CE为低则nRF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。
当接收方检测到有效的地址和CRC时,就将数据包存储在RXFIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。
若此时自动应答开启,接收方则同时进入发射状态回传应答信号。
最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
NRF24L01内部结构如图4所示,NRF24L01模块电路图如图5所示,NRF24L01指令系统由6所示。
图4NRF24L01结构图
图5NRF24L01模块电路
图6NRF24L01指令列表
3.3按键控制模块的设计
本设计中,采用独立按键对单片机核心芯片STC89C52RC进行输入控制。
各按键分别一端接地,一端接单片机引脚。
实现功能:
三个键分别表示不按代表反对,按下代表同意。
键盘控制电路原理图如图7所示。
图7键盘控制电路原理图
3.4液晶显示模块的设计【1】
3.4.1LCD1602主要管脚介绍
显示模块用于接收机实时显示投票结果。
这里采用1602液晶显示屏,其主要参数为:
显示容量(16*2个字符),芯片工作电压(4.5-5.5V),工作电流(2.0mA),模块最佳工作电压(5.0V)[11]。
LCD1602共有16个引脚,LCD1602管脚功能介绍表如表1所示
表1LCD1602管脚功能介绍表
引脚图
符号
状态
功能
1
VSS
电源地
2
Vdd
电源+5V
3
V0
对比度控制端
4
RS
输入
寄存器选择
5
R/W
输入
读、写操作
6
E
输入
使能信号
7
DB0
三态
数据总线(LSB)
8
DB1
三态
数据总线
9
DB2
三态
数据总线
10
DB3
三态
数据总线
11
DB4
三态
数据总线
12
DB5
三态
数据总线
13
DB6
三态
数据总线
14
DB7
三态
数据总线(MSB)
15
LEDA
输入
背光+5V
16
LEDK
输入
背光地
说明:
V0:
液晶显示器对比度调整端,接正电源的对比度最弱,接地电源是对比度最高,对比度过高时会产生“鬼影”使用时可以通过一个10k的电位器调整对比度。
RS:
寄存器选择,高电平时选择数据存储器;低电平时选择指令寄存器。
R/W:
读写信号线,高电平时进行读操作,低电平进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址;当RS为高电平,R/W为低电平时可以写入数据。
E:
使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
3.4.2LCD1602控制指令
1.清屏指令如表2所示
表2清屏指令表
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
功能:
<1>清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;
<2>光标归位,即将光标撤回液晶显示屏的左上方;
<3>将地址计数器(AC)的值设为0。
2.显示开关控制表如表3所示
表3显示开关控制表
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
功能:
设置显示,光标及闪烁开,关
其中:
D表示显示:
1为开,0为关;
C表示光标:
1为开,0为关
D表示闪烁:
1为开,0为关
3.光标,画面移动表如表4所示
表4光标,画面移动表
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
S/C
R/L
*
*
功能:
光标,画面移动,不影响DDRAM
其中:
S/C=1,画面平移一个字符位
S/C=0,光标平移一个字符位
R/L=1:
右移;R/L=0:
左移
4.功能设置表如表5所示
表5功能设置表
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
DL
N
F
*
*
功能:
工作方式设置
其中:
DL=1,8位数据接口;DL=0四位数据接口;
N=1,两行显示;N=0,一行显示;
F=1,510点阵字符;F=0,57点阵字符
3.4.3液晶显示程序设计
1.读操作时序如图8所示
图8读操作时序
2.写操作时序如图9所示
图9写操作时序
3.4.4读写控制时序如表6所示
表6读写控制时序表
RS
R/W
E
功能
0
0
下降沿
写指令代码
0
1
高电平
读忙标志和AC码
1
0
下降沿
写数据
1
1
高电平
读数据
3.4.5LCD1602的一般初始化过程
1.延时15mS
2.写指令38H
3.写指令08H:
显示关闭
4.写指令01H:
显示清屏
5.写指令06H:
显示光标移动设置
6.写指令0CH:
显示开及光标设置
3.4.6LCD1602与单片机连接图
LCD1602与单片机连接图的连接图如图10所示。
图10LCD1602与单片机连接图
数据线DB0-DB7连接单片机的P0口;RS、R/W,E,3条控制线分别接单片机的P2.5、P2.6、P2.7口。
电阻R3用来设置背光的亮度。
3.5振荡电路设计模块的设计
单片机的工作是在统一的脉冲控制下的进行的。
这个脉冲就是由单片机控制器的时钟电路发出的,即时钟电路用于产生单片机工作所需的时钟信号。
单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
时钟电路用于产生单片机工作的时钟信号。
而时钟电路又各分为两种,即内部时钟方式和外部时钟方式。
本设计采用内部时钟方式此种方式时,单片机内接一个高增益反向放大器构成内部振荡器。
引脚XTAL1和XTAL2分别此放大器的输入端和输出端。
同时在XTAL1和XTAL2两端跨接晶体或陶瓷谐振器构成稳定的自激振荡器,其发出的脉冲信号直接送入到内部时钟发生器。
电容C1和C2通常选择为(30+或-10)pf左右;外接陶瓷谐振器时则选为47pf左右。
电容C1和C2对频率有微调作用。
为了减少寄生电容,更好地保证振荡器可靠地工作,谐振器和电容应安装得与单片机芯片尽可能的近。
内部时钟发生器实际上是一个二分频的触发器,该二分频为单片机提供一个二相的时钟信号即相位信号1(P1)和相位信号2(P2),驱动CPU产生执行指令功能的机器周期。
这里我们采用的是12MHz晶振,也就时说单片机的时钟周期为1/12uS,指令周期为1uS。
晶体振荡器的频率越高,振荡频率就越高[12],振荡电路原理图如图11所示。
图11振荡电路原理图
3.6晶振电路与复位电路设计
3.6.1晶振电路
晶振电路为单片机AT89C51工作提供时钟信号,芯片中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振荡器一起构成自激振荡器。
电路中的外接石英晶体及电容C5、C6接在放大器的反馈回路中构成并联振荡电路,系统的晶振电路如图3.3所示。
由于外接电容C5、C6的容量大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,电容的容量大小范围为
;如果使用陶瓷谐振,则电容容量大小为
。
本设计中使用石英晶体,电容的容值设定为30pF。
3.6.2复位电路
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分合过程中引起的抖动而影响复位。
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
AT89C51的复位信号是从REST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果REST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:
手动按钮复位和上电复位,本设计采用的是手动按钮复位。
手动按钮复位需要人为在复位输入端REST上加入高电平,采用的办法是在REST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到REST端,系统复位。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以,设计完全能够满足复位的时间要求。
复位电路中SW-PB为手动复位开关,电容Ch1可避免高频谐波对电路的干扰。
㈠CPU内部复位电路
因为MCS-51系列单片机采用高电平复位方式,其内部复位电路如图3-15所示,高电平复位脉冲RST引脚输入到内部施密特触发器整形后,送CPU内部复位电路。
CPU在每一个机器周期的S5P2相采样施密特触发器的输出端,若为高电平,则强迫机器进入复位状态。
为了保证CPU内部各个单元电路可靠复位,RST引脚复位脉冲高电平维持时间必须大于等于2个机器周期(即24个振荡周期)[13]。
内部复位电路如图12所示。
图12内部复位电路
㈡外部复位电路
可以使用RC分立元件或微处理器监控芯片构成MCS-51单片机的外部复位电路[14]。
本设计中采用RC分立元件构成MCS-51外部复位电路,外部复位电路图电路如图13所示。
图13外部复位电路
按下复位按键K20时,电容C3通过R1放电,当电容放电结束后,RST引脚电位由R1、R2分压比决定。
由于R2>>R1,因此RST引脚为高电平,CPU进入复位状态。
松开复位按键后,电容C3充电,RST引脚电位下降,使CPU脱离复位状态[15]。
R1的作用在于限制复位按钮瞬间电容C3的放电电流,避免产生火花,以保护按钮的触点。
单片机的复位都是靠外部电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲以上的高电平,单片机便实现初始化状态复位。
为了保证应用系统可靠地复位,在设计复位电路时,通常使RST保持高电平。
只要RST保持高电平,则单片机就循环复位[16]。
3.7电源模块的设计
本设计两块板子都是用USB供电方式,以USB接口接收电脑或充电器5V电源,输入后经过100uf和0.1uf电容滤波后,提供给系统。
电源模块电路图如图14所示。
图14电源模块电路图
4系统软件设计
4.1用C语言开发单片机的优势【7】
C语言是一种编译型的结构化程序设计语言,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。
用C语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统[17]。
4.2系统程序设计流程图
此系统中用到单片机的部分功能:
键盘扩展,程序中断,I/O控制等。
主程序基本没什么是可做,但因键盘扫描时通过程序查询的方式来实现的,所以在主程序中要调用键盘扫描程序。
发射板系统流程图如图15所示,接收板流程图如图16所示
4.3软件编译与调试
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
本设计软件编译使用的是uVision2编译器。
选择CPU型号窗口中选择CPU生产厂家及芯片型号。
这里选择的是Atmel公司的AT89C52芯片。
选择芯片界面设置如图17所示。
图17选择芯片界面设置
程序代码编写完后需要编译链接生成目标代码,然后进行硬件调试或模拟仿真,编译代码可以点击
或键盘的快捷键F7。
编译后的结果如图18所示。
图18软件编译结果界面
编译软件后,要对代码进行下载到STC89C52RC单片机中。
这里选用的是STC-ISP下载软件,STC程序下载界面如图19所示。
图19STC程序下载界面
4.4液晶显示程序设计
LCD1602己很普遍了,市面上字符液晶绝大多数基于HD44780液晶芯片的,控制原理就是完全相同的,HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶,字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条是背光电源线VCC和地线GND,其控制原理与14条引脚线的LCD完全一样的。
HD44780的指令共11条指令:
1、清屏指令——清楚液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H。
2、光标归位——即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0;保持DDRAM的内容不变。
3、进入模式设置指令——功能:
设定每次定入1位数据后光标的移动方向,并且设定每次写入的一个字符是否移动。
4、显示开关控制指令
5、设定显示屏或光标移动方向指令——功能:
是光标移动或使整个显示屏幕移位。
6、功能设定指令——功能:
设定数据总线位数、显示的行数及字符。
7、设定CGRAM地址指令——功能:
设定下一个要存入数据的CGRAM的地址。
8、设定DDRAM地址指令——功能设定下一个要存入数据的DDRAM的地址。
9、读取忙信号或AC地址指令——功能:
读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接受单片机送来的数据或指令;读取地址计数器(AC)的内容。
10、数据写入DDRAM或CGRAM指令——功能将字符写入DDRAM,以使液晶显示屏显示出相对应的字符;将使用者自己设计的图形存入CGRAM。
11、从CGRAM或DDRAM读出数据的指令——功能:
读取DDRAM或CGRAM中的内容。
LCD1602液晶显示模块的流程图如图20所示。
图20LCD1602液晶显示模块的流程图
4.5NRF24L01模块程序设计
该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:
1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm
2.2Mbps,传输速率高
3.功耗低,等待模式时电流消耗仅22uA
4.多频点(125个),满足多点通信及跳频通信需求
5.在空旷场地,有效通信距离:
25m(外置天线)、10m(PCB天线)
6.工作原理简介:
发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 无线 投票 表决器 设计