基于51单片机的ATM自助取款系统设计 - 详细设计方案及实现
一、 引言
ATM自助取款系统是一种基于计算机网络的金融自助服务系统,它为持卡人提供了一种便捷的财务服务,可以实现账户查询、转账以及取款等功能。如今,ATM自助取款系统已成为金融机构提供财务服务的重要手段。基于51单片机的ATM自助取款系统能够实现高效、安全的财务服务,是目前金融机构提供财务服务的首选。
二、 系统结构设计
1. 硬件结构设计
基于51单片机的ATM自助取款系统主要由51单片机、LCD显示屏、读卡器、取款机、键盘、磁条卡、硬件接口模块等组成。
(1) 51单片机:51单片机是一种8位微处理器,具有较高的处理能力。它可以控制整个系统的运行,实现系统各部件之间的通信,并负责处理系统的输入输出信号。
(2) LCD显示屏:LCD显示屏可以提供系统的界面,展示系统的操作信息,供持卡人查看和操作。
(3) 读卡器:读卡器可以读取持卡人插入的磁条卡上的信息,用于识别持卡人身份。
(4) 取款机:取款机可以根据持卡人的要求,从存款机中取出指定金额的货币,并将取出的货币送至出款口,以供持卡人取走。
(5) 键盘:键盘可以输入持卡人的账号和密码,以及操作信息,实现持卡人对系统的控制。
(6) 磁条卡:磁条卡可以存储持卡人的信息,以识别持卡人身份。
(7) 硬件接口模块:硬件接口模块可以实现51单片机与其他硬件之间的通信,以实现系统的功能。
2. 软件结构设计
基于51单片机的ATM自助取款系统的软件结构主要由输入输出程序模块、数据处理程序模块、系统管理程序模块、网络通信程序模块等组成。
(1) 输入输出程序模块:输入输出程序模块可以实现51单片机与其他硬件之间的通信,接收和发送各种信号,实现系统的数据采集和结果输出。
(2) 数据处理程序模块:数据处理程序模块可以根据持卡人输入信息,进行数据处理,实现系统的功能。
(3) 系统管理程序模块:系统管理程序模块可以实现系统的管理功能,包括系统参数设置、系统状态检测、系统报警等功能。
(4) 网络通信程序模块:网络通信程序模块可以实现51单片机与外部系统之间的通信,实现系统与银行服务器的数据交互,以实现系统的功能。
三、 系统功能设计
1. 持卡人认证
持卡人认证是系统的基础功能,它是实现其他功能的前提。持卡人认证主要包括以下步骤:
- 持卡人将磁条卡插入读卡器。
- 读卡器读取磁条卡上的信息,并将信息传递给51单片机。
- 51单片机对读取的信息进行验证,判断磁条卡是否有效。
- 如果磁条卡有效,则显示屏提示持卡人输入密码。
- 持卡人输入密码,51单片机对输入的密码进行验证。
- 如果密码正确,则持卡人认证成功,系统进入下一步操作。
- 如果密码错误,则显示屏提示密码错误,并提示重新输入。
2. 账户查询
账户查询功能允许持卡人查询其账户余额、交易记录等信息。具体步骤如下:
- 持卡人认证成功后,显示屏提示持卡人选择账户查询功能。
- 持卡人确认选择账户查询功能后,系统根据磁条卡上的信息获取持卡人的账户信息。
- 系统将账户信息显示在LCD显示屏上,供持卡人查看。
3. 转账
转账功能允许持卡人将款项转入其他账户。具体步骤如下:
- 持卡人认证成功后,显示屏提示持卡人选择转账功能。
- 持卡人确认选择转账功能后,系统提示持卡人输入收款人账户信息。
- 持卡人输入收款人账户信息后,系统提示持卡人输入转账金额。
- 持卡人输入转账金额后,系统提示持卡人确认转账信息。
- 持卡人确认转账信息后,系统将转账信息发送至银行服务器。
- 银行服务器对转账信息进行验证,并进行相应的处理。
- 如果转账成功,则系统显示转账成功的提示信息。
- 如果转账失败,则系统显示转账失败的提示信息。
4. 取款
取款功能允许持卡人从其账户中提取现金。具体步骤如下:
- 持卡人认证成功后,显示屏提示持卡人选择取款功能。
- 持卡人确认选择取款功能后,系统提示持卡人输入取款金额。
- 持卡人输入取款金额后,系统提示持卡人确认取款信息。
- 持卡人确认取款信息后,系统向银行服务器发送取款请求。
- 银行服务器对取款请求进行验证,并进行相应的处理。
- 如果取款成功,则系统控制取款机将指定金额的现金送至出款口。
- 持卡人取出现金后,系统显示取款成功的提示信息。
- 如果取款失败,则系统显示取款失败的提示信息。
四、 系统流程设计
基于51单片机的ATM自助取款系统的工作流程如下:
- 持卡人将磁条卡插入读卡器。
- 读卡器读取磁条卡上的信息,并将信息传递给51单片机。
- 51单片机对读取的信息进行验证,判断磁条卡是否有效。
- 如果磁条卡有效,则显示屏提示持卡人输入密码。
- 持卡人输入密码,51单片机对输入的密码进行验证。
- 如果密码正确,则持卡人认证成功,系统进入下一步操作。
- 如果密码错误,则显示屏提示密码错误,并提示重新输入。
- 持卡人选择操作功能,如账户查询、转账、取款等。
- 系统根据持卡人的选择执行相应的操作,并进行相应的处理。
- 系统将操作结果显示在LCD显示屏上,供持卡人查看。
五、 代码实现
// 硬件定义
#define LCD_RS P2^0
#define LCD_RW P2^1
#define LCD_E P2^2
#define LCD_D4 P2^4
#define LCD_D5 P2^5
#define LCD_D6 P2^6
#define LCD_D7 P2^7
#define KEY_1 P1^0
#define KEY_2 P1^1
#define KEY_3 P1^2
#define KEY_4 P1^3
#define KEY_5 P1^4
#define KEY_6 P1^5
#define KEY_7 P1^6
#define KEY_8 P1^7
// 函数声明
void LCD_Init(void); // LCD初始化函数
void LCD_WriteCmd(unsigned char cmd); // LCD写命令函数
void LCD_WriteData(unsigned char data); // LCD写数据函数
void LCD_ShowStr(unsigned char *str, unsigned char x, unsigned char y); // LCD显示字符串函数
unsigned char Key_Scan(void); // 键盘扫描函数
// 主函数
void main(void) {
LCD_Init(); // 初始化LCD
LCD_ShowStr("欢迎使用ATM系统", 1, 1); // 显示欢迎信息
while(1) {
unsigned char key = Key_Scan(); // 扫描键盘
switch(key) {
case KEY_1: // 账户查询
LCD_ShowStr("账户查询", 1, 2);
break;
case KEY_2: // 转账
LCD_ShowStr("转账", 1, 2);
break;
case KEY_3: // 取款
LCD_ShowStr("取款", 1, 2);
break;
default:
break;
}
}
}
// LCD初始化函数
void LCD_Init(void) {
LCD_WriteCmd(0x38); // 设置LCD工作模式
LCD_WriteCmd(0x0c); // 开启显示
LCD_WriteCmd(0x01); // 清屏
LCD_WriteCmd(0x06); // 设置显示方向
LCD_WriteCmd(0x02); // 设置显示起始位置
}
// LCD写命令函数
void LCD_WriteCmd(unsigned char cmd) {
LCD_RS = 0; // 设置命令模式
LCD_RW = 0; // 设置写模式
LCD_D4 = cmd & 0x10;
LCD_D5 = cmd & 0x20;
LCD_D6 = cmd & 0x40;
LCD_D7 = cmd & 0x80;
LCD_E = 1; // 脉冲使能
LCD_E = 0; // 结束使能
LCD_D4 = (cmd << 4) & 0x10;
LCD_D5 = (cmd << 4) & 0x20;
LCD_D6 = (cmd << 4) & 0x40;
LCD_D7 = (cmd << 4) & 0x80;
LCD_E = 1; // 脉冲使能
LCD_E = 0; // 结束使能
}
// LCD写数据函数
void LCD_WriteData(unsigned char data) {
LCD_RS = 1; // 设置数据模式
LCD_RW = 0; // 设置写模式
LCD_D4 = data & 0x10;
LCD_D5 = data & 0x20;
LCD_D6 = data & 0x40;
LCD_D7 = data & 0x80;
LCD_E = 1; // 脉冲使能
LCD_E = 0; // 结束使能
LCD_D4 = (data << 4) & 0x10;
LCD_D5 = (data << 4) & 0x20;
LCD_D6 = (data << 4) & 0x40;
LCD_D7 = (data << 4) & 0x80;
LCD_E = 1; // 脉冲使能
LCD_E = 0; // 结束使能
}
// LCD显示字符串函数
void LCD_ShowStr(unsigned char *str, unsigned char x, unsigned char y) {
unsigned char i = 0;
LCD_WriteCmd(0x80 + x); // 设置显示位置
LCD_WriteCmd(0xC0 + y); // 设置显示位置
while(str[i] != '�') {
LCD_WriteData(str[i]);
i++;
}
}
// 键盘扫描函数
unsigned char Key_Scan(void) {
unsigned char key = 0xFF;
if(!KEY_1) { key = KEY_1; }
if(!KEY_2) { key = KEY_2; }
if(!KEY_3) { key = KEY_3; }
if(!KEY_4) { key = KEY_4; }
if(!KEY_5) { key = KEY_5; }
if(!KEY_6) { key = KEY_6; }
if(!KEY_7) { key = KEY_7; }
if(!KEY_8) { key = KEY_8; }
return key;
}
六、 总结
本文详细介绍了基于51单片机的ATM自助取款系统的设计方案,涵盖了硬件结构设计、软件结构设计、功能实现、系统流程等内容,并提供相应的代码示例,帮助读者深入了解该系统的开发过程。该系统能够实现账户查询、转账以及取款等功能,并具备良好的安全性,是目前金融机构提供财务服务的一种有效手段。
原文地址: https://www.cveoy.top/t/topic/lfYq 著作权归作者所有。请勿转载和采集!