当前位置:首页 >> 信息与通信 >>

基于STC89C52单片机的超市存包柜控制模块设计论文






本课题由 STC89C52 单片机构成核心控制系统,整个系统由主控部分、键盘显示 控制部分、执行部分三部分组成,通过密码的核对完成自动存包取包过程。 第一部分: CPU 核心控制部分, 由单片机 STC89C52、 复位电路、 时钟电路等构成, 是整个系统的核心。 第二部分:键盘显示控制部分。用 1 个 LCD1602 和 12

个按键进行管理,LCD1602 用于显示柜的号码和 4 位密码,12 个按键分别为 10 个数字键和 2 个功能键。通过这 些键盘,用户就可以完成所有的操作。 第三部分:执行机构部分。它是通过 89C52 的并行口控制 8 个发光二极管的状态 (亮灭)来模拟柜子的存包取包的过程。 软件部分主要采用我们自己设定的一种与柜的号码相关联的算法来产生一组 4 位的随机密码,而密码的产生、核对过程就对应存包、取包的过程。 本系统具有如下特色: (1)经济实用、操作简单且便于安装。 (2)能产生一组 4 位随机密码,密码使用一次有效;有三次容错功能和解锁功 能,因而系统安全可靠。 (3)利用软件产生随机密码而不是硬件,使得硬件更为简洁、可靠、稳定。 关键词: 关键词: STC89C52 单片机;自动存包柜;随机密码;解锁

I

ABSTRACT
This subject is become key control systems by STC89C52 forms and an organization. The whole system is shown and is controlled partly, carried out some three parts to make up by top management part, keyboard, through checking that finishes storing and wrapping up and fetch the course of the bag automatically of the password. The first part: CPU core control and partly, Form of 89C52 one-chip computers, whole core of system. Through these keyboards, users can finish all operation. The second part: The keyboard show that controls some. In charge of with LCD1602 to 4 numbers and 12 button go on and manage, 4 number in charge of and use for and show two cupboard symbol and 4password, 12 buttons are 10 numerical keys respectively and 2 function keys. Through these keyboards, users can finish all operation. The third part: Executive body's part. In it through the not running side by side because there aren't mouth, and control the states of light of 8 pieces( on to kill) of 89C52 and simulate Storing and wrapping up the course which fetches the bag. Software part adopt we one that oneself establish correlate with number of the cupboard algorithm that unite come and produce one password at random of 4 of group mainly, And production, check course correspond to and deposit the bag, fetch the course of the bag of password. This system has the following characteristic : 1、Economical and practical, operate Can produce one group 4 password at random, password use simple and easy to instally .2、 one effective; There is fault-tolerant function three times and locking the function, therefore the system is safe and reliable. 3、Utilize software produce password instead of hardware, make hardware more succinct, reliable, stability at random. Key Words:STC89C52; Store a bag of cupboards; the password; unblock at random : automatically

II



录_Toc262555234

1 引言 ··································································································································· 1 2 系统概述 ··························································································································· 2 2.1 系统总体设计目标功能及要求 ·········································································· 2 . 2.2 系统总体设计方案 ······························································································ 2 . 2.2.1 系统原理简介 ························································································· 2 . . 2.2.2 系统设计方案 ························································································· 2 . . 3 系统硬件电路设计 ··········································································································· 4 3.1 系统硬件电路 ······································································································ 4 . 3.2 STC89C52 单片机简介························································································ 4 . 3.2.1 单片机概述 ····························································································· 4 . . 3.2.2 STC89C52 主要性能 ·············································································· 8 . . 3.2.3 STC89C52 芯片引脚功能 ······································································ 9 . . 3.3 单片机基本工作电路 ························································································ 11 . 3.3.1 单片机的最小系统电路 ······································································· 11 . . 3.3.2 显示电路 ······························································································· 13 . . 3.3.3 键盘电路 ······························································································· 14 . . 3.3.4 稳压电源 ······························································································· 15 . . 4 系统的软件设计 ············································································································· 16 4.1 C 语言程序设计 ································································································· 16 . 4.1.1 C 语言简介 ···························································································· 16 . . 4.1.2 C 语言的特点 ························································································ 16 . . 4.1.3 C 源程序的结构特点 ············································································ 17 . . 4.2 软件设计 ············································································································ 17 . 4.2.1 程序设计步骤 ······················································································· 18 . . 4.2.2 程序各模块设计 ··················································································· 18 . . 4.2.3 程序流程图 ··························································································· 18 . . 4.2.4 各模块的软件程序设计 ······································································· 20 . . 4.2.5 密码验证方案比较 ··············································································· 20 . . 5 系统调试 ························································································································· 21 5.1 硬件调试 ············································································································ 21 . 5.2 软件调试 ············································································································ 21 .

III

5.3 调试中遇到的问题及解决方法 ········································································· 21 5.3.1 硬件 ········································································································ 21 . . 5.3.2 软件 ······································································································· 21 . . 结 致 论 ····························································································································· 23 谢 ····························································································· 错误!未定义书签。 错误!未定义书签。 参考文献 ····························································································································· 24 附录一 电路综合原理图 ··································································································· 26 附录二 程序流程图 ··········································································································· 27 附录三 系统程序 ··············································································································· 28

IV

天津工程师范学院 2010 届本科生毕业设计

1 引言
随着计算机技术和微电子技术不断发展,电子存包系统由于其安全性高、可靠性 高、方便快捷等特点,目前一些大商场的入口处, 常有电脑控制的自动存包柜。进入 商场购物常需寄存掉一些随身携带的较重物件或多余的现金。 电脑控制的存包柜无需 专职的管理人员且安全可靠, 颇受顾客的信任。 事实上这类存包柜用处很广, 如游泳 池的更衣室、部队军训时的存包处, 展览会、车站、电影院等等, 凡公共场所需要临 时存放物品, 又要求安全保密, 则很需要有一个这样的装置。 我们自行设计制作了一 个存包柜的电脑控制器, 选用最常见的元器件, 成本很低, 工作安全可靠。 电子存包柜是集手动,自动控制于一体的,具有多重安全防护功能,在智能化、 安全化、实用性等方面具有传统存包柜所不可比拟的优点。电子存包柜是新一代的存 包柜,具有操作简单、管理方便、安全可靠等特点。 电子存包柜的功能可以在购物前存放物品, 但是由于价格等因素的影响未能得到 广泛的应用。以前存包柜都只是在大型的超市得到了应用,大部分的超市还是使用人 工进行管理存包或不进行存包。期间有些公司曾推出红外线扫描条形码进行存包,但 是价格的因素未得到广泛应用。 可靠性集中反映了产品或设备的质量指标,一个可靠的系统应该能够长期稳定、 正常运行。电子存包系统的设计应该有高的可靠性,包括系统结构、硬件电路和运行 软件的可靠性。高的可靠性是实现系统功能的重要保证,高的可靠性已成为我们设计 电子存包柜时必须解决的关键性问题。安全性是指系统能够保证人和财物的安全,电 子存包柜要有紧急情况保护等措施。 安全性是设计电子存包柜时必须考虑的另一个重 要因素。友好的人机界面对于系统来说也是相当重要的。没用可视化的人机接口操作 起来不太方便,用户不能直观的了解到存包柜的各种信息。没有友好的可视化的人机 接口的电子存包柜已不能满足用户的要求, 通过图形进行各种操作并清楚地显示电子 存包柜的各种信息。

