2024年6月9日发(作者:)

摘要

基于Proteus软件的单片机自动取款机(ATM)仿真系统设计,硬件电路需要单

片机开发板和12864液晶显示器,能够实现自动取款的全部功能。通过在在计算机上

用C语言编程来将生成文件下载到单片机控制其它外围器件工作。但是在EDA新技

术的引入使得系统的开发成本降低而且灵活性增强,在Proteus软件中都可以找到上

述硬件元件,通过电路图连接完全可以实现仿真功能。在Keil软件环境下通过C语

言编程,编译调试后生成单片机下载的HEX(十六进制)文件,硬件电路图是在Proteus

软件中进行建模。通过Proteus和Keil结合建立的虚拟系统实现联合仿真,单片机实

时控制12864LCD实现汉字的显示,扫描键盘从而达到用户与ATM的信息交换,使

得ATM系统设计变为现实。

ATM系统,是一个有数据库组成的应用系统。用户的初始信息通过E2PROM存

放,这样免去了掉电丢失数据的弊端。系统功能有用户在ATM上提取现金、查询账

户余额、修改密码、账户冻结、密码保护、自动存款及转账功能。可以仿真实现最基

本的银行服务。

关键词:ATM;51单片机;Proteus;Keil;12864LCD;E2PROM;虚拟仿真

内蒙古工业大学本科毕业设计说明书

Abstract

Automatic Teller Machine system is based on Proteus re

circuit includes microcontroller developer board and 12864LCD display. All features of

ATM can be well worked on it. Programming on PC then download created file to

51-microcontroller to control outer circuit. However, with the introduction of EDA, new

technology, which lower the cost of system exploration and enhance flexibility.

Programing with C language, compiling and debugging under the environment of Keil

software,creating a HEX file which will be downloaded by microcontroller later. Hardware

schematic diagrams are established with Proteus software. According to the combination of

Proteus and Keil , making a virtual system , successfully achieve united simulation.

Microcontroller controls 12864LCD to display Chinese words, scans keyboard to exchange

information between customer and ATM, which makes virtual ATM system becoming

reality.

ATM system includes databases, which are used for the storage of customers’ initial

information, leading to emerge from the disadvantage of data lost when power cuts. The

functions of ATM are as follows: withdraw cash, search client and remaining modify

password, client freezed, password protection, automatic deposit and transfer client. This

system simulates to realize the bank’s fundamental services.

Keywords:ATM;51microcontroller;Proteus;Keil;12864LCD;E2PROM;virtual simulation

内蒙古工业大学本科毕业设计说明书

目录

引言 ................................................................... 1

第一章 Proteus软件的单片机ATM系统 ..................................... 3

1.1 Proteus软件的ATM概述 .......................................... 3

1.2 Proteus软件的ATM安全性分析 .................................... 3

1.3 Proteus软件的ATM稳定性分析 .................................... 3

1.4 Proteus软件的ATM主要功能分析 .................................. 3

第二章 Proteus软件仿真的硬件系统设计 ................................... 5

2.1 MCS-51系列单片机 ............................................... 5

2.1.1 AT89C51单片机 ............................................. 5

2.1.2 单片机应用系统硬件设计 .................................... 5

2.2 串行传输 ........................................................ 5

2.3 I2C串行总线 .................................................... 6

2.4 E2PROM .......................................................... 8

2.5 12864液晶显示模块 ............................................. 10

2.5.1引脚功能 .................................................. 10

2.5.2 12864DDRAM存储器 ......................................... 10

2.5.3 显示控制控制方法 ......................................... 11

2.6 蜂鸣器 ......................................................... 12

2.7 键盘 ........................................................... 12

2.7.1 键的识别 ................................................. 12

2.7.2 键盘扫描流程图 ........................................... 13

2.8 ATM硬件原理图 ................................................. 13

第三章 Proteus单片机仿真软件系统设计 .................................. 15

3.1 C-51简介 ...................................................... 15

3.1.1 C-51具有特点 ............................................. 15

3.1.2 C-51具有优点 ............................................. 15

3.1.3 C-51独特地方 ............................................. 15

3.2 ATM自动取款机系统流程 ......................................... 16

3.3 程序介绍 ....................................................... 16

内蒙古工业大学本科毕业设计说明书

3.4 PCtoLCD2002扫描软件 ........................................... 17

3.5 Proteus软件 ................................................... 19

3.5.1 Proteus概述 .............................................. 19

3.5.2 Proteus具有特点 .......................................... 19

3.5.3虚拟工具箱 ................................................ 20

3.6 Keil软件 ...................................................... 21

3.6.1概述 ...................................................... 21

3.6.2创建工程 .................................................. 22

第四章 Proteus软件仿真结果 ............................................ 23

第五章 结论 ........................................................... 25

参考文献 .............................................................. 26

附录 .................................................................. 27

谢辞 .................................................................. 34

内蒙古工业大学本科毕业设计说明书

引言

随着大规模集成电路的发展,组成微型计算机的各个功能部件:中央处理器、

RAM、ROM、EPROM、并行串行输入输出I/O接口电路、定时器/计数器集、中断

控制等部件成到一块半导体芯片上,构成一个完整的微型计算机

[8]

。由于它具有功能

强、体积小、功耗低、价格便宜、工作可靠、使用方便灵活等特点,因此特别适合工

业控制或控制类有关的数据处理系统,愈来愈广泛的应用到自动控制、智能化仪表以

及家用电器等各个领域。由于其结构及应用特点,不同于通用的微型计算机,它的执

行命令时间是可以计算出时间。

目前生产单片机的厂商很多Intel、Motorola、Philips等公司,产品达上百种,虽

然其名称各异但原理大同小异。单片机在智能仪表方面的应用有,利用单片机改造原

有的测量控制仪表,促进仪表像数字化、智能化方向发展。A/D转换器的集成,通过

单片机软件的编写程序来控制温度、压力、流量、浓度等的测量显示。而且还具有复

杂运算、误差修正、线性化、零点漂移处理、数字滤波等功能。其实具有很强的灵活

性和实践性。

Proteus就是一款很好的单片机仿真软件,通过学习这款软件不仅能够掌握一些

