基于51单片机自动取款机

基于51单片机自动取款机

(仿真+程序)

功能介绍

具体功能:

1.模拟三张卡有对应的密码和余额;

2.插入银行卡输入对应的密码可以办理相应业务(查询、取款、改密码、取卡);

3.密码输入错误三次,银行卡会被冻结;

​演示视频:

基于51单片机自动取款机 

添加图片注释,不超过 140 字(可选)

程序

#include<reg52.h>
#include<bianldy.h>//变量定义
#include<control_lcd.h>//lcd的驱动程序
#include<hanssm.h>//函数的声明
#include<ziku.h>
#include<display.h>
#include<iiccon.h>
#include<init.h>//各类数据和函数的初始化
//unsigned char i;
#include<iicdateinit.h>
#include<KANSANF.h>
/***公众号:木子单片机****
************************************/
void delay(uint a)
{
 	uchar c;
	uint b;
	for(b=0;b<a;b++)
		for(c=0;c<120;c++)
		;
}
void buzzer_di()//蜂鸣器di声
{
	buzzer=0;
	delay(100);
	buzzer=1;
}


main()
{
	init();
	  ininticcdate();//E2PROM中数据的初始化								
	while(1)
	{
		if(chakc==0)
		{
			keysanf_chak();
		//	init();	
		}
		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;
		if(xing==6)
		{
			keysanf_rk1();
			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+(cha-1)*8)&&table_mima[6]==read_add(6+(cha-1)*8))
					{chakc=3;}
					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)// 在选择业务下检测1234个按键
		{
			
			display_ywxuanze();// 选择业务页面
			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)
			{
				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;
			}
		}
		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);//密码修改输入新密码是的页面
					table_mima[xing]=mima;
				if(xing==6)
				{
						keysanf_rk1();//确定 将新密码写入E2PROM
						if(rk1bz==1)
						{
						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]);
						delay(50);
						chakc=3;
						rk1bz=0;
						chakc=12;//转向密码修改成功页面
						}
				}
				
		}
		if(chakc==10)
		{
			if(bool==0)
			{
				display_erron();//显示密码错误一段时间
				delay(2440);
			  	bool=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();
					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+(cha-1)*8)&&table_mima[6]==read_add(6+(cha-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;
			}
	  }
	}
}


硬件设计

使用元器件:

单片机:AT89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!

 

可以关注下方公众号!

点赞分享一起学习成长。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值