1

天津工程师范学院 2010 届本科生毕业设计

2 系统概述
2.1 系统总体设计目标功能及要求 .
(1)完成矩阵键盘输入密码进行取包的任务。 (2)存包时系统能随机数的产生。 (3)随机数在 89C52 中的保存及删除。 (4)液晶模块的选择及与单片机的接口电路设计。 (5)LCD1602 的使用
(6)发光二极管模拟柜子的实现。

2.2 系统总体设计方案 .
系统原理 原理简介 2.2.1 系统原理简介 电子存包柜由电子电路和机械两部分组成。 本设计的存包柜主要实现电子电路方 面的功能,它可以通过单片机完成密码的随机产生、密码的确认和显示以及用发光二 极管模拟柜子的开闭状态等功能。从硬件上看,它由部分组成,分别是:LCD1602 液 晶显示屏,显示亮度均匀,用于显示相应的信息;STC89C52 单片机是整个电路的核 心部分,其中振荡电路为 CPU 产生赖以工作的时序,复位电路使 CPU 与系统中的其他 部件处于一个确定的初始状态;还有键盘部分,键盘有 12 个按键,其中的十个分别 为 0——9 的数字键, 其他两个分别为存包键 (随机产生密码) 和取包键 (确认密码) ; 以及电源部分,它是由变压器把 220V 的电压变为 9V,再通过 7805 稳压之后为电路 提供一个 5V 的工作电压。STC89C52 是一种低功耗、高性能 CMOS 8 位单片机,片内 含 8KB ISP(In-system programmable)的可反复擦写的 Flash 只读程序存储器、该 器件采用 Atmel 公司的高密度、非易失性存储技术制造、兼容标准 MCS-51 指令系统 及 89C51 引脚结构。片内集成了通用的 8 位 CPU 和 ISP Flash 为存储单元,可为众 多嵌入式控制应用系统提供高灵活、高性价比的解决方案。存包柜的核心部件采用单 片机进行控制, 程序烧写进单片机后, 与简单的外围电路配合即可达到使用者的要求, 功能若要增加,改写程序即可,无须更改硬件。 整套系统成本低廉,有广阔的市场前景。 2.2.2 系统设计方案 (1)控制系统 在电子存包柜电路的设计中,控制方法是核心技术。 方案一:采用数字电路控制。采用数字密码锁电路的好处就是设计简单。用以 74LS112 双 JK 触发器构成的数字逻辑电路作为密码锁的核心控制,共设了 12 个用户
2

天津工程师范学院 2010 届本科生毕业设计

输入键,其中只有 10 个是有效的密码按键,一个确定键和一个清除键;如果用户输 入密码的次数超过指定次数(若用户觉得不便,还可以修改)电路将在 10 秒后发出 报警声,电路将锁定键盘,防止他人继续非法操作。 方案二:采用一种是用以 STC89C52 为核心的单片机控制方案。利用单片机灵活 的编程设计和丰富的 IO 端口,及其控制的准确性,不但能实现基本的密码锁功能, 还能添加调电存储、声光提示甚至添加遥控控制功能。 存包柜电路包含:键盘输入、密码检测、开锁电路、执行电路、显示电路。 (2)驱动显示电路 本设计采用 LM1602 16*2 字符液晶点阵式 LCD,数据线挂接总数据线,数据或命 令端 RS 接 P2.2,读写端 R/W 接 P2.3,使能端 E 接 P2.4,命令写入地址为 E3FFH,数 据写入地址为 E7FFH,读状态地址为 EBFFH,不需要生成新的字符,只要使用其内部 字符库的字符即可,使用时送入需要显示数据的 ASCII 码值即可。

3

天津工程师范学院 2010 届本科生毕业设计

3 系统硬件电路设计
3.1 系统硬件电路 .
硬件电路以 STC89C52 为核心,3*4 矩阵键盘作为输入,显示屏为 LCD1602,发光 二极管模拟存包箱柜,其中 74LS164 为串入并出芯片可节省 I/O 口。 硬件电路的系统方框图,如图 3-1 所示:

3*4 矩 阵键盘

LCD1602

STC89C52

电源

74LS164

发光二极管

图3-1 系统方框图

3.2 STC89C52 单片机简介 .
3.2.1 单片机概述 单片机作为微型计算机的一个分支,产生于 20 世纪 70 年代,经过二三十年的 发展,在各行各业中已经广泛应用。单片机体积小,重量轻,抗干扰能力强,对环境 要求不高,价格低廉,可靠性高,灵活性好。广泛应用于工业控制、智能仪表、机电 一体化产品、家用电器、办公自动化领域、商业营销领域、汽车及通信、计算机外部 设备、模糊控制等领域。 一、应用中的单片机品种繁多主要的单片机如下: 应用中的单片机品种繁多主要的单片机如下: ATMEL 公司的 AVR 单片机,是增强型 RISC 内载 Flash 的单片机,芯片上的 Flash 存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方 便.AVR 单片机采用增强的 RISC 结构,使其具有高速处理能力,在一个时钟周期内可执 行复杂的指令,每 MHz 可实现 1MIPS 的处理能力.AVR 单片机工作电压为 2.7~6.0V,可 以实现耗电最优化.AVR 的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪 表,通讯设备,家用电器,宇航设备等各个领域.

4

天津工程师范学院 2010 届本科生毕业设计