硬件电路还能更深刻的理解单片机,从而达到理论与实践相结合。增强感性认识,在

仿真的同时培养动手能力,创新能力和综合知识运用。而且仿真技术的发展带来很大

的经济效益。例如在航空工业方面,采用仿真技术使大型客机的设计和研制周期缩短

20%。现代仿真技术应用于各个工程领域,对于社会经济等系统,很难在真实的系统

上进行实验。因此,利用仿真技术来研究这些系统就具有更为重要的意义。

而51单片机又是最基础的所以要扎实掌握原理,加上EDA软件的鼎力相助,使

得学习单片机变得更有意思。Keil软件可以实现汇编和C语言的编程,刚学单片机

学的是汇编语言,感受是命令比较多而且很接近硬件,可移植性差。单片机C语言

相比汇编语言是高级语言,很大提高编程速度而且对硬件了解不是很高。编程环境接

近Visual C++ 6.0,不同就是需要建立工程然后添加C文件,可以进行软件仿真,断

点设置,全速运行,单步运行,程序中的延时函数是通过软件仿真调试成功。

仿真ATM自动取款机,要实现的功能是就像银行那里的功能,基本功能有存款,

修改密码,查询余额,转帐和自动存款。程序思想就是源于校园的自动取款机的流程

而设计。插卡后输入密码然后进行一系列业务处理最后退卡完成交易。硬件电路设计

有12864LCD对汉字进行显示,并且掌握了汉字编码原理,用软件生成见后边软件介

1

内蒙古工业大学本科毕业设计说明书

绍。IIC总线对E2PROM的数据,指令的写入和读出程序编写。键盘扫描程序用的是

C语言实现的。总之都是利用C语言进行控制,程序设计比较大时流程图的作用就显

得十分重要,将每个函数写成块这样就可以轻松调用不至于乱,例如显示子函数,键

盘扫描子函数等。

51单片机掌握好有助于以后的PIC,DSP,ARM,FPGA,CPLD和嵌入式系统

的学习,目前来看单片机在自动控制领域应用是非常广泛的,单片机的前景是十分光

明。

2

内蒙古工业大学本科毕业设计说明书

第一章 Proteus软件的单片机ATM系统

1.1 Proteus软件的ATM概述

Proteus软件仿真ATM系统,ATM是由CPU控制的持卡人自我服务型的金融专

用设备。该系统是一个较典型的银行存取款模拟系统,并采用软件仿真其效果,使用

者被假定为银行信用卡用户,系统应该具有安全、稳定、功能齐全的特点。满足银行

自动取款机一般功能和服务。ATM自动取款机系统,是一个有终端机,ATM系统,

数据库组成的应用系统。系统功能有用户在ATM上提取现金、查询账户余额、修改

密码及转账功能。

ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所

欲存取款的互联的现代计算机化的网络系统。可以大大减少工作人员,节约人力资源

的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的

工作效率和精确度。 减少了用户办理业务的等待时间,用户可以随时随地可以随心

所欲存取款,并且操作简单易懂。当今信息时代,时间就是金钱,提高了用户的办理

效率。

1.2 Proteus软件的ATM安全性分析

银行存取款机的数据涉及到取款机内储存的三名用户,数据量较大且对保密性的

需求很高,所以要通过设置密码等手段确保数据在用户未用正确密码登录时不能被随

意的删减和修改。并用单片机定时器设置用户交易是的时间,如果超过50s则自动退

到输入密码页面。

1.3 Proteus软件的ATM稳定性分析

系统用单片机实现对键盘、LCD、E2PROM、蜂鸣器实时控制,功能比较健全,

硬件系统的单片机采用12MHZ晶振,LCD刷新频率也很高。软件系统虽然庞大但经

过严格的分块编写并长时间调试程序,当然少不了老师的指导,完全符合设计思想。

只要是用户的合理操作软件系统,系统都应给出合理正确的回应,并满足用户的愿望,

而不是出现令用户感到意外的系统错误或系统崩溃。

1.4 Proteus软件的ATM主要功能分析

开机时显示“中国农业银行请输入插入磁卡”,当用户将磁卡插入时(低电平有

效)屏幕显示“请输入密码”。卡一密码为“123456”;卡二密码为“654321”,卡三

3

内蒙古工业大学本科毕业设计说明书

密码为“111111”全部初始化到外部存储器中。初始密码当然可以在程序中由串行数

据来修改。用户密码存放到E2PROM中,仿真开始后用户可以自己随便设置六位数

字号码,但是只要Proteus软件仿真结束后,密码又变为初始化时的密码。输入密码

通过和读取E2PROM中密码对比一致时才能登录成功。允许用户选择业务、修改密

码,查询,对用户由于疏忽录入的非法数据,能够及时提示并更正,倘若密码错误次

数大于三次则该用户将被冻结。

登陆成功界面以后共有四个个选项,查询、改密、取款、取款分别对应P12、P10、

P13、P11按键。分别按下相应的按键则选择相应的功能或者进入该键下的子菜单。

每一屏都有退出按键可以返回到上一层目录中。

查询子菜单中有如下功能键,余额查询,转账,和自动存款,选定P12后,进入

查询界面,用户输入查询条件,系统规则地在界面显示查询结果,且显示的数据尽量

全面。如果使用自动存款,可以选择的金额与取款额度一样为100¥,200¥,300¥ 。

使用转账业务是需用先选择要转入的用户,不可给自己转帐,然后选择金额。

取款时选定P10键后,进入取款界面,用户可以取面值100¥,200¥,300¥,若

取款金额大于存款金额则会提示“余额不足”,若小于则会在原余额上扣除取款金额。

本次给三个用户分别存入1000¥,2000¥,3000¥。

退出时选定P11后,进入退出界面,系统会延迟5毫秒重新跳回登陆界面,供其

他用户使用。

4

内蒙古工业大学本科毕业设计说明书

第二章 Proteus软件仿真的硬件系统设计

2.1 MCS-51系列单片机

2.1.1 AT89C51单片机

AT89C51单片机

[16]

,集成 8位CPU、4K字节ROM、128字节RAM、4个8位

并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较

强的布尔处理器。

最小系统能够运行起来必须包括电源、晶振、复位电路。输出时一般用低电平这

