版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
试验汇报
题目:基于IC卡的用电管理系统
组员A:
组员B:
班级:电气09
2023-5-17
【摘要】在IC卡应用日益广泛的今天,IC卡用电管理系统以其管理日勺安全、
可靠、高效、灵活、以便,已逐渐取代老式H勺用电管理模式。我们设计日勺IC卡
用电管理系统可以以便地管理和控制应用场所的顾客。本系统以智能化小区为
应用背景,通过上位机(电脑)与下位机(单片机)串行通信口勺联合操作,完
毕对刷卡顾客信息的显示,记录与管理。规定IC卡上存贮的内容由规定日勺特性
码、卡号、姓名、卡内余额以及权限等级构成,特性码为鉴别该卡合法性口勺根
据。以单片机为关键的下位机系统,可以以便地对IC卡进行操作,鉴定卡的合
法性,对非法卡予以报警,对刷卡成功后的合法卡在数码管上显示其卡号、卡
内余额以及扣费操作。上位机界面由C++中的MFC编写完毕。其对刷卡人基本信
息详细显示,同步能进行充值电费,对于管理员权限顾客,可查询所有顾客H勺
基本信息。系统实现简朴、便于扩展,给管理者和顾客带来了极大的以便。
【关键词】IC24coi卡单片机串行通信MFC友好界面
目录
1、引言
2、试验目的及任务
3、详细工作内容
3.1技术规定
3.2工作规定
4、总体设计方案及分析
4.1总体构造设计框图
4.2系统模块分析
单片机系统模块功能简介
单片机与上位机H勺串行通信
上位机功能实现及界面设计
5、试验运行成果及调试
6、试验设计总结及
7、参照资料
8、附录
8.1源程序
8.2原理图及PCB图
1.引言
伴随智能化住宅小区的兴起与迅速发展,对智能化住宅小区的现代化物业管
理提出了更高日勺规定,例如用电管理。老式的用电管理模式存在如下弊端:(1)
人工抄表误差大、费时、麻烦;(2)先用电后付费,收费慢,加之各单位门户
日勺防盗门,很不以便,甚至一部分电费收不回来。迅速发展H勺IC卡技术引入用
电管理可以处理以上问题,还可以记录各顾客小J用电状况,备份用电数据,实
既有效H勺监督管理。该类系统可以提高管理效率和可靠性。通过预先收费,可
以增长管理部门的可用资金,为居民提供优质服务,变化对资源先消费后收费
H勺不合理状况。对于顾客而言,IC卡收费可消除收费人员入户H勺骚扰和准备现
金零钱日勺烦恼;同步,尚有助于顾客根据自家用电状况,进行计划消费。
2.试验目的及任务
(1)通过查阅有关资料,深入理解IC卡口勺原理及与单片机接口方式;
(2)学习有关操作界面H勺设计措施及制作;
(3)复习“MCS-51单片机原理及C语言(或汇编语言)程序设计”;
(4)设计基于IC卡的用电管理系统H勺原理图,构建硬件平台;
(5)采用汇编或C语言编写应用程序,上位机可采用任一高级语言编写应用
程序;
(6)制作出样机并测试到达功能(读、写的数据信息)和技术指标规定;
(7)写出设计汇报和答辩PPT。
3.详细工作内容
3.1技术规定
(1)目的(IC卡为24C01;
(2)IC卡的信息量不少于256字节;
(3)可识别与否用IC卡在线;
(4)显示顾客的有关信息;
(5)可以鉴别非法IC卡;
(6)友好人性化操作界面;
(7)可读、写的数据信息;
(8)运用IC卡的信息可决定顾客的权利和义务。
3.2工作规定
(1)组建基于单片机H勺1C卡用电管理系统日勺总体构造框图;
(2)设计详细的原理图,通过理论分析和计算选择电路参数;
(3)根据操作功能规定,确定操作界面的控制功能;
(4)按设计规定确定显示方式及信息量;
(5)编写应用程序并调试通过;
(6)对系统进行测试和成果分析;
(7)撰写设计汇报和答辩PPT。
4.总体设计方案及分析
4.1总体构造设计框图
4.2系统模块分析
4.2.1单片机系统模块功能简介
下位机系统的电路原理图如附录中所示,如下对该电路图的基本工作
原理进行简述。
1、晶振发生器模块
两个输出端分别连接单片机XTAL1,XTAL2端口,通过晶振与电容产生固定频
率的震荡周期信号,作为单片机H勺时钟信号。
XTAL.1,XTAL2端外接石英晶体作定期元件时,内部反向放大器自激振荡,产
生时钟。时钟发生器对振荡脉冲二分频,即若石英频率为6MHz,则时钟频率为
3MHz,本试验中,晶振频率为11.0592MHz。构成石英振荡电路的电容一般取30pF,
如图中所示。
2、复位信号发生模块
FWVCC
如图,VCC产生日勺信号直接连接至EA/VPP端口。当该端口被置位为1时,地
址OOOOH'OFFFH空间访问单片机内部ROM,或地址1OOOH'FFFFH空间访问单片机内
部ROM,本次试验中该端口为12.5V。
电阻R1上的电压传送至单片机RST/VPD端口处。当开关闭合时,在时钟电路作用
下,在改引脚上出现两个机器周期以上H勺高电平,使其内部复位。
此外,VPD为备用电源输入。当单片机上主电源VCC发生故障,减少到低电平规
定值时,VPD将为RAM提供备用电源,以保障存储在RAM中的信号不会丢失。
3、外部开关触发装置
通过开关SI,S2,S3产生低电平信号,传送至单片机。其中,S1,S3通过
与门合成信号再与S2合成为INTO送至单片机INTO号中断接口,作为外部中断
信号,设置为其下降沿有效。即当INTO出现下降沿时,单片机进入中断子程序,
在中断子程序中判断p3.3,P3.4,P3.5端口H勺输入电平就能识别是哪个开关按下,
本次试验中开关S1按下时显示卡号,S2按下时显示余额,S3按下时可以实行
减1扣费操作。
4、1C卡读写装置
IK
ICRST
本系统设计选用的IC卡为AT24C01,AT24C01是美国ATMEL企业口勺低功耗CMOS
串行EEPROM,它是内含256X8位存储空间,具有工作电压宽(2.5~5.5V)、
擦写次数多(不小于10000次)、写入速度快(不不小于10ms)等特点。每写
入或读出一种数据字节后,该地址寄存器自动加1,以实现对下一种存储单元的
操作。所有字节都以单一操作方式读取。为减少总口勺写入时间,一次操作可写
入多达8字节日勺数据。下图为AT24c系列芯片的封装图。
各引脚功能见下表:
管脚名称功能
AO、AKA2器件地址选择
SDA串行数据/地址
SCL串行时钟
WP写保护
VCC+1.8V—6.0V工作电压
VSS接地
其中,SDA控制连接单片机PL6,SCL连接单片机P1.5,RST连接单片机PL7。
(详细见原理图)
其工作原理为基本口勺I2C构造。
IIC总线技术是一种高性能的芯片间串行传播总线,它仅以两根连线实现了完善
n时全双工同步数据传播,即SDA与SCL。SDA是一根双向的数据线,SCL为一
根时钟线,所有连接到IIC总线上H勺设备,其串行数据都要连接到总线的SDA
上,而各设备的时钟均要连接到SCL线上。
在HC总线进行数据传播是,在时钟信号为高电平期间,数据线上必须保持稳
定时逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平
期间,才容许数据线上的电平状态变化。
通过SDA与SCL的时序配合,到达传播与发送数据的目的。RST为写保护位,在
写IC卡之前需将RST位进行置1操作。
在数据传送过程中,必须确认数据传送口勺开始和结束。在12c总线技术规范中,
开始和结束信号(也称启动和停止信号)的定义如下:
(1)开始信号:当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳
变,开始传送数据。
(2)结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变,结束传
送数据。
开始和结束信号都是由主器件产生。在开始信号后来,总线即被认为处在忙状
态,其他器件不能再产生开始信号。主器件在结束信号后来退出主器件角色,
通过一段时间过,总线被认为是空闲时。
IIC总线数据传送采用时钟脉冲逐位串行传送方式,在SCL/J低电平期间,SDA线
上高、低电平能变化,在高电平期间,SDA上数据必须保护稳定,以便接受器采
样接受,时序如图所示。
SCL
数据稳定状态数据变化允许
HC总线发送器送到SDA线上H勺每个字节必须为8位长,传送时高位在前,低位在
后。与之对应,主器件在SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器
释放SDA线,接受器把SDA线拉低,以给出一种接受确认位;第9个脉冲高电平期
间,发送器收到这个确认位然后开始下一字节H勺传送,下一种字节H勺第一种脉
冲低电平期间接受器释放SDA。每个字节需要9个脉冲,每次传送的字节数是不
受限制H勺。
HC总线的数据传送格式是在12c总线开始信号后,送出的第一字节数据是用来
选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)o方向位为“0”
表达发送,即主器件把信息写到所选择日勺从器件中;方向位为“1”表达主器件将
从器件读信息。格式如下:
1010A2A1AOR/W
开始信号后,系统中日勺各个器件将自己的地址和主器件送到总线上的地址进行
比较,假如与主器件发送到总线上rJ地址一致,则该器件即被主器件寻址出J器
件,其接受信息还是发送信息则由第8位(R/W)决定。发送完第一种字节后再
开始发数据信号。
数据传播必须带响应。有关日勺响应时钟脉冲由主机产生,当主器件发送完一字
节的数据后,接着发出对应于SCL线上的一种时钟(ACK)承认位,此时钟内主
器件释放SDA线,一字节传送结束,而从器件H勺响应信号将SDA线拉成低电平,
使SDA在该时钟时高电平期间为稳定的低电平。从器件日勺响应信号结束后,SDA
线返回高电平,进入下一种传送周期。
一般被寻址的接受器在接受到於J每个字节后必须产生一种响应。当从机不能响
应从机地址时,从机必须使数据线保持高电平,主机然后产生一种停止条件终
匚传播或者产生反复起始条件开始新於J传播。假如从机接受器响应了从机地址
不过在传播「一段时间后不能接受更多数据字节,主机必须再一次终止传播。
这个状况用从机在第一种字节后没有产生响应来表达。从机使数据线保持高电
平主机产生一种停止或反复起始条件。详细的读卡及写卡操作环节如下。
BUSACTIVITYCONTROL
DATAn
MASTERBYTE
人
SDALINESP
N
Ao
BUSACTIVITYC
KA
C
K
读卜操作流程
SS
T
BUSACTIVITYO
MASTERP
SDALINE
A
C
BUSACTIVITYK
写卡操作流程
5.蜂鸣器报警装置
U9
7:厂机T
---------、
-----r---\--II-----BZ-ZE-R\
如图,由单片机Pl.0发山的电平信号经与门处理后连接至蜂鸣器口勺端,蜂鸣
器另一端连接高电平信号Vcc。当Pl.0端口发出低电平信号时,蜂鸣器两端出
现电位差,蜂鸣器导通鸣响;当PLO端口电平信号重新拉高时蜂鸣器关闭,停
匚鸣响。因此在本试验中通过单片机P1.0脚的信号来控制蜂鸣器进行工作。
6、工作状态提醒灯
74HC08指示亮,标志卡插入
U6B
D2
%*
由单片机Pl.1端口产生信号经与门U6B后传送至后级装置。信号直接传至二极
管D2o当Pl.1为低电平信号时,D2灯亮;当P1.1为高电平信号时,D2灯熄灭。
本试验中,设置D2灯位正常工作时的指示灯。通过单片机控制判断其工作状态,
并通过该装置进行外部显示。
7、七段数码管显示
MAX2O2
、
口
、
『
_D加
《ISI
工(
,E
r
二
5E二
・J£■dVIGH
88
MHS
—l
卜
■匚
i一
M
"E品S
8(E
日U"33UQ.8rll
4k
'M澈:XTB
407
ULX2M3A
IB741K575WPKI
18D(GOy
INIOUTI
17DtGiyMTI^y
IN2OUT2»hiwZy
IN3oun
15IN(,4C
IN4OUT4
IN5OUTS
IN6OUT6
IN7OUT7
INKOUTK
CWD
其总体工作电路如上所示。由两个74LS573寄存器从单片机数据总线上获取数
据信号,其中寄存器U2为段码寄存器,控制每个数码管显示日勺内容。寄存器U3
为位码寄存器,通过连接译码器ULN2803A来控制哪个数码管亮灯。在此定义寄
存器U2的地址为OBFFFH,寄存器U3日勺地址为7FFFH。
8.单片机程序模块
-LZ7nittUU
下位机程序流程图
下位机与上位机的通信
上.位机与下位机之间的通信可以采用串行通讯和并行通讯二种方式。由于串
行通讯方式具有使用线路少、成本低,尤其是在远程传播时,防止了多条线路
特性的不一致而被广泛采用。在串行通信时,数据一位一位地发送,比时规定
通信双方都采用一种原则接口,RS-232C接口是单片机和PC机进行通信最常用
口勺一种接口。单片机与PC机进行串口通信最简朴的三线制法(一根发送线,一
根接受线,一根地线),即接受数据针脚(RXD)与发送数据针脚(TXD)相连,彼
此交叉,信号地(GND)对应相接。不过,串口还不能直接和单片机相连,可以选
用MAX232进行电平转换。MAX232用于RS-232c原则,RS-232c原则规定在码元
畸变不不小于4%的状况下,传播电缆长度最大概为15米,最高传播速率为
20kbit/soRS485原则最大传播距离约为1219米,最大传播速率约为10Vbit/s。
上位机与下位机接口电路
RS232原则总线接口(DB9插座):单片机工作电平为TTL(0〜5V),RS232
原则电平(逻辑1:-15〜-5V;逻辑0:+5V〜+15V)。采用RS232原则总线与
单片机通信时,常用MAX232作TTL与RS232H勺电平转换。DB9插座信号含义如
下:
DB-9信号名称含义
3TXD数据发送端
2RXD数据接收端
7RTS请求发送(计算机要求发送信息)
8CTS清除发送(Modem准备接收数据)
6DSR数据设备准备就绪
0SG信号地
1DCD数据或载波检绑
4DTR数据终端准备就绪各,使用+5v
9RI响铃指示
v)转换为
单片机所用m:构造如下图:
其内部构造基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6
脚和4只电容构成。功能是产生+12v和72V两个电源,提供应RS-232串口电
平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构
成两个数据通道。其中13脚(R1IN)、12脚(R10UT)、11脚(T1IN)、14脚
(T10UT)为第一数据通道。8脚(R2IN)、9脚(R20UT)、10脚(T2IN)、7
脚(T20UT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232
数据从T10UT.T20UT送到电脑DB9插头;DB9插头的RS-232数据从RUN、R2IN
输入转换成TTL/CMOS数据后从R1OUT.R2OUT输出。第三部分是供电。15脚GND、
16脚VCC(+5v)o
8051有一种可编程的全双工串行通信接口,它可作UART用,也可作同步移
位寄存器,其帧格式可有8位、10位或11位,并能设置多种波特率,给使用者
带来很大的灵活性。
1、串行口控制字及控制寄存器
8051串行口是一种可编程接口,对它日勺编程只用两个控制字分别写入特殊功能
寄存器:串行口控制寄存器SCON(98H)和电源控制寄存器PCON(97H)即可。8051
串行通信的方式选择、接受和发送控制以及串行口日勺状态标志等均由特殊功能
寄存器SCON控制和指示。SCON控制字格式如下图:
SCOND7D6D5D4D3D2DIDO
98HSM0SM1SM2RENTB8RB8TIRI
(1)SMO和SM1串行口工作方式选择位。
(2)REN容许接受控制位。
(3)TB8发送数据的第9位(D8)装入TB8中。
(4)RB8接受数据的第9位。
(5)TI发送中断标志。
(6)RI接受中断标志。
2、串行通信工作方式
在本系统设计中,我们选择最常用的方式1作为串口工作方式,其数据字
是8位异步通信串口,且波特率可变。方式1以10位数据为一帧,设有一种起
始位“0”和一种停止位“1”,中间是8位数据。先发送或接受最低位。
串口方式1发送时,数据从引脚TXD端输出,当执行数据写入发送缓冲
器SBUF的命令时.就启动了发送器开始发送。发送时的J定期信号,也就是发送
移位时钟(TX时钟),是内部定期器T1送来的溢出信号通过16分频或32分频
(取决SMOD时值)而获得日勺。TX时钟就是发送波特率,可见方式1波特率是可
变的。发送开始的同步,SEND变为有效,将起始位向TXD输出,此后每过一个
TX时钟周期(16分频计数器溢出一次为一种时钟周期,因此,TX时钟频率由
波待率决定)产生一种移位脉冲,并由TXD输出一种数据位,8位数据位所有
发送完后,置位TI,并申请中断。再经一种时钟周期SEND失效。
3、串口方式1波特率
串行口工作之前,应对其进行初始化,重要是设置产生波特率的定期器1、
串行口控制和中断控制。详细环节如下:
(1)确定T1的工作方式(编程TMOD寄存器);
(2)计算T1/、J初值,装载TH1、TL1;
(3)启动T1(编程TCON中的TR1位);
(4)确定串行口控制(编程SCON寄存器):
同步,串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
串口方式1的移位时钟脉冲由定期器T1H勺溢出率决定,因此8051串行口方式1
H勺波特率由定期器T1的溢出率与SMOD值同步决定。
方式1的波特率
定期器T1作波特率发生器使用时,一般选用定期器方式2(自动重装初值定
期器)比较实用。定期器方式2具有自动重新加载功能,即自动加载计数初值,
因此也可以说方式2是自动重新加载工作方式。在这种工作方式下,把16位计
数器分为两部分,即以TLO作计数器,以THO作预置寄存器。初始化时把计数
初值分别装入TLO和THO中。在初始化时,8位计数初值同步装入TLO和THO中。
当TLO计数溢出时,置位TFO,同步把保留在预置寄存器THO中的计数初值自动
加载TLO,然后TLO重新计数,如此反复循环。
串口工作方式fosc(MHz)SMOD定时器T1
及波特率(b/s)C/T工作方式初值
方式162.5K12102FFH
19.2K11.0592102FDH
960011.0592002FDH
480011.0592002FAH
240011.0592002F4H
12001L0592^002E8H
波特率与与定期器1的对应关系
在本次设计中,8051单片机时钟振荡频率为11.0592MHz,选用定期器T1模
式2作波特率发生器,波持率为9600波特。
上位机功能实现与界面设计
上位机界面使用C++中的JMFC类库编写的I,通过MSComm控件实现
串行通信。
上位机界面
男用电管理系统
管理员权限
与下位机通信程序流程图
5.试验运行成果及调试
通过多次得运行程序及调试,使得上位机和下位机的I功能实现较
为完整,尤其是MFC界面的充值电费和查询顾客信息日勺设计,愈
加人性化。下位机很好H勺完毕了对于蜂鸣器、工作灯及数码管口勺
控制显示。上位机和下位机日勺串行通信也很成功。
6.试验设计总结及感想
本次设计试验的综合性较强,诸多知识都需要我们自己查资
料获得,这给我们设计的过程带来了极大的挑战。在下位机程序
日勺编写上,我们参照了教材上读写IC卡时模块,在主函数上通
过中断进行对应操作。在上位机的编程上,我们倾注了很大的精
力,参照了诸多书籍,使得MFC界面能很好地运行及与下位机连
接。通过本次口勺设计试验,我们不仅学到了有关51单片机的基
础知识,同步也掌握了许多有关软件的1操作,如DXP日勺绘图,
KeilUvision的JC语言编程,MFC的面板设计及与串口通信口勺模
块设计。当然,在平时的讲课及试验过程中,三位老师日勺协助和
辅导给了我们很大的鼓励和信心。谢谢!
7、参照资料
L王建校、张虹、金印彬编著《电子系统设计与时间试验指导
书》西安交通大学出版社
2.王建校杨建国等编著《51系列单片机及C51程序设计》科
学出版社2023.4
3.侯殿友编著《单片机C语言程序设计》人民邮电出版社
2023.11
8.附录
(1)下位机源程序:
#nclude<stdio.h>
#nclude<absacc.h>
#nclude<reg52.h>
#nclude<intrins.h>
#defineSEGMENTXBYTE[OXBFFF]
#defineBIT_LEDXBYTE[0X7FFF]
#definefosc11.0592
#definetimeO2500
sbita=P3A3;
sbitb=P3A4;
sbitc=P3A5;
sbitSCL_IC_CARD=P1A5;
sbitSDA_IC_CARD=P1A6;
sbitzhuangtai=PlAl;
sbitzaixian=PlA4;
sbitWPICCARD=P1A7;
sbitwarning=PlAO;
intsw=0,control2=0;
unsignedchardatadisplay_bit;
unsignedchardatatimeO_h,timeO_l;
unsignedintidatatimeO_times;
unsignedchardatzcontrolzcontrol1;
unsignedintsum,suml,sum2,sum3/sum4;
bdatacharcom_data;
sbitmos_bit=com_dataA7;
sbitlowbit=comdataAO;
unsignedcharget_code(unsignedchari);
voiddisplay(void);
unsignedchardatadisplay_buffer[8],buffer[4];
voiddelay(intn);
voidxianshif);
voidlnit_Com(void);
unsignedcharrd_24c01(chara);
voidwr_24c01(chara,charb);
voidchushif);
voidrd_kahao();
voidrd_name();
voidrd_left();
voidrd_class();
voidjifei();
voidrd_add();
〃内部地址分派〃
//0-7:识非法卡的密码;
//1O-13;余额;
//14-17:卡号;
//20-30:名字;
//30-31:权限等级;
main()
unsignedcharij;
EA=1;
EXO=ETO=ES=1;
while(lzaixian);
7h(jangtai=0;
chushi();
lnit_Com();〃串口初始化
while(l)
{
if(zaixian==O)
(
zhuangtai=l;
}
elseif(zaixian==l)
zhuangtai=O;
WPICCARD=1;
for(i=0;i<=7;i++)〃读取并校验密码,若为非法卡,报警
(
j=rd_24c01(i);delay(250);
break;
)
if(i<8)
(
warning=0;〃蜂鸣器报警
delay(lOOO);
warning=l;
)
if(zaixian==l&&controll==l)
jifei();
xianshi();
controll=0;
)
if(control==l)
{
if(sw==l)
rd_kahao();
elseif(sw==2)
rd_name();
elseif(sw==3)
rd_left();
elseif(sw==4)
rd_class();
elseif(sw==5)
rd_add();
control=0;
)
}
)
)
voidchushi()
unsignedcharmJ;
unsignedcharname[5];
name[0]='t';
name[l]='o';
name[2]='n,;
name[3]='g';
for(m=0;m<=7;m=m+l)
{
wr_24c01(m/m*m);
delay(250);
}〃将初始信息写入IC卡(使IC卡成为合法卡);
wr_24c01(10z5);
delay(250);
wr_24coi(11,0);
delay(250);
wr_24c01(12,0);
delay(250);
wr_24coi(13,0);
delay(250);
〃这是卡里剩余电量;
wr_24c01(14,l);
delay(250);
wr_24c01(15z2);
delay(250);
wr_24c01(16,0);
delay(250);
wr_24c01(0,5);
delay(250);
〃这是卡日勺编号;
for(i=0;i<4;i++){
wr_24c01(i+20,name[i]);
delay(250);
}〃写入姓名;存在name[10]+;
wr_24col(30,0);
delay(250);
wr_24c01(31/0);
delay(250);
〃这是卡的权限等级;
)
voidrd_kahao()
(
unsignedcharj;
for(j=0;j<4;j++)
(
display_buffer[j]=rd_24c01(j+14);
delay(250);
)
for(j=0;j<4;j++)
SBUF=display_buffer[j]+0x30;
while(!TI);
TI=O;
)
}
voidrd_name()
{
unsignedcharj;
for(j=0;j<4;j++)
{
display_buffer[j]=rd_24c01(j+20);
delay(25O);
)
for(j=0;j<4;j++)
SBUF=display_buffer[j];
while(ITI);
TI=O;
)
)
voidrd_left()
(
unsignedcharj;
for(j=0;j<4;j++)
{
display_buffer[j]=rd_24c01(j+10);
delay(25O);
)
for(j=0;j<4;j++)
{
SBUF=display_buffer[j]+0x30;
while(!TI);
TI=O;
)
)
voidrd_class()
(
unsignedcharj;
for(j=0;j<2;j++)
(
display_buffer[j]=rd_24c01(j+30);
delay(250);
)
for(j=0;j<2;j++)
{
SBUF=display_buffer[j]+0x30;
while(ITI);
TI=0;
)
)
voidjifei()〃减1计费函数
unsignedchari;
sum=0;
for(i=0;i<4;i++)
{buffer[i]=rd_24c01|i+10);delay(250);}
sum=1000*buffpr[0]+100*huffpr[1]+1O*huffpr[?]+huffpr[.^];
if(sum>0)
(
sum=sum-l;
for(i=0;i<4;i++)
{
buffer[3-i]=sum%10;
sum=sum/10;
)
xianshif);
for(i=0;i<4;i++)
{wr_24c01(i+10,buffer[i]);delay(250);}
}
〃delay(600);〃根据需要调整
)
voidrd_add()
(
unsignedchari;
sum4=0;
sum3=0;
for(i=0;i<4;i++)
{buffer[i]=rd_24c01|i+10);delay(250);}
sum4=1000*buffer[0]+100*buffer[l]+10*buffer|2]+buffer[3];
sum3=(int)(dat-'O');
sum3=sum3+sum4;
for(i=0;i<4;i++)
(
buffer[3-i]=sum3%10;
sum3=sum3/10;
)
xianshi();
for(i=0;i<4;i++)
{wr_24c01(i+10,buffer[i]);delay(250);}
〃delay(600);〃根据需要调整
)
voidinterO(void)interrupt0〃开关触发中断,分别显示卡号和余额
(
unsignedchari;
if(a==O)
{
for(i=0;i<4;i++){buffer1]=rd_24coi(i+14);delay(250);}〃开关SI触发中断,显示卡号
xianshi();
}
elseif(c==O)
for(i=0;i<4;i++){buffer[i]=rd_24c01(i+10);delay|250);)〃开关S2触发中断,显示
余额
xianshif);
}
else
(
controll=l;
}
)
voidinter4(void)interrupt4
{if(RI==l)
{
RI=O;
dat=SBUF;
control=l;
if(dat==,a')
sw=l;〃读卡号
elseif(dat==,b')
sw=2;〃读顾客名
elseif(dat==,c')
sw=3;〃读余额
elseif(dat=='d')
sw=4;〃读权限等级
elseif(dat>='0'&&dat<='9')
sw=5;〃充值电费
)
)
〃******如下为|C卡读写有关程序*****
voidstart()〃启动读写时序
{
SDAICCARD=1;
SCL_IC_CARD=1;
SDAICCARD=0;
SCL_IC_CARD=O;
)
voidstop()〃停止操作
SDA-ICMMCARD=O;,
SCLJC_CARD=1;
SDA_IC_CARD=1;
)
voidack()〃应答函数
{
SCL_IC_CARD=1;
SCL_IC_CARD=O;
)
voidshift8(chara)//8位移位输出
(
dataunsignedchari;
com_data=a;
for(i=0;i<8;i++)
(
SDA_IC_CARD=mos_bit;
SCLJC_CARD=1;
SCL_IC_CARD=O;
com_data=com_data*2;
}
)
unsignedcharrd_24c01(chara)〃读IC卡函数
(
dataunsignedcharizcommand;
SDA_IC_CARD=1;
SCL_IC_CARD=O;
start();
command=160;
shift8(command);
ack();
shift8(a);
ack();
start();
command=161;
shift8(command);
ack();
SDA-ICMMCARD=1;,
for(i=0;i<8;i++)
{
com_data=com_data*2;
SCL_IC_CARD=1;
low_bit=SDA_IC_CARD;
SCL_IC_CARD=O;
)
stop();
return(com_data);
)
voidwr_24c01(chara,charb)〃写IC卡函数
(
dataunsignedcharcommand;
WPJC_CARD=O;
_nop_();
SDA_IC_CARD=1;
SCL_IC_CARD=O;
start();
command=160;
shift8(command);
ack();
shift8(a);
ack();
shift8(b);
ack();
stop();
_nop_();
WPJC_CARD=1;
}
voidxianshi()//
(
BIT_LED=O;
TMOD=OX21;
time0_times=65336-time0*fosc/12;
timeO_h=(timeO_times/256);
timeO_l=(timeO_times%256);
THO=timeO_h;
TLO=timeO_l;
TRO=1;
display_bit=0x01;
)
//***"如下为数码管动态显示有关程序*****
voidtimeOJnt(void)interrupt1〃动态显示控制中断
(
THO=timeO_h;TLO=timeOJ;
display!);
}
unsignedcharget_code(unsignedchari)
{
unsignedcharp;
switch(i)
case0:p=0x3f;break;
case1:p=0x06;break;
case2:p=0x5b;break;
case3:p=0x4f;break;
case4:p=0x66;break;
case5:p=0x6d;break;
case6:p=0x7d;break;
case7:p=0x07;break;
case8:p=0x7f;break;
case9:p=0x67;break;
default:break;
}
return(p);
)
voiddisplay(void)
unsignedchari;
switch(display_bit)
case1:i=O;break;
case2:i=l;break;
case4:i=2;break;
case8:i=3;break;
default:break;
)
BIT_LED=O;
SEGMENT=get_code(buffer[3-i]);
BIT_LED=display_bit;
if(display_bit<0x08)
display_bit=display_bit*2;
else
display_bit=0x01;
)
voidlnit_Com(void)〃功能:串口初始化,波特率9600,方式1
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=OxFd;
TL1=OxFd;
TRI=1;
)
voiddelay(intn)〃延时函数
(
inti;
for(i=l;i<=n;i++){;}
)
上位机源程序:
//lllDIg.cpp:implementationfile
//
#nclude"stdafx.h"
include"lll.h"
#nclude"lllDIg.h"
#fdefDEBUG
#definenewDEBUG_NEW
#jndefTHIS_FILE
staticcharTHIS_FILE[]=_FILE_;
#endif
/〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃〃〃〃〃//〃〃〃〃〃〃〃/
//CMylllDIgdialog
CMylllDlg::CMylllDlg(CWnd*pParent/*=NULL*/)
:CDialog(CMylllDlg::IDD,pParent)
{
//{{AFX_DATA_INIT(CMylllDlg)
m_namedata=_T("");
m_nodata=_T("");
m_leftdata=_T("");
m_strText=_T("");
m_classdata=_T("");
m_adddata=_T("");
//}}AFX_DATA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026重庆永川区中山路街道办事处玉清社区招聘全日制公益性岗位人员1人备考题库及参考答案详解【夺分金卷】
- 2206北京大学未来技术学院招聘劳动合同制人员1人备考题库及完整答案详解【夺冠】
- 2026北京首华物业管理有限公司招聘2人备考题库【典优】附答案详解
- 兰州市第六十六中学分层作业册编审制度
- 公路安全生产会议制度
- 2026广东省广晟控股集团有限公司总部管理人员岗位选聘4人备考题库及参考答案详解1套
- 2026北京市丰台区东铁匠营街道蒲黄榆社区卫生服务中心 护士岗位招聘备考题库【易错题】附答案详解
- 2026苏州创元集团财务有限公司招聘2人备考题库附参考答案详解【能力提升】
- 公司实行四级防火安全检查制度
- 2026河南郑州市第一〇七高级中学招聘23人备考题库【培优】附答案详解
- 4-07-03-02 国家职业标准劳动关系协调师 (2025年版)
- 预防青少年药物滥用-主题班会课件
- 第5单元 你是我的镜子(教学设计)-四年级心理健康上学期同步备课系列(浙教版)
- TPM-计划保全实践手册
- 劳动争议处理方案
- 江苏省扬州市扬州梅岭教育集团2024-2025学年八年级下学期3月月考语文试题(原卷版+解析版)
- 统编历史七年级下册(2024版)第8课-北宋的政治【课件】h
- 二零二五年度购车绿色出行积分协议书
- Unit15Itsamysterytome!(课件)新概念英语青少版2A
- 【MOOC】市场调查与研究-南京邮电大学 中国大学慕课MOOC答案
- 插画教学课件教学课件
评论
0/150
提交评论