Motorola 单片机: Motorola 是世界上最大的单片机厂商.从 M6800 开始,开发了 广泛的品种,4 位,8 位,16 位 32 位的单片机都能生产,其中典型的代表有:8 位机 M6805,M68HC05 系列,8 位增强型 M68HC11,M68HC12 , 16 位机 M68HC16, 32 位机 M683XX. Motorola 单片机的特点之一是在同样的速度下所用的时钟频率较 Intel 类 单片机低得多,因而使得高频噪声低,抗干扰能力强,更适合于工控领域及恶劣的环 境 . MicroChip 单片机: MicroChip 单片机的主要产品是 PIC 16C 系列和 17C 系列 8 位单片机,CPU 采用 RISC 结构,分别仅有 33,35,58 条指令,采用 Harvard 双总线结构, 运行速度快,低工作电压,低功耗,较大的输入输出直接驱动能力,价格低,一次性编程, 小体积. 适用于用量大,档次低,价格敏感的产品.在办公自动化设备,消费电子产品, 电讯通信,智能仪器仪表,汽车电子,金融电子,工业控制不同领域都有广泛的应 用,PIC 系列单片机在世界单片机市场份额排名中逐年提高.发展非常迅速. 8051 单片机: 8051 单片机最早由 Intel 公司推出,其后,多家公司购买了 8051 的内核,使得以 8051 为内核的 MCU 系列单片机在世界上产量最大,应用也最广泛,有人 推测 8051 可能最终形成事实上的标准 MCU 芯片. NS 单片机: COP8 单片机是 NS(美国国家半导体公司)的产品,内部集成了 16 位 A/D,这是不多见的,在看门狗多路及 STOP 方式下单片机的唤醒方式上都有独到之处. 此外,COP8 的程序加密也做得比较好. 二、单片机基本组成: 单片机基本组成: 基本组成 它由 CPU 、存储器(包括 RAM 和 ROM ) I/O 接口、定时 / 计数器、中断控 、 制功能等均集成在一块芯片上,片内各功能通过内部总线相互连接起来。 输入 / 输出引脚 P0 、 P1 、 P2 、 P3 的功能 :P0.0~P0 。 7 : P0 口是 一个 8 位漏极开路型双向 I/O 端口。在访问片外存储器时,它分时作低 8 位地址 和 8 位双向数据总线用。 EPROM 编程时, P0 输入指令字节, 在 由 而在验证程序时, 则输出指令字节。验证程序时,要求外接上拉电阻。 P0 能以吸收电流的方式驱动 8 个 LSTTL 负载。 P1. 0 ~P1. 7 ( 1~8 脚) P1 是一上带内部上拉电阻的 8 位双向 I/O 口。 : 在 EPROM 编程和验证程序时, 由它输入低 8 位地址。 P1 能驱动 4 个 LSTTL 负载。 在 8032/8052 中, P1. 0 还相当于专用功能端 T2 ,即定时器的计数触发输入 端; P1. 1 还相当于专用功能端 T2EX ,即定时器 T2 的外部控制端。P2.0~P2.7 ( 21~28 脚) P2 也是一上带内部上拉电阻的 8 位双向 I/O 口。在访问外部存储 : 器时,由它输出高 8 位地址。在对 EPROM 编程和程序验证时,由它输入高 8 位地 址。 P2 可以驱动 4 个 LSTTL 负载。P3. 0 ~P3. 7 ( 10~17 脚) P3 也是一上 : 带内部上拉电阻的双向 I/O 口。 MCS-51 中, 8 个引脚还用于专门的第二功能。 在 这
5

天津工程师范学院 2010 届本科生毕业设计

P3 能驱动 4 个 LSTTL 负载。 P3. 0 RXD (串行口输入) P3. 1 TXD (串行口输出) P3. 2 INT0 (外部中断 0 输入) P3. 3 INT1 (外部中断 1 输入) P3. 4 T0 (定时器 0 的外部输入 P3. 5 T1 (定时器 1 的外部输入) P3. 6 WR (片外数据存储器写选通) P3. 7 RD (片外数据存储器读选通) 的寻址方式: 三、MCS-51 的寻址方式: MCS1 、立即寻址 如: MOV A , #40H 2 、直接寻址 如: MOV A , 3AH 3 、寄存器寻址 如: MOV A , Rn 4 、寄存器间接寻址 如: MOV A , @Rn 5 、基址加变址寻址 如: MOVC A , @A+DPTR 6 、相对寻址 如: SJMP 08H 7 、位寻址 MOV 20H , C 四、指令: 指令: MOV : 片内 RAM 传送 MOVX : 片外 RAM 传送 MOVC : ROM 传送 XCH : 交换(和 A 交换) SWAP : A 内半字节交换 ADD :不带进位加 ADDC :带进位加 SUBB :带进位减 INC :加 1 DEC :减 1 MUL :乘法 DIV :除法 DAA :调整 五、计数初值的计算 定时或计数方式下计数初值如何确定,定时器选择不同的工作方式,不同的操作 模式其计数值均不相同。若设最大计数值为 M ,各操作模式下的 M 值为:
6

天津工程师范学院 2010 届本科生毕业设计

模式 0 : M=2 13 =8192 模式 1 : M=2 16 =65536 模式 2 : M=2 8 =256 模式 3 : M=256 , 定时器 T0 分成 2 个独立的 8 位计数器, 所以 TH0 、 TL0 的 M 均为 256 。 因为 MCS-51 的两个定时器均为加 1 计数器,当初到最大值( 00H 或 0000H ) 时产生溢出, TF 位置 1 , 将 可发出溢出中断, 因此计数器初值 X 的计算式为: X=M计数值式中的 M 由操作模式确定,不同的操作模式计数器的长不相同,故 M 值也不 相同。而式中的计数值与定时器的工作方式有关。 1 、计数工作方式时 计数工作方式时,计数脉冲由外部引入,是对外部冲进行计数,因此计数值根据 要求确定。其计数初值: X=M- 计数值 例如:某工序要求对外部脉冲信号计 100 次, X=M-100 2 、定时工作方式时 定时工作方式时,因为计数脉冲由内部供给,是对机器周期进行计数,故计数脉 冲频率为 f cont =f osc × 1/12 、计数周期 T=1/f cont =12/f osc 定时工作方 式的计数初值 X 等于: X=M- 计数值 =M-t/T=M- ( f osc × t ) /12 式中: f osc 为振荡器的振荡频率, t 为要求定时的时间。 定时器有两种工作方式 :即定时和计数工作方式。由 TMOD 的 D6 位和 D2 位 选择,其中 D6 位选择 T1 的工作方式, D2 位选择 T0 的工作方式。 =0 工作在定 时方式, =1 工作在计数方式。并有四种操作模式: 模式 0 : 13 位计数器, TLi 只用低 5 位。 模式 1 : 16 位计数器。 模式 2 : 8 位自动重装计数器, THi 的值在计数中不变, TLi 溢出时, THi 中的值自动装入 TLi 中。 模式 3 : T0 分成 2 个独立的 8 位计数器, T1 停止计数。 MCS-51 有 5 个中断源,可分为 2 个中断优先级,即高优先级和低优先级,中 断自然优先级: 外部中断 0 ;定时器 0 中断; 外部中断 1 ;定时器 1 中断 ; 串行口中断 ;定时器 2 中断 ( 1 )同级或高优先级的中断正在进行中; ( 2 )现在的机器周期还不是执行指令的最后一上机器周期,即正在执行的指 令还没完成前不响应任何中断;
7

天津工程师范学院 2010 届本科生毕业设计

( 3 )正在执行的是中断返回指令 RET1 或是访问专用寄存器 IE 或 IP 的指 令,换而言之,在 RETI 或者读写 IE 或 IP 之后,不会马上响应中断请求,至少要 在执行其它一要指令之扣才会响应。 中断响应条件 CPU 响应中断的条件有: ( 1 )有中断源发出中断请求; ( 2 )中断总允许位 EA=1 ,即 CPU 开中断; ( 3 )申请中断的中断源的中断允许位为 1 ,即没有被屏蔽。 六、串行口工作方式及帧格式 MCS-51 单片机串行口可以通过软件设置四种工作方式: 方式 0 :这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫 同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信 号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一 帧,没有起始位和停止位,先发送或接收最低位。 方式 2 : 采用这种方式可接收或发送 11 位数据, 11 位为一帧, 以 比方式 1 增 加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件 搂控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串 行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 或 1/32 ,可由 PCON 的最高位选择。 方式 3 :方式 3 与方式 2 完全类似,唯一的区别是方式 3 的小组特率是可变的。 而帧格式与方式 2- 样为 11 位一帧。所以方式 3 也适合于多机通信。

3.2.2 STC89C52 主要性能 与 MCS-51 单片机产品兼容 、8K 字节在系统可编程 Flash 存储器、 1000 次擦 写周期、全静态操作:0Hz~33Hz 、三级加密程序存储器 、 32 个可编程 I/O 口线、 三个 16 位定时器/计数器八个中断源、全双工 UART 串行通道、 低功耗空闲和掉电模 式 、掉电后中断可唤醒、看门狗定时器 、双数据指针、掉电标识符 。 STC89C52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器。使用高密度非易失性存储器技术制造,与工业 80C51 产品指令和引 脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯 片上,拥有灵巧的 8 位 CPU 和在线系统可编程 Flash,使得 STC89C52 为众多嵌入式 控制应用系统提供高灵活、超有效的解决方案。 STC89C52 具有以下标准功能: 8k 字节 Flash,256 字节 RAM, 32 位 I/O 口线,看门狗定时器,2 个数据指针,三个
8

天津工程师范学院 2010 届本科生毕业设计

16 位 定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟 电路。另外,STC89C52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。 空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉 电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个 中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash。 P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种 模式下, P0 具有内部上拉电阻。 在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。 程序校验时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱 动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以 作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出 电流(IIL)。 此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器 /计数器 2 的触发输入(P1.1/T2EX),具体如下表所示。 在 flash 编程和校验时, P1 口接收低 8 位地址字节。 3.2.3 STC89C52 芯片引脚功能

图3-2 STC89C52芯片图
9

天津工程师范学院 2010 届本科生毕业设计

P1.0 T2(定时器/计数器 T2 的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制) P1.5 MOSI(在线系统编程用) P1.6 MISO(在线系统编程用) P1.7 SCK(在线系统编程用) P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱 动 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以 作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出 电流(IIL)。 在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用 8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的 内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱 动 4 个 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以 作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出 电流(IIL)。 P3 口亦作为 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 编程和校验时,P3 口也接收一些控制信号。 端口引脚 第二功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断 0) P3.3 INT1(外中断 1) P3.4 TO(定时/计数器 0) P3.5 T1(定时/计数器 1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号。 RST——复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将 是单片机复位。 ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输 出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出 固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外 部数据存储器时将跳过一个 ALE 脉冲。
10

天津工程师范学院 2010 届本科生毕业设计

对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁 止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,该引 脚会被微弱拉高,单片机执行外部程序时,应设置 ALE 禁止位无效。 PSEN—— 程 序 储 存允许 ( PSEN ) 输出 是 外部 程 序 存储 器 的 读选通 信 号 , 当 STC89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即 输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。 EA/VPP—— 外 部 访 问 允 许 , 欲 使 CPU 仅 访 问 外 部 程 序 存 储 器 ( 地 址 为 0000H-FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位 LB1 被编 程,复位时内部会锁存 EA 端状态。 如 EA 端为高电平(接 Vcc 端),CPU 则执行内部程序存储器的指令。 FLASH 存储器编程时,该引脚加上+12V 的编程允许电源 Vpp,当然这必须是该器 件是使用 12V 编程电压 Vpp。

3.3 单片机基本工作电路 .
3.3.1 单片机的最小系统电路 单片机最小系统是利用最少的外围器件而使单片机工作的电路组织形式。 最小系 统只包含单片机、振荡器、复位电路和电源。如图 3-2 为最小系统电路图。 时钟信号:单片机的 XTAL2 和 XTAL1 接晶振,这种结构通过晶振电容 C1、C2 与 单片机内部结构组成一个时钟信号源,晶振的频率决定系统的时钟频率。对于时间要 求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中 的电容 C1、C2 起着系统时钟频率微调和稳定的作用。因此,在实际应用中一定要注 意正确选择参数(30±10PF),并保证对称性(尽可能匹配)。 复位电路:最简单的复位电路就是在 RST 与 VCC 之间连接一个 10UF 电解电容, 当通电时,RST 维持一段很短的高电平状态,使单片机复位,很快电容充电满后,RST 电平被拉低。单片机进入正常工作中。 一般应复位电路有手动或上电复位电路[4]。复位电路的实现通常有两种方式:1) RC 复位电路;2)专用 ?P 监控电路。前者实现简单,成本低,但复位可靠性相对较 低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高并对 电源电压进行监视的场合,大多采用这种方式。