是因为防止噪声干扰,因为噪声一般都为高电平。

单片机对外设备控制或对单片机控制其实就是通过对I/O口的控制。51系列单片

机共有4个I/O口P0、P1、P2、P3 四个8位双向输入输出端口,每个端口都有锁存

器、输出驱动器和输入缓冲器。其中P0口为准双向I/O口,其它三个为双向I/O口。

P0中每一位为OD门输出,所以不能用作高电平驱动外围电路,所以用P0驱动电路

时必须加上拉电阻这样才能输出高电平;如果作为输入,必须先向相应的锁存器写

“1”,才不会影响输入电平。P3口还具有第二功能特点。

2.1.2 单片机应用系统硬件设计

若单片机无片内程序存储器或存储容量不够时需要外部扩展程序存储器。数据存

储器利用RAM构成,存储容量满足的情况下尽可能减少芯片的扩展。I/O接口是最

复杂的部分,因为单片机与外围电路接口各不相同。译码电路使用时要尽可能简单除

了可利用常规的门电路、译码器实现外还可以利用只读存储器与可编程门阵列来实

现。如果单片机外部扩展的器件较多负载太大,总线驱动是必须考虑的。

2.2 串行传输

D0

8位顺次传送

D7

图2-1 串行传输

随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈

5

内蒙古工业大学本科毕业设计说明书

显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。串

行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,其特点为传输

线少,且可以利用电话网等现成设备,相比并行传输要复杂一些。

2.3 I2C串行总线

I2C串行总线是由Philips公司推出的一种串行总线,具有多主机系统所需的包括

总线裁决和高低速同步的高性能串行总线。I2C总线有俩根双向信号线,即SCL和

SDA,分别为串行时钟信号和串行数据输入输出。和电路连接时要通过上拉电阻接

高电平,串行总线空闲时都是高电平,各器件的SCL、SDA都接成线与的关系,既

有一根线为低电平则整条线被拉为低电平。

每个器件接到I2C总线上都有唯一的地址,就像这次我做的课题80C51单片机

为发送装置,FM24C02为接收装置。进行数据传输时,时钟信号为高电平期间数据

信号线必须保持稳定,当时钟信号变为低电平时,数据信号才可以变化。一次完整的

传输要有起始信号和终止信号,都是由单片机发出的。SCL线为高电平期间,SDA

线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平

向高电平的变化表示终止信号。起始信号产生后总线处于被占用状态,终止信号产生

时总线处于闲置状态。数据传输时是一个字节,一个字节传输,每一字节8位最高位

到最低位传送,最后还需带一个应答位,所以一共9位为一帧。应答信号为低电平代

表从机应答,否则为“非应答”。从机不应答时则主机需向从机发送终止信号,结束

数据传送。当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结

束传送的信号。这个信号是由对从机的“非应答”来实现的。然后从机释放SDA线,

以允许主机产生终止信号。

总线上的信号既包括地址信号又包括数据信号,产生起始信号后需要发送一个地

址信号,与从机地址进行匹配。地址信号为8位最后一位代表传输方向,“0”表示主

机发送数据,“1”表示主机接收数据。

I2C总线寻址采用7位的寻址字节,即起始信号后的第一个字节。D7~D1位组

成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机输出数据,为“1”

时表示主机由从机读数据。主机发送地址时,总线上的每个从机都将这7位地址码与

自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/T位将自己确定

为发送器或接收器。从机的地址由固定部分和可编程部分组成。在一个系统中可能希

望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数

6

内蒙古工业大学本科毕业设计说明书

目。比方说一个从机的7位地址有4位是固定位,那么3位是可编程位,由排列组合

可知,这时仅能寻址8个同样的器件。典型程序如下:

起始信号 终止信号

void I2CStart(void) void I2CStop(void)

{

sda = 1; { sda = 0;

delay(5); delay(5);

scl= 1;

delay(5);

sda = 0;

delay(5);

}

I2C应答信号

void respons()

{ uchar i;

scl=1;

delay_2();

while((sda==1)&&(i<250))i++;

scl=0;

delay_2();}

向I2C写单个数据

void write_byte(uchar date)

{ uchar i,temp;

temp=date;

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

{ temp=temp<<1;

scl=0;

delay_2();

sda=CY;

delay_2();

scl=1;

delay_2();

scl = 1;

delay(5);

sda = 1;

delay(5);

}

I2C初始化

void ic_init()

{ scl=1;

delay_2();

sda=1;

delay_2();

}

}

scl=0;

delay_2();

sda=1;

delay_2(); }

7

内蒙古工业大学本科毕业设计说明书

I2C读单个数据

uchar read_byte()

{ uchar i,k;

scl=0;

delay_2();

sda=1;

delay_2();

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

{ scl=1;

delay_2();

k=(k<<1)|sda;

scl=0;

delay_2();

} return k; }

向I2C固定地址写数据

void write_add(uchar address,uchar date)

{ start();

}

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

I2C固定地址读数据

uchar read_add(uchar addr)

{ uchar date;

}

start();

write_byte(0xa0);

respons();

write_byte(addr);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

return date;

2.4 E2PROM

表2-1 FM24C02引脚定义

引脚名称

A0~A2

SDA

SCL

WP

VCC

GND

NC

引脚功能

器件地址输入

串行数据输入输出

串行时钟输入

写保护

电源

不连接

8

内蒙古工业大学本科毕业设计说明书

FM24C02是2048位的串行电可擦除ROM,内部组织为256个字节,每个字节

8位,该芯片被广泛应用于低电压及低功耗的工商业领域。产品特点,工作电压:2.2V~

5.5V ,内部结构: 256×8 (2K) ,有二线串行接口,输入引脚经施密特触发器滤波抑

制噪声满足双向数据传输协议,并且兼容100KHz(2.2V)和400KHz(5V)操作支持硬件

写保护。支持8字节(02),16字节(04、08、06) 页写模式,支持部分页写,写周期内

部定时(小于5 ms)。高可靠性,可以写次数为1000000 次,数据保存为100 年,封

装为DIP8封装。

FM24C02总线时序图:

图2-2 FM24C02总线时序图

数据传送格式,字节传送与应答,每一个字节必须保证是8位长度。数据传送时,

先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共

有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到

数据。

读写周期时序:

图2-3

FM24C02写周期时序

9

内蒙古工业大学本科毕业设计说明书

FM24C02为当前电路中的地址选择线,三根线可选择8个芯片同时连接在电路

中,当要与哪个芯片通信时传送相应的地址即可与该芯片建立连接,Proteus仿真图

中三根地址线都为0。最后一位R/W为告诉从机下一字节数据是要读还是写,0为写

入,1为读出。然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,

单片机要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件应答后就可

以读出数据字节,每读出一个字节,单片机都要回复应答信号。当最后一个字节数据

读完后,单片机应返回以“非应答”(高电平),并发出终止信号以结束读出操作。

2.5 12864液晶显示模块

2.5.1引脚功能

表2-2 12864液晶引脚介绍

引脚

1

2

3

4

5

6

7~14

符号

GND

VCC

VO

RS

R/W

E

DB0~DB7

功能

电源地

电源+5V

液晶显示驱动电源0~5V

H数据输入;L指令码输入

H数据读取;L数据写入

使能信号,由H到L

数据线

引脚

15

16

17

18

19

20

符号

CS1

CS2

RST

Vout

A

K

功能

CS1=0选择左边64 x

64

CS2=0选择右边64 x

64

复位(低电平有效)

LCD驱动负电源

背光电源(+)

背光电源(—)

2.5.2 12864DDRAM存储器

本次选用的AMPIRE12864液晶为不带字库

[12]

,因此所有汉字都需要编码。12864

液晶屏横向有128个点,纵向64个点,由两个64×64半屏组成。DDRAM与各个点

一一对应,采用自动扫描将输入的内容显示到屏幕上。CS1=1时控制左半屏,CS2=1

时控制右半屏。

显示每一个汉字需要12864LCD中的16×16个点阵,显示时首先输入汉字的上半

部分16个数据,再输入汉字的下半部分16个数据。例如“中”字,前两行数据代码代

表“中”字的上半部分,后两行数据代码代表“中”字的下半部分。

DB 0x00,0xF8,0x08,0x08,0x08,0x08,0xFF,0x08,

DB 0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,

DB 0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x01,

DB 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,

10

内蒙古工业大学本科毕业设计说明书

2.5.3 显示控制控制方法

表2-3 读状态表

RS

0

R/W

1

E

1

DB7 DB6 DB5 DB4 DB3 DB2

0

DB1

0

DB0

0 BUSY 0 ON/OFF RESET 0

如果BUSY=1则表示系统忙不能操作读,只有在BUSY=0才允许操作读。

表2-4 写指令表

RS

0

R/W

0

E

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

指令

表2-5 写数据表

RS

0

R/W

0

E

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

显示数据

表2-6 显示开关表

RS

0

R/W

0

E

0

DB7

0

DB6

0

DB5

1

DB4

1

DB3

1

DB2

1

DB1

1

DB0

D

当D=1时,开显示,其控制字为0X3F,那么关显示的控制字为0X3E。

表2-7 起始行表

RS

0

R/W

0

DB7

1

DB6

1

DB5 DB4 DB3 DB2 DB1 DB0

显示起始行(0~63)

表2-8 页起始表

RS

0

R/W

0

DB7

1

DB6

0

DB5

1

DB4

1

DB3

1

DB2 DB1 DB0

Page(0~7)

页面地址是DDRAM的行地址。8行为一页,所以共8页。

表2-9 列起始表

RS

0

R/W

0

DB7

0

DB6

1

DB5 DB4 DB3 DB2 DB1 DB0

Addres(0~63)

列地址计数器在每一次读写数据后将自动加1,在每次操作后明确起始列的地

址。

根据上述LCD设置可以编写左边的写指令程序和左边的写数据程序,右边写指

令和写数据与此类似。E在一个高脉冲下进行写指令和数据。CS1,CS2来选通左右

两屏。

11

内蒙古工业大学本科毕业设计说明书

void write_lcom(uchar date)

{

}

E=1;

RW=1;

RS=0;

RW=0;

CS2=1;

CS1=0;

P0=date;

E=0;

void write_ldate(uchar date)

{

}

E=1;

RW=1;

RS=0;

RW=0;

RS=1;

CS2=1;

CS1=0;

P0=date;

E=0;

2.6 蜂鸣器

PNP三极管主要是做驱动用的,因为单片机的IO口驱动能力不够让蜂鸣器发出

声音,所以通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,如果单片机I/O

口输出低电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,如果输出高

电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。

程序控制时将,与单片机相连的PNP基极定义为beep,要让单片机发出声音,

先将beep置为‘0’,延时100毫秒后将beep置为‘1’,实现蜂鸣器的驱动程序。

2.7 键盘

键盘实际是由排列成矩阵形式的开关组成,它是单片机系统中最最常用的人机联

系的一种设备。用户通过键盘可以向单片机CPU输入数据、地址、指令。键盘按其

结构型式可分为编码式键盘和非编码式键盘。本次使用的是非编码键盘。它由产生被

按键的编码,结构简单,但使用起来不如编码式键盘方便。

2.7.1 键的识别

本次使用的是程序扫描法来识别按键,采用行扫描方法。即通过行线发出低电平

信号,如果该行所连接的按键没有按下的话,则列线所连接的输出端口得到的全是高

电平信号;如果有按键按下的话,则得到的是非全高电平信号。找到闭合按键后,通

过所对应的行值和列值来确定该键的特征值。

12

内蒙古工业大学本科毕业设计说明书

2.7.2 键盘扫描流程图

START

寄存器初始化,I/O口初始化

检测按键是否按下

N

Y

延时5毫秒

检测按键是否按下

N

N

Y

检测按键是否释放

执行相应代码

图2-4键盘扫描流程

2.8 ATM硬件原理图

控制部件是单片机的神经中枢,它以主振频率为基准发出CPU的时序,用来协

调单片机内部各功能部件之间的数据传输,数据运算等操作。

单片机的定时控制功能采用内部时钟方式,有12MHz晶振和电容组成的并联谐

振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。

复位电路采用上电复位。EA引脚接高电平单片机访问片内程序存储器8KB,构

成单片机最小系统。