11

天津工程师范学院 2010 届本科生毕业设计

P10 P11 P12 P13 P14 P15 P16 P17 P32 VCC RESET C3 10u * P33 P30 P31

1 2 3 4 5 6 7 8 12 13 10 11 31 9

P10 P11 P12 P13 P14 P15 P16 P17 INT0 INT1 RXD TXD EA/VP RESET X1 X2

mcu 89s52

P00 P01 P02 P03 P04 P05 P06 P07 P27 P26 P25 P24 P23 P22 P21 P20 T0 T1 WR RD ALE/P PSEN

39 38 37 36 35 34 33 32 28 27 26 25 24 23 22 21 14 15 16 17 30 29 P27 P26 P25 P24 P23 P22 P21 P20 P34 P35 P36 P37

C1 19 R2 10k 30P 12M C2 30P 18

图 3-3 最小系统电路图

(1)专用 ?P 监控电路 专用 ?P 监控电路又称电源监视电路,具有上电时可靠产生复位信号和电源电压 跌落到“门槛值”时可靠产生复位信号功能。按有效电平分,有高电平输出、低电平 输出两种; 按功能分, 有简单的电源监视复位电路、 带“看门狗”定时器 (WATCH DOG, 又简称“WDT”)的监控电路、和 WDT+EEPROM 的监控电路等多种类型。比较常见的 生产厂家有 MAXIM、PHILIPS、IMP 以及 DALLS 等,51 系列微处理器中常用的型号有 MAX813L、MAX809、X25043/5 等。 (2)RC 复位电路 本系统采用的是这种复位方式。RC 复位电路的实质是一阶充放电电路。系统上 电时该电路提供有效的复位信号 RST (高电平) 直至系统电源稳定后撤销复位信号 (低

12

天津工程师范学院 2010 届本科生毕业设计

电平)。理论上说,51 系列单片机复位引脚只要外加 2 个机器周期的有效信号即可 复位,即只要保证 t=RC>2M(机器周期)便可,但实际设计中,通常取 C3 为 10?F 以上,R2 通常取 10K 左右。实践发现 R2 如果取值太小,例如 1K,则会导致 RST 信号 驱动能力变差而无法使系统可靠复位。 外部程序存储器访问控制端 EA / VPP : 由于没有使用外部程序存储器拓展,所以在这里 EA / VPP 接高电平。 3.3.2 显示电路 LCD1602可以在LCD显示屏上完整显示32个英文字符和日文等一些字符,适合显示 英文文字信息量较小的地方.可以应用在计算器,频率计,信号发生器,时钟等产品上. LCD1602已经很普遍了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控 制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用与市面上大部分 的字符型液晶。字符型LCD通常有14条引脚或16 条引脚的LCD,多出来的2条线是背光 电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。

图 3-4 LCD1602 与单片机的接口图

1602LCD 的基本参数及引脚功能 1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比 不带背光的厚,是否带背光在应用中并无差别。 1602LCD 主要技术参数: 显示容量:16×2 个字符
13

天津工程师范学院 2010 届本科生毕业设计

芯片工作电压:4.5—5.5V 工作电流:2.0 mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H) mm 引脚功能说明: 第 1 脚:VSS 为地电源。 第 2 脚:VDD 接 5V 正电源。 第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最 高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调 整对比度。 第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为 高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。 第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 7~14 脚:D0~D7 为 8 位双向数据线。 第 15 脚:背光源正极。 第 16 脚:背光源负极。 本设计通过用 1602 显示两行信息,其中第一行显示超市或图书馆的英文信息, 第二行则主要显示密码等相关提示信息。 3.3.3 键盘电路 键盘按结构的不同可分为独立式按键键盘和行列式键盘两类, 每类按译码方式的 不同又分为编码式和非编码式两种。 单片机中一般使用的都是用软件来识别和产生键 代码的非编码键盘。行列式键盘的编码方式有静态和动态两种。静态接口主要由一个 行编码器和一个列编码器构成;动态接口可用计数器、译码器和数据选择器来构成。 一般在小型仪器仪表和控制系统中,使用较多的是行列式和独立式的非编码键 盘;如果系统要求实现多键同时按下的处理,则用非编码独立方式较为合适。 本系统主要是采用了常用的 3×4 矩阵式键盘, 工作方式采用的是外部中断扫描, 如图 3-5 所示。中断式键盘扫描原理是:当有键按下将会触发一个中断源,提醒处理 器进行键值扫描查询。键盘的中断方式一般有定时中断和外部中断两种,本系统采用 的是外部中断 INT0。单片机先让行线输出低电平,当有键按下时列线电平不全为高, 四输入与门输出端产生下降沿,将触发外部中断 INT0,单片机进入中断后先延时去 抖动,再扫描查寻键盘,读出键值,然后处理相应的键值处理子程序,无键按下则不
14

天津工程师范学院 2010 届本科生毕业设计

进入中断,单片机不扫描,从而节约了大量的资源。

图 3-5 键盘与单片机的连接

3.3.4 稳压电源 如图 3-6 为稳压电源设计电路

VCC 5-12V 2 1 DC 1 L7805 GND Vin Vout 3 104

图 3-6 稳压电源设计电路

LM7805 是一个稳压三极管,它可以支持 5V 到 12V 的电源输入,经过降压后,稳 定输出 5V 的直流电压。一般在输入电源的正负级之间并上一个无极性陶瓷电容和一 个 220U 的电解电容,起到对电源滤波的作用。由于本设计使用干电池供电,电源干 扰少些, 所以没有加上 220U 的电解电容。 单片机要求在稳定的电源下才能正常工作, 本身单片机工作在晶震 12M 下,产生的干扰信号也是大的。所以需要提供一个稳定的 直流电源给单片机,这样能保证单片机稳定的工作。

15

2

天津工程师范学院 2010 届本科生毕业设计

4 系统的软件设计
4.1 C 语言程序设计 .
4.1.1 C 语言简介 C 语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验 室正式发表了 C 语言。同时由 B.W.Kernighan 和 D.M.Ritchit 合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但 是,在《K&R》中并没有定义一个完整的标准 C 语言,后来由美国国家标准学会在此 基础上制定了一个 C 语言标准,于一九八三年发表。通常称之为 ANSI C。 早期的 C 语言主要是用于 UNIX 系统。由于 C 语言的强大功能和各方面的优点逐 渐为人们认识,到了八十年代,C 开始进入其它操作系统,并很快在各类大、中、小 和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。 C 语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试 和维护。C 语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型, 便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一 级的操作。由于 C 语言实现了对硬件的编程操作,因此 C 语言集高级语言和低级语言 的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C 语言 还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,形成了 多种版本的 C 语言。 C 语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用 C 语言明 显优于其它高级语言,许多大型应用软件都是用 C 语言编写的。 C 语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写 系统软件,三维,二维图形和动画它是数值计算的高级语言。 4.1.2 C 语言的特点 (1)简洁紧凑、灵活方便:C 语言一共只有 32 个关键字,9 种控制语句,程序书 写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性 结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算 机最基本的工作单元。 (2)运算符丰富:C 的运算符包含的范围很广泛,共有种 34 个运算符。C 语言把 括号、赋值、强制类型转换等都作为运算符处理。从而使 C 的运算类型极其丰富表达 式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 (3)数据结构丰富:C 的数据类型有:整型、实型、字符型、数组类型、指针类型、
16

天津工程师范学院 2010 届本科生毕业设计

结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针 概念,使程序效率更高。 另外 C 语言具有强大的图形功能, 支持多种显示器和驱动器。 且计算功能、逻辑判断功能强大。 (4) C 是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的 各个部分除了必要的信息交流外彼此独立。 这种结构化方式可使程序层次清晰, 便于 使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并 具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 (5) C 语法限制不太严格、程序设计自由度大:一般的高级语言语法检查比较 严,能够检查出几乎所有的语法错误。而 C 语言允许程序编写者有较大的自由度。 (6) C 语言允许直接访问物理地址,可以直接对硬件进行操作:因此既具有高 级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址 进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。 (7) C 语言程序生成代码质量高,程序执行效率高:一般只比汇编程序生成的 目标代码效率低 10 へ 20%。 (8) C 语言适用范围大,可移植性好:C 语言有一个突出的优点就是适合于多种 操作系统, 如 DOS、UNIX,也适用于多种机型。 4.1.3 C 源程序的结构特点 (1)一个 C 语言源程序可以由一个或多个源文件组成。 (2)每个源文件可由一个或多个函数组成。 (3)一个源程序不论由多少个文件组成,都有一个且只能有一个 main 函数,即 主函数。 (4)源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令 通常应放在源文件或源程序的最前面。 (5)每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花 括号“}”之后不能加分号。 (6)标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符, 也可不再加空格来间隔。

4.2 软件设计 . 软件设计
软件设计思想: 软件设计思想: 系统运行时,主程序调度 LCD1602 先进行程序初始化,若有人按下“存包键”时 先由随机数模块产生一个随机数保存在单片机内部数组中,并将产生的密码显示在 LCD1602 显示屏上,一段时间后显示数据消失,密码显示的同时系统也将所要打开的

17

天津工程师范学院 2010 届本科生毕业设计

箱子号显示在 LCD1602 并发一个触发信号使对应的箱子号打开。 存包的过程也就此结 束。 当有取包时必然先要输入存包时所显示的密码, 输入密码时运行键盘扫描模块扫 描所输入的按键值并按下 “取包键”, 假如输入的密码是正确的, 系统将通过 LCD1602 显示所输入的密码是正确的并且系统将打开你存包时所打开的箱子。 4.2.1 程序设计步骤