P0口为准双向口所以需要加上拉电阻,为了方便应用1KΩ排阻然后再接电源。

FM24C02为E2ROM,用于存储初始化信息。键盘为4×3键盘,12864LCD,蜂鸣器,

构成整个系统。

13

内蒙古工业大学本科毕业设计说明书

图3-6 ATM系统原理图

14

内蒙古工业大学本科毕业设计说明书

第三章 Proteus单片机仿真软件系统设计

3.1 C-51简介

C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编

语言的功能。目前使用C语言进行程序设计已经成为软件开发的一个主流。用C语

言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进扩充和移植。

而针对8051的C语言日趋成熟,成为了专业化的实用高级语言

[1]

3.1.1 C-51具有特点

C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用C语言编

程,如各种单片机、DSP、ARM等。

C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单

片机中移植过来。

C提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加

程序可读性和可维护性。

3.1.2 C-51具有优点

对单片机的指令系统不要求了解,仅要求对8051 的存贮器结构有初步了解。寄

存器分配,不同存贮器的寻址及数据类型等细节可由编译器管理。程序有规范的结构,

可分成不同的函数,这种方式可使程序结构化。提供的库包含许多标准子程序,具有

较强的数据处理能力。 由于具有方便的模块化编程技术,使已编好程序可容易地移

植。

3.1.3 C-51独特地方

sfr:特殊功能寄存器声明;sfr16:sfr的16位数据声明;sbit:特殊功能位声明;

bit:位变量声明;C-51

[2]

常用的头文件有reg51.h、reg52.h、math.h、ctype.h、stdio.h、

stdlib.h、absacc.h;

中断服务程序写法:

函数名()interrupt n

{函数内部实现}

n代表0、1、2、3、4即外部中断1、定时/计数器1、外部中断2、定时/计数器2、

串口。函数写在主函数后边不需要声明。本次使用定时器1的方式1每次定时为50ms,

15

内蒙古工业大学本科毕业设计说明书

且需要重新装初值。由于晶振12MHz,12个时钟周期为一个机器周期即1us,TH0,

TL0计满值为65535,再来一个机器周期则向CPU申请中断,于是得到如下装初值

公式:

THX=(65536-N)/256 (3-1)

TLX=(65536-N)%256 (3-2)

3.2 ATM自动取款机系统流程

ATM实现功能有提取现金、查询账户余额、修改密码、账户冻结、密码保护、

自动存款及转账功能。具体流程如下:

开始

插入磁卡

ATM启动画面

N

EEPROM

输入密码

Y

业务选择

键盘

查询取款改密取卡

余额查询转帐自动存款

结束

图3-1 ATM系统流程图

3.3 程序介绍

定义变量chakc,如果chakc=0表示磁卡没有插入,chakc>=1则表示卡插入状态。

主程序都是在chakc>=1的情况下编写的。例如chakc==3时为业务选择页面程序。

首先判断当chakc==3时,调用显示函数显示将业务选择页面显示到LCD上。键

盘检测时,当取卡键keysanf_rk1()子程序扫描到该键按下时,只进行初始化;当取款

keysanf_rk2()子程序扫描到该键按下时时就转到取款页面子程序完成取;当查询键

16

内蒙古工业大学本科毕业设计说明书

keysanf_lk2()子程序扫描到该键按下时,程序转到查询页面子程序完成查询任务;当

修改密码keysanf_lk1()子程序扫描到该键按下时,程序钻到修改密码页面完成修改密

码任务。键在每个页面都有不同的定义,rk1bz代表键的状态当为‘1’时是表示按下

键,每次执行完任务后都要将其拉低。

if(chakc==3)

{ display_ywxuanze();

keysanf_rk1();

if(rk1bz==1)

{ init();

}

keysanf_rk2();

if(rk2bz==1)

{ chakc=4;

}

表3-1程序功能简介

if(chakc==0)

if(chakc==2)

if(chakc==3)

if(chakc==4)

if(chakc==5)

if(chakc==6)

if(chakc==7)

if(chakc==8)

if(chakc==9)

if(chakc==10)

if(chakc==11)

if(chakc==12)

if(chakc==13)

if(chakc==14)

if(chakc==15)

磁卡没插入程序

磁卡插入输入密码程序

业务选择程序

取款程序

准备钞票程序

等待取走钞票程序

查询程序

显示余额程序

改密程序

密码错误程序

磁卡卡冻结程序

修改密码成功程序

余额不足程序

自动存款程序

转帐程序

keysanf_lk2();

}

if(lk2bz==1)

{ chakc=7;

}

keysanf_lk1();

if(lk1bz==1)

{ chakc=9;

}

lk1bz=0;

lk2bz=0;

rk2bz=0;

3.4 PCtoLCD2002扫描软件

汉字就需要编码软件生成代码,下面就介绍一下PCtoLCD2002软件

[15]

。12864LCD

17

内蒙古工业大学本科毕业设计说明书

显示每个汉字需要32个8位代码,编程使得代码被依次扫描到DDRAM中,一个汉字

需要256个点的明暗来实现。扫描代码是先上半部分后下半部分。要求PCtoLCD2002

软件设置为先上半部分后下半部分扫描方式。此软件还可以扫描图片生成代码用来在

12864LCD液晶显示,方法类似只需要程序略加修改。

图3-2 PCtoLCD2002界面

图3-3 软件设置

18

内蒙古工业大学本科毕业设计说明书

新建一个文本在里边输入自己想要显示的汉字例如“中国农业银行”。将字体设

置为宋体小四号保存。在菜单中点击模式中选择字符模式,选择字体中设置为宋体,

字宽和字高都设置为16,扫描方式设置为先上半部分后下半部分。

图3-4 生成汉字编码

LCD所显示的每一个汉字都用此种方法生成。然后以数组形式存放到Keil中字库

中。将来显示函数会调用数组这样就将汉字显示到屏幕上。

LCD分为两种,带字库和不带字库的。带字库的只能显示GB2312宋体,不带字

库可以显示多种字体。显示ASCII字符和1602液晶一样,只需要将要显示的字符送到

该显示的位置即可。

3.5 Proteus软件

3.5.1 Proteus概述

Proteus是英国Labcenter electronic公司开发的多功能EDA软件

[5]

,在全球广泛