程序设计就是用计算机所能接受的语言把所需解决问题的步骤逐一描述出来, 也 就是编制计算机的程序,在设计应用系统时,软件的编制是重要环节。软件的质量直 接影响整个系统功能的实现。应用程序的设计因系统而异,但程序设计总是有共同特 点及其规律的。在编写程序时,采取如下几个步骤: (1) 分析问题,明确所要解决问题的要求,将软件分成若干个相对独立的部分。 根据功能关系和时序关系,设计出合理的软件总体结构。 (2) 定程序框图,即根据所选择的计算方法制定框图,这不仅是程序设计的一个 重要组成,而且是决定成败的关键部分。 (3) 合理分配系统资源,包括定时器/计数器、中断、堆栈等。分配好单元后, 进一步将程序框图画成详细的操作流程。 (4) 根据程序的流程图和指令系统编写出程序。 注意在程序的有关位置处写上功 能注释,提高程序的可读性。 (5) 程序调试。通过编辑软件编辑出的源程序,必须用编译程序汇编后生成目标 代码。如果源程序有语法错误,需修改源文件后继续编译,直到无语法错误为止,然 后利用目标代码通过仿真器进行程序调试,排除设计和编程中的错误直到成功。 (6) 程序优化。使各功能程序模块化,子程序化,缩短程序的长度,加快运算速 度和节省数据存储空间,减少程序执行的时间。 4.2.2 程序各模块设计 本系统由四个程序模块和一个主程序组成,四个程序模块分别为随机数模块、箱 柜模块、LCD1602 模块、键盘扫描模块组成。 4.2.3 程序流程图

18

天津工程师范学院 2010 届本科生毕业设计

开始
无键按下

存包过程

LCD 初始化

键盘扫描
有键按下

主程序
返 回主程 序 并保存箱号 打开箱子 存包键按下? Y 产生随机密码 显示正 常信息 返回主程序并 保存密码

显示密码和箱号

取包过程
键盘扫描
有键按下

无键按下

主程序
N
四位密码输入

提示信 息过后

箱子打 开后

密码正确? Y 打开对应箱子

返回主程序并 删除密码和对 应的箱号

显示正 常信息

LCD1602 提示 打开信息

图 4-1 程序流程图

19

天津工程师范学院 2010 届本科生毕业设计

4.2.4 各模块的软件程序设计
(1)随机模块:下图为随机模块的程序框架。

开始

产 生一 个一 位种子 经计算 产 生一 个四 位数

返回

图 4-2 随机模块程序框图

(2)1602 工作框图:见附录二。 (3)矩阵键盘工作框图:见附录二。 (4)主程序框图:见附录二。 4.2.5 密码验证方案比较 当键盘输入密码时, 输入的数如何与内部产生的密码进行比较是一个需要解决的 问题。因为内部产生的是一个 4 位数密码。这也就有了两种方案来解决这个问题。 (1)先将内部生成的 4 位数密码转化成 4 个个位数的数字密码,并将其保存在数 组 中。将输入的密码保存在另一个数组中。最后再对这两个数组的元素进行比较, (2)将输入的四个数进行乘计算得到一个四位数密码。与系统产生的四位数密码 进行比较,如有错误返回主程序进行错误提示,若正确就执行后续的程序。 如有错误返回主程序进行错误提示,若是正确的就将执行后续的程序。

20

天津工程师范学院 2010 届本科生毕业设计

5 系统调试
本系统的调试主要分为硬件调试、 软件调试等两大部分。 经过初步的分析设计后, 在制作硬件电路的同时,调试也在穿插进行。这样有利于问题的分析和解决,不会造 成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从而可以节约大量 的调试时间。软件编程中,首先完成单元功能模块的调试,然后进行系统调试,整体 上与硬件调试的方法差不多。联机调试是最重要的一部分,同时也是本设计成功的关 键。

5.1 硬件调试 .
首先应对电路板表面进行检查,对焊接后的电路板的所有连接线仔细检查。通过 目测查出一些明显的安装及连接错误并及时排除。 其次用万用表测量,主要是测量目测是怀疑通断的情况,尤其是要测量电源与地 之间是否短路。 再次是加电检查。开启电源后,检查芯片的电源电压是否正确,也可用手触摸, 是否有明显发烫,所遇芯片均未发现异常,可进入下一步调试。

5.2 软件调试 .
软件调试较硬件调试麻烦, 先将事先编写好的各模块部分程序写入仿真软件里的 单片机中,然后通过 Proteus 仿真软件进行仿真。如有错误或实现不了预想的功能, 则需要对程序进行修改以达到设计的最终要求。

5.3 调试中遇到的问题及解决方法
5.3.1 硬件 (1)LCD1602 无法显示:把复位脚误接在地端而使 LCD1602 一直不停的在复位, 把接线改过来从而使显示屏正常工作。 (2)LCD1602 显示过暗: 调解 10K 的电位器使得显示逐渐变亮,因为通过调节 电位器可以调节电压使显示的点阵变亮。 (3)在电路的调试过程中,发现 LCD1602 能正常发光,而在有按键按下时,显 示屏上却没有显示相应的信息,发光二极管也不能正常工作,后通过仔细检查电路, 发现单片机的接地管脚忘记接线了,随即改正过来后,电路工作正常。 5.3.2 软件 (1)定义出错:
21

天津工程师范学院 2010 届本科生毕业设计

产生的现象是有密码产生但无法检测到输入密码。 经过仔细检查曾变量定义错误 (误将存储密码变量 unsigned int 定义成 unsigned char ):因为 unsigned int 无符号短 整型数说明。简写为 unsigned int, 字长为 2 字节共 16 位二进制数, 数的范围是 0 ~ 65535。 unsigned char 字符在计算机中以其 ASCII 码方式表示, 其长度为 1 个字节, 而 有符号字符型数取值范围为-128~127, 无符号字符型数到值范围是 0~255。因此在 Turbo C 语言中,字符型数据在操作时将按整型数处理, 如果某个变量定义成 char, 则 表明该变量是有符号的, 即它将转换成有符号的整型数。使输入的数字无法转换为一 个 4 位数。使得无法与内部产生的随机数进行密码验证,故无法打开箱子。 (2)LCD 无法显示: 初始化程序出错:按初始化顺序时延时时间没有达到 Datasheet 的要求。因为延 时时间还没达到内部初始化需求, 上一步的初始化过程还没有结束就进行了下一步初 始化过程,这样即跳过了上一步的初始化程序,这样必然导致系统初始化失败。

22

天津工程师范学院 2010 届本科生毕业设计





在本系统中,基本模拟了超市存包的功能。用 STC89C52 为核心 CPU 进行系统任 务调度,内部的随机数模块、LCD1602 液晶模块、箱子模拟模块和键盘输入模块通过 系统主程序来调度实现系统所需要的功能。通过本次设计了解了 51 系列单片机的具 体使用,比如寄存器、定时器、RAM、ROM。同时也了解了 74LS164 串口转并口输入芯 片的使用,加深了对 LCD1602 的使用,特别是在调试 LCD1602 的初始化程序时,具体 了解了初始化程序有哪些步骤且延时也对初始化有着相当重要的关系。 也加深了对发 光二极管、矩阵键盘等常规元件的使用。由于时间、资金等各个因素的影响本系统也 有着一些缺点,比如安全性有待加强。

23

天津工程师范学院 2010 届本科生毕业设计

参考文献
[1] 谢维成.单片机原理与应用及C51程序设计[M].北京:清华大学出版 社.2006:169-181 [2] 求 是 科 技 . 单 片 机 典 型 模 块 设 计 实 例 导 航 [M]. 北 京 : 人 民 邮 电 出 版 社.2004:117-135 [3] 马家辰.MCS-51单片机原理及接口技术[M].哈尔滨:哈尔滨工业大学出版 社,1998:112-154 [4] 马鸿文.基于AT89C51单片机的自动存取柜的设计与实现[B].单片机开发与应 用,2005.9 [5] 卢敏生、卢恽.一个廉价的存包柜电脑控制装置[B].苏州大学工学院、苏州职业 大学,1999 [6] 黄石红.双子系统在电子存取柜中的应用[B].微计算机信息,2003.9 [7] 常喜.微型打印机在单片机系统中的应用[B].吉林师范大学信息技术学院.2004 [8] 黄湖剑,梁楚樵.单片机与微型打印机的接口设计[A].武汉理工大学信息工程学 院.2006 [9] 梁金千,张跃.在计算机上产生真随机数的探讨[D].计算机工程.2003 [10] 李少芳.在 C/ C + + 语言中如何自动生成随机密码[D].福建电脑.2003 [11] 赵雪峰.一种伪随机数生成算法的研究与实现[A]. 电脑学习.2005 [12] 刘西玲.MCS-51 系列单片机与微型打印机的接口设计[D].天水师范学院学 报.2004 [13] 朱家驹,王月姣.微型打印机通用打印程序的设计[A].中南民族大学学报(自然 科学版).2002 [14] Proykova A. How to Improve a Random Number Generator.Computer Physics Communications, 2000, 124: 125-131 [15] Tsumoto, S.Extracing Structure of Medical Diagnosis[M] . Rough Set Approach , 2003 .

24

天津工程师范学院 2010 届本科生毕业设计

25

天津工程师范学院 2010 届本科生毕业设计

附录一 电路综合原理图

26

天津工程师范学院 2010 届本科生毕业设计

附录二 程序流程图
开始

开始

有键按下? Y

延时 40ms N 初始化结束 功能设置

P1.0—P1.3 赋 为 0 读列状态

延时 1ms Y
延时 10ms 消抖

进入模式 设置

显示开关控 制

延时 10ms

重新扫描 Y 高四位键值保 存在 temp1

延时 1ms

清显示

图二 LCD1602 工作框图 开始

延时 3 秒稳 定电平 合 并 键值 查 询 按 键数 据 并返回键值

扫描键值 Y
计数 count 加 1 Count>=4 且 按下确定

低四位的电平 保存在 temp2

If(count<4)

图一 矩阵键盘工作框图

N

进行密码验证 Y 开 箱 子 且 LCD1602 提示 图三 主程序框图

27

天津工程师范学院 2010 届本科生毕业设计

附录三 系统程序

/* 主程序 */ #define set_timer TH0 = 0xd8;TL0 = 0xef; #define set_bps TH1 = 0xF4; TL1 = 0x0b; #include<reg52.h> #include <ctype.h> #include <stdlib.h> #include <errno.h> #include <stdio.h> #include<lcd.h> #include<systimer.h> #include "systimer.h" #include "lcd.h" #define uint unsigned int #define uchar unsigned char extern void sendbyte(uchar byte); extern unsigned char keyscan(void); extern delay1(unsigned int n); extern void delay_50ms(unsigned int t); extern bit pwcmp(void); //extern void srand(unsigned int seed); extern void clrram(void); //extern void LCD_init(void); extern void InitLCD(void); extern void WriteDataToLCD(uchar lcddata); extern void WriteCmdToLCD(uchar lcdcmd); extern void DisplaySinglByte(uchar Line, uchar Row, uchar ShowData); uchar enterflag,i,flag,pwflag; uint keybuf[4]={0,0,0,0}; //输入密码的存放地址 uint keyword[4]={0,0,0,0}; uint key[8]={0,0,0,0,0,0,0,0}; //对应的箱子密码初始值 uchar boxflag=0; uchar count=0; uint password; uint _next = 1; uchar lcd_flag,seconds; uchar timer_work,timer_10ms; void main(void) {
28

天津工程师范学院 2010 届本科生毕业设计 TMOD = 0x21; SCON = 0x50; set_bps TH0 = 0x70; TL0 = 0x00; TR0 = 1; //P1=0xfd; //打开中断 IP=0x10; //中断优先级// PT0 = 0; PS = 1; TR1 = 1; ES = 1; ET0 = 1; EA = 1; InitLCD(); // P2 = 0x00; // array_write(0x2000,8,&key[0]); while(1) { //LCD_init(); //LCD_WriteStr(3,1,"热烈欢迎"); //LCD_WriteStr(1,2,"ABCDEFGHIJKLMNOP"); DisplaySinglByte(1,0,' '); DisplaySinglByte(1,3,'T'); DisplaySinglByte(1,4,'J'); DisplaySinglByte(1,5,'G'); DisplaySinglByte(1,6,'C'); DisplaySinglByte(1,7,'S'); DisplaySinglByte(1,8,'F'); DisplaySinglByte(1,9,'X'); DisplaySinglByte(1,10,'Y'); DisplaySinglByte(1,11,'T'); DisplaySinglByte(1,12,'S'); DisplaySinglByte(1,13,'G'); DisplaySinglByte(2,8,keybuf[0]+0x30); DisplaySinglByte(2,9,keybuf[1]+0x30); DisplaySinglByte(2,10,keybuf[2]+0x30); DisplaySinglByte(2,11,keybuf[3]+0x30);*/ DisplaySinglByte(2,14,'O'); DisplaySinglByte(2,15,'K'); if(timer_10ms>=100) { seconds++; timer_10ms=0;