使用。本次使用的是Proteus 7 Professional 7.8sp2它由ISIS(智能原理图输入系统)

和AERS(硬刷电路板系统)两大部分组成。其最大特点就是Proteus VSM(虚拟系

统模型)实现混合模式的SPICE电路仿真。具有虚拟仪表、高级图表仿真、微处理

器软件仿真器,第三方编译及调试有机结合。

3.5.2 Proteus具有特点

具有模拟电路、数字电路、单片机及外围电路组成的系统的仿真、RS232动态仿

19

内蒙古工业大学本科毕业设计说明书

真、IIC调试器、SPI调试器、键盘和LCD、LED、AD和DA、RAM和ROM系统

的仿真功能。

目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16

系列、PIC18系列、Z80系列、HC11系列、ARM7系列以及各种外围芯片。支持最

大的存储器和外围芯片。具有集单片机与SPICE分析于一身仿真软件,功能强大。

当然软件仿真精度有限,不可能所有器件都找得到相应的仿真模型,但是对于单片机

爱好者和简单的开发应用是比较好的选择。

Proteus是嵌入式系统软硬件设计仿真平台,它的特点是能够把用户编写的应用

程序下载到微处理器(MCU)中,并结合外界连线及模拟、数字电路对微处理器进行系

统逻辑功能的控制。常用的微处理器有MCS-51系列和AT89系列等,Proteus的使用

彻底改变了传统单片机的学习和开发方式,可在没有硬件条件的基础上进行逻辑控制

电路设计,大幅缩短了开发周期,节约了开发成本。

打开Proteus软件进行硬件原理图的绘制,单击Device上的P在Keywords里输

入选用的器件的名称,单击OK就将元件加到工作区中,用线将其端口连起来。画总

线时为了美观在总线转折处时按键盘上Ctrl键就将总线按45度方向画。硬件电路图

绘制时有时导线跨越幅度太大时,可以采用标号方式。相同标号代表物理连接,使得

电路图整洁美观。

3.5.3虚拟工具箱

图3-5 Proteus虚拟工具箱

Proteus的虚拟工具箱提供了电路测试中的常用工具和仪器,主要用于在实时仿

真同时的电路参数观测,测量结果随仿真动态变化并显示,可以满足精度要求不是很

20

内蒙古工业大学本科毕业设计说明书

高的测量分析,对于电路特性的定性分析可以起到事半功倍的效果,大大节约了测试

时间和开发成本。

3.6 Keil软件

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发

系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,

因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强

大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision将这些部分

组合在一起。

3.6.1概述

Keil C51

[14]

软件提供丰富的库函数和功能强大的集成开发调试工具,兼容

Windows系统,另外重要的一点,汇编语言虽然直观更接近硬件,但只要看一下编译

后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句

生成的汇编代码很紧凑容易理解。在开发大型软件时更能体现高级语言的优势。下面

详细介绍Keil C51开发系统各部分功能和使用。

Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,uVision是在

Windows下运行的版本,可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51

编译器编译生成目标文件OBJ。目标文件可由LIB51创建生成库文件,也可以与库

文件一起经L51连接定位生成绝对目标文件ABS。ABS文件由OH51转换成标准的

HEX文件,以供调试器Dscope51或Tscope51使用进行源代码级调试,也可由仿真

器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立

的Keil仿真器时,仿真器标配12MHz的晶振,但用户可以在仿真器上的晶振插孔中

换插其他频率的晶振。仿真器上的复位按钮只复位仿真芯片,不复位目标系统。仿真

芯片的31脚EA已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM,

但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩

展有外部ROM其CPU的EA引脚接至低电平的目标系统中使用。

Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容

易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、

结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用

21

内蒙古工业大学本科毕业设计说明书

C来开发,体会更加深刻。

3.6.2创建工程

图3-7 Keil创建工程界面

Keil使用时必须要创建一个工程,单击Project菜单选择New uvison project,选

择ATMEL下的ATC8951单片机。然后新建一个C文件保存。右键Target目录下的

Source Group1添加C文件到工程中,在C文件中进行程序输入,首先将所需要的头

文件和宏定义写入比如reg52.h、math.h、ctype.h、stdio.h、stdlib.h、absacc.h;#define

uchar unsigned char, #define uint unsigned int 。各个功能函数都可以保存为H文件然

后直接用头文件包含主函数就可以实现调用。单击左上角的编译如果下边显示没有错

误则程序编写成功,否则编译时通不过的。将生成HEX文件打上钩重新编译一下,

在目录下将生成十六进制HEX文件,单片机将要添加。在Proteus软件中右键单击单

片机,在目录下找到生成的HEX文件,单击左下角的开始按钮就开始仿真。

22

内蒙古工业大学本科毕业设计说明书

第四章 Proteus软件仿真结果

本次ATM所编写的功能都可以通过Proteus软件仿真实现,以下就介绍取款这项

功能为例来说明仿真效果。

在Proteus软件中单击开始仿真按钮就出现图4-1,开机页面为中国农业银行自动

取款机系统,提示插入磁卡,可以任意选择三张卡,以卡一为例,按键盘上卡一键后

选择卡一,显示图4-2要求输入密码画面,密码初始设置为123456,在键盘上正确输

入密码,如果密码错误则会显示密码错误页面。

图4-1 开机界面 图4-2 输入密码界

转到业务选择页面时,按下取款键

选择

200

元按键如下图

图4-3 业务选择界面 图4-4 取款金额界面

LCD显示屏幕上会出现“正为你准备钞票页面”如下图4-5,这时需在Proteus

软件按下“准备钞票键”。然后在Proteus软件按下“取走钞票键键”,图4-6所示。

卡一的初始金额设置为1000元,当完成取款后,选择查询下的查询余额屏幕就会显

示出“你的余额为800元”。

23

内蒙古工业大学本科毕业设计说明书

图4-5 准备钞票界面 图4-6取走钞票界面

ATM自动取款的功能通过Proteus软件仿真正确实现。系统其它功能如用户在

ATM上查询账户余额、修改密码、提示账户冻结、密码保护、自动存款及转账功能

都可可以仿真实现。

24

内蒙古工业大学本科毕业设计说明书

第五章 结论

单片机发展已有30多年,但是还是吸引了无数的爱好者。作为测控技术与仪器

的毕业生,用单片机实现简单的自动控制是必须掌握的基本能力。凡是与控制或简单

计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单

片机,51单片机也是最廉价的选择。

单片机系统的开发过程首先要进行系统需求调查,做好详细的系统调查是对系统

研制的关键。其次就是可行性分析,包括功能方面、安全性、经济性等来决定能否进

行下去。系统方案的设计是实现的基础,要求全面地考虑包括系统的结构设计,功能

设计。然后系统建模是将硬件框图转化为具体的电路,软件流程用程序实现。最后是

系统调试阶段,排除设计中的错误直到运行成功为止,由于种种局限,其中可能需要

方案局部修改再次进入调试阶段。加工成品时,用硬件原理图生成印制电路板PCB

版即可到工厂去加工,然后将所需硬件一一焊接到电路板上。

25

内蒙古工业大学本科毕业设计说明书

参考文献

[1] 谭浩强.C程序设计(第二版).北京:清华大学出版社.2001.1.

[2] 求实科技.8051系列单片机C语言设计完全手册.北京:人民邮电出版社.2006.4.

[3] 郭天翔.51单片机C语言教程.北京:电子工业出版社.2009.7.

[4] 李广第.单片机基础.北京:北京航空航天大学出版社.1994.

[5] 杨延宁,刘利军,张志勇.基于Proteus的单片机汉字点阵显示电路.西北大

学.2009.2第24卷第2期.

[5] 王威,刘佳,张志雄.基于Proteus和Keil的单片机虚拟仿真平台的设计.上海电

力学院.2009.12.第25卷第6期.

[6] 何立明.MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版

社.1995.

[7] 张凯.单片机综合系统及其设计开发.北京:科学出版社.1996.

[8] 侯伯亨,李伯成,十六位微型计算机原理及接口技术.西安:西安电子科技大学

出版社.1996.

[9] 丁元杰,单片微机原理.北京:机械工业出版社.1994.

[10] 陈伟人.AT89C系列单片机技术手册.北京:北京威力姆电子技术有限责任公

司.1995.

[11] 马忠梅,刘滨,戚军. 单片机C语言Windows环境编程宝典[M].北京:北京

航空航天大学出版社.2004.

[12] 简献忠,虞箐.基于80C51和Keil C5l的LED点阵显示系统[J] .仪器仪表学

报.2005(26):315—316.

[13] 马患梅.单片机C语言应用程序设计(修订本)[M]北京:北京航空航天大学出版

社.1999.

[14]ZHOU W,KENZO WATANABE.Technology develop—ment of instrumentation and

measurement abroad in recent years[J].Chinese Journal of Scientific Instrument.2005(7):

765-770.

[15] ZHANGS Y microcomputer principle application and interface

technology[M].Beijing:National De—fence Industry Press.1993.

[16] Atmel Microcontroller Handbook.2001.

26

内蒙古工业大学本科毕业设计说明书

附录

#include

#include//变量定义

#include//lcd的驱动程序

#include//函数的声明

#include

#include

#include

#include//数据和函数的初始化

#include

#include

void delay(uint a)

{

uchar x,y;

for(x=a;x>0;x--)

for(y=110;y>0;y--);

}

void buzzer_di()//蜂鸣器di声

{

buzzer=0;

delay(100);

buzzer=1;

}

void main()