/*

// //

29

天津工程师范学院 2010 届本科生毕业设计 } if(seconds>=3) { timer_work=0; seconds=0; lcd_flag =0; flag = 0; } if(flag == 0) { DisplaySinglByte(2,12,' '); DisplaySinglByte(2,13,' '); DisplaySinglByte(2,14,' '); DisplaySinglByte(2,15,' '); } if(flag == 1) { DisplaySinglByte(2,12,(i+1)%10+0x30); DisplaySinglByte(2,13,' '); DisplaySinglByte(2,14,'O'); DisplaySinglByte(2,15,'K'); } if(flag == 2) { DisplaySinglByte(2,12,' '); DisplaySinglByte(2,13,'E'); DisplaySinglByte(2,14,'R'); DisplaySinglByte(2,15,'R'); } if(lcd_flag ==1) { DisplaySinglByte(2,0,'P'); DisplaySinglByte(2,1,'W'); DisplaySinglByte(2,2,(i+1)%10+0x30); DisplaySinglByte(2,3,':'); DisplaySinglByte(2,4,key[i]/1000+0x30); DisplaySinglByte(2,5,key[i]%1000/100+0x30); DisplaySinglByte(2,6,key[i]%100/10+0x30); DisplaySinglByte(2,7,key[i]%10+0x30); } if(lcd_flag ==0) { DisplaySinglByte(2,0,' '); DisplaySinglByte(2,1,' ');

30

天津工程师范学院 2010 届本科生毕业设计 DisplaySinglByte(2,2,' '); DisplaySinglByte(2,3,' '); DisplaySinglByte(2,4,' '); DisplaySinglByte(2,5,' '); DisplaySinglByte(2,6,' '); DisplaySinglByte(2,7,' '); } if(boxflag==8) { DisplaySinglByte(2,8,'F'); DisplaySinglByte(2,9,'U'); DisplaySinglByte(2,10,'L'); DisplaySinglByte(2,11,'L'); } if(boxflag<8) { DisplaySinglByte(2,8,' '); DisplaySinglByte(2,9,' '); DisplaySinglByte(2,10,' '); DisplaySinglByte(2,11,' '); } switch(keyscan()) { case '0': // 1 行 1 列,数字 1 if(count < 4) { keybuf[count] = 1; count++; } break; case '1': // 1 行 2 列,数字 2 if(count < 4) { keybuf[count] = 2; count++; } break; case '2': //是否箱满验查

//扫描键值

// 1 行 3 列,数字 3

31

天津工程师范学院 2010 届本科生毕业设计 if(count < 4) { keybuf[count] = 3; count++; } break; case '4': // 2 行 1 列,数字 4 if(count < 4) { keybuf[count] = 4; count++; } break; case '5': // 2 行 2 列,数字 5 if(count < 4) { keybuf[count] = 5; count++; } break; case '6': // 2 行 3 列,数字 6 if(count < 4) { keybuf[count] = 6; count++; } break; case '8': // 3 行 1 列,数字 7 if(count < 4) { keybuf[count] = 7; count++; } break;

32

天津工程师范学院 2010 届本科生毕业设计 case '9': if(count < 4) { keybuf[count] = 8; count++; } break; case 'A': if(count < 4) { keybuf[count] = 9; count++; } break; // 3 行 3 列,数字 9 // 3 行 2 列,数字 8

case 'C': // 4 行 1 列,"存包" for(i=0;i<8;i++) { if(key[i]==0) { key[i]=rand(); sendbyte(i); lcd_flag =1; timer_work = 1; delay_50ms(20); sendbyte(8); seconds=0; timer_10ms=0; //array_read(0x2000,8,&key[0]); boxflag++; //是否箱满信号 break; } }

break; case 'D': if(count < 4) { // 4 行 2 列,数字 0

33

天津工程师范学院 2010 届本科生毕业设计 keybuf[count] = 0; count++; } break; case 'E': // 确认键按下 // 4 行 3 列,"确认" enterflag = 1; if (count==4) 作密码比较 { count = 0; //输入计数清零 password=keybuf[0]*1000+keybuf[1]*100+keybuf[2]*10+keybuf[3];// 转 换 密码 for(i=0;i<8;i++) { if(key[i]==password&&key[i]>0) 码是正确的 { flag= 1; timer_work = 1; sendbyte(i);//开起对应的箱子 delay_50ms(20); sendbyte(8); boxflag--; key[i]=0; break; } else 的 { flag=2; timer_work = 1; } } } if (count<4) { count = 0; } break; //错误时找所执行 // 只有输入 4 个密码后按确认键才

// 如 果 密

34

天津工程师范学院 2010 届本科生毕业设计 default:break; } } } /* -----------------------------------------------------------------------------[ interrupt [0x0B] void T0_int (void) [ comment: 定时器 TO 中断服务程序,定时给主循环发送 10ms 间隔消息 ] ------------------------------------------------------------------------------ */ void T0_int (void) interrupt 1//[0x0B] //定时器 T0 10ms 定时 { TR0 = 0; set_timer TR0 = 1; if(timer_work==1) { timer_10ms++; } }

]

35


相关文章:
基于单片机的自动存包系统设计论文
基于单片机的自动存包系统设计论文_信息与通信_工程科技...为了更好的为广大顾客服务,在一些商场、影院、超市...AT89S52 单片机控制器,可以同时管理四个存包柜...
超市小件物品寄存控制系统开题报告
通信工程学院 毕业论文(设计)开题报告 题目超市小件...随着微型计算机控制的普及,特别是单片机的应用, 给该...(2)指纹式电子存包柜 以使用者指纹作为寄存的凭证...
自动存包柜系统设计U82590 毕业设计
毕业设计(论文)任务书-汽... 3页 免费喜欢...基于STC89C52单片机的超... 39页 2下载券 电子自动...是超市) 等公共场合通常有电脑控制的自动存包柜, ...
毕业设计论-单片机储物柜_图文
洛阳理工学院毕业设计(论文) 超市储物柜系统驱动板...7 2.1 STC89C52RC-LQFP 单片机介绍 ......也许你和我都碰到过这样的状况:扫描条码的存包柜在按下存...
基于STC89C52单片机出租车计价器设计毕业论文
基于STC89C52单片机出租车计价器设计毕业论文_工学_高等教育_教育专区。单片机...里程检测模块由 A44E 构成, 控制模块包括 STC89C52 单片机和 AT24C02,人机...
基于STC89C52单片机的智能家居控制系统设计--2012毕业...
基于STC89C52单片机的智能家居控制系统设计--2012毕业论文_机械/仪表_工程科技_专业资料。基于STC89C52单片机的智能家居控制系统设计摘要...
基于STC89C52单片机的智能循迹小车【毕业论文,绝对精品】
沈阳理工大学 毕业设计(论文) 题 目: 基于单片机的智能循迹小车 院专 系: 业...然后由 STC89C52 通过 IO 口控制 L298N 驱动模块改变两个直流电机的工作状态...
基于89C52单片机的温度控制系统毕业论文_图文
山东英才学院 2011 届本科生毕业设计(论文) 基于 89C52 单片机的温度控制系统 --基于 STC89C52 单片机的温度控制系统摘要:随着技术的发展,各类温度控制系统已经被...
毕业设计(论文)-基于AT89C52单片机的家居系统设计
毕业设计(论文)-基于AT89C52单片机的家居系统设计_...本系统采用单片机 STC89C52 作为主控器件,为控制...第二章 2.1 智能家居控制系统模块功能 系统总体...
基于AT89C52单片机的温控系统设计与实现论文
基于AT89C52单片机的温控系统设计与实现论文_工学_高等教育_教育专区。毕业论文...1、最小系统模块(控制模块) 最小系统是由单片机 AT89C52 芯片在供电系统、...
更多相关标签:
stc89c52单片机 | stc89c52单片机简介 | stc89c52单片机的优点 | stc89c52rc单片机 | stc89c52单片机引脚图 | stc89c52单片机介绍 | stc89c52rc单片机介绍 | stc89c52单片机优点 |