{

init();

ininticcdate();//E2PROM数据初始化

TMOD=0x01;//定时器0工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

while(1)

{

if(chakc==0)

{

keysanf_chak();

}

if(chakc==1)

{

display_mima();

chakc=2;

}

if(chakc==2)

{

keysanf_mima();

if(xing>6)

xing=6;

if(xing<0)

xing=0;

keysanf_lk1();

if(lk1bz==1)

{

mima=table_mima[xing-1];

xing--;

lk1bz=0;

}

display_mimax(xing);

table_mima[xing]=mima;

27

内蒙古工业大学本科毕业设计说明书

if(xing==6)

{

keysanf_rk1();

if(rk1bz==1)

{

if(if(table_mima[1]==read_add(1+(cha-1)*

8)&&table_mima[2]==read_add(2+(cha-1)

*8)&&table_mima[3]==read_add(3+(cha-

1)*8)&&table_mima[4]==read_add(4+(ch

a-1)*8)&&table_mima[5]==read_add(5+(c

ha-1)*8)&&table_mima[6]==read_add(6+(

cha-1)*8)))

{

chakc=3;

TR0=1;//启动定时器0

}

else

{

chakc=10;

erroncount=read_add(0+(cha-1)*8)+1;

delay(50);

write_add(0+(cha-1)*8,erroncount);

}

rk1bz=0;

xing=0;

}

}

}

if(chakc==3)

{

display_ywxuanze();// 选择业务

28

keysanf_rk1();//取卡

if(rk1bz==1)

{

init();

}

keysanf_rk2();//取款

if(rk2bz==1)

{

chakc=4;

rk2bz=0;

}

keysanf_lk2();//查询余额

if(lk2bz==1)

{

chakc=7;

lk2bz=0;

}

keysanf_lk1();//修改密码

if(lk1bz==1)

{

chakc=9;

lk1bz=0;

}

}

if(chakc==4)

{

display_qukuan();//显示取款页面

keysanf_rk1();//退出按键

if(rk1bz==1)

{

chakc=3;

内蒙古工业大学本科毕业设计说明书

rk1bz=0;

}

keysanf_rk2();//取款200按键

if(rk2bz==1)

{

yue=read_add(7+(cha-1)*8);

if(yue<3)

chakc=13;

else

{

yue=yue-2;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=5;

}

rk2bz=0;

}

keysanf_lk1();//取款300按键

if(lk1bz==1)

{

yue=read_add(7+(cha-1)*8);

if(yue<3)

chakc=13;

else

{

yue=yue-3;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=5;

}

lk1bz=0;

}

keysanf_lk2();//取款100按键

if(lk2bz==1)

{

yue=read_add(7+(cha-1)*8);

if(yue<1)

chakc=13;

else

{yue=yue-1;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=5;

}

lk2bz=0;

}

}

if(chakc==5)

{

display_zhub();//准备钞票

keysanf_zbcp();//准备好钞票

if(zbcpbz==1)

{

chakc=6;

zbcpbz=0;

}

}

if(chakc==6)

{

display_quchao();//等带取走钞票

keysanf_qucp();//钞票是否取走

if(qucpbz==1)

29

内蒙古工业大学本科毕业设计说明书

{

chakc=3;

qucpbz=0;

}

}

if(chakc==7)

{

display_chax();//查询页面

keysanf_rk1();//退出查询页面

if(rk1bz==1)

{

chakc=3;

rk1bz=0;

}

keysanf_lk1();//余额

if(lk1bz==1)

{

chakc=8;

lk1bz=0;

}

keysanf_rk2();//转帐

{

if(rk2bz==1)

{

chakc=14;

rk2bz=0;

}

}

keysanf_lk2();//存款

{

if(lk2bz==1)

{

chakc=15;

lk2bz=0;

}

}

}

if(chakc==8)

{

display_yue();//显示余额页面

keysanf_rk1();//退出

if(rk1bz==1)

{

chakc=3;

rk1bz=0;

}

}

if(chakc==9)

{

keysanf_mima();

if(xing>6)

xing=6;

if(xing<0)

xing=0;

keysanf_lk1();

if(lk1bz==1)

{

mima=table_mima[xing-1];

xing--;

lk1bz=0;

}

display_mimaxg(xing);

30

内蒙古工业大学本科毕业设计说明书

table_mima[xing]=mima;

if(xing==6)

{

keysanf_rk1();/

if(rk1bz==1)

{

}

if(read_add(0+(cha-1)*8)<3)

{

keysanf_mima();

if(xing>6)

xing=6;

if(xing<0)

xing=0;

keysanf_lk1();

if(lk1bz==1)

{

mima=table_mima[xing-1];

xing--;

lk1bz=0;

}

display_mimaxc(xing);

table_mima[xing]=mima;

if(xing==6)

{

keysanf_rk1();

write_add(1+(cha-1)*8,table_mima[1]);

delay(50);

write_add(2+(cha-1)*8,table_mima[2]);

delay(50);

write_add(3+(cha-1)*8,table_mima[3]);

delay(50);

write_add(4+(cha-1)*8,table_mima[4]);

delay(50);

write_add(5+(cha-1)*8,table_mima[5]);

delay(50);

write_add(6+(cha-1)*8,table_mima[6]);del

ay(50);

chakc=3;

rk1bz=0;

chakc=12;//转向密码修改成功

}

}

}

if(chakc==10)

{

if(bool==0)

{

display_erron();//显示密码错误

delay(2440);

bool=1;

31

if(rk1bz==1)

{if(table_mima[1]==read_add(1+(cha-1)*8

)&&table_mima[2]==read_add(2+(cha-1)*

8)&&table_mima[3]==read_add(3+(cha-1)

*8)&&table_mima[4]==read_add(4+(cha-

1)*8)&&table_mima[5]==read_add(5+(ch

a-1)*8)&&table_mima[6]==read_add(6+(c

ha-1)*8)))

{

}

chakc=3;

内蒙古工业大学本科毕业设计说明书

else

{

chakc=10;

bool=0;

erroncount=read_add(0+(cha-1)*8);

erroncount++;

delay(50);

write_add(0+(cha-1)*8,erroncount);

}

rk1bz=0;

xing=0;

}

}

}

if(read_add(0+(cha-1)*8)==3)

{

chakc=11;

}

}

if(chakc==11)

{

display_kadongjie();//卡被冻结

keysanf_rk1();

if(rk1bz==1)

{

init();

rk1bz=0;

}

}

if(chakc==12)

{

display_mimaxiugaicg();//密修改

keysanf_rk1();//确定

if(rk1bz==1)

{ chakc=3;

rk1bz=0;

}

}

if(chakc==13)

{

display_yuebuzu();//余额不足

keysanf_rk1();//确定

if(rk1bz==1)

{

chakc=3;

rk1bz=0;

}

}

if(chakc==14)

{

display_user_choose();

keysanf_rk1();//退出

if(rk1bz==1)

{

chakc=7;

rk1bz=0;

}

keysanf_rk2();//卡二

if(rk2bz==1)

{

display_qukuan();

32

内蒙古工业大学本科毕业设计说明书

rk1bz=0;

delay(1000);

delay(1000);

delay(1000);

temp1=read_add(7+(cha-1)*8);

temp1-=2;

write_add(7+(cha-1)*8,temp1);

temp2=read_add(7+(cha)*8);

temp2+=2;

write_add(7+(cha)*8,temp2);

}

}

if(chakc==15)

{

display_qukuan();//显示取款页面

keysanf_rk1();//退出按键

if(rk1bz==1)

{

chakc=3;

rk1bz=0;

}

keysanf_rk2();//存款200按键

if(rk2bz==1)

{

yue=read_add(7+(cha-1)*8);

yue=yue+2;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=7;

rk2bz=0;

}

keysanf_lk1();//存款300按键

if(lk1bz==1)

{

yue=read_add(7+(cha-1)*8);

yue=yue+3;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=7;

lk1bz=0;

}

keysanf_lk2();//存款100按键

if(lk2bz==1)

{

yue=read_add(7+(cha-1)*8);

yue=yue+1;

delay(50);

write_add(7+(cha-1)*8,yue);

chakc=7;

lk2bz=0;

}

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}

33

内蒙古工业大学本科毕业设计说明书

谢辞

四年的大学生活在这个季节即将划上句号,而我的人生却只是一个逗号。衷心感

谢大学四年里教导过我的每一位师长,你们严谨致学的态度、高风亮节的品质是我人

生路上的楷模和坐标。

毕业设计历时三个月时间可以说涵盖了大学中大部分知识,像数电、模电、C语

言、单片机等。当时学习只是学些概念,毕业设计时又重新将理论运用到实践中使得

学到的知识得到升华。十天学会单片机教程给了我很大帮助,学会了用C语言来控

制单片机实现对外围电路的控制,还有用Keil创建工程和Proteus软件仿真电路。最

后感谢黄老师孜孜不倦地指导和耐心地修改在设计中的错误,并提出的建设性意见。

34