微机接口课程设计报告地铁收费系统

上传人:工**** 文档编号:429694461 上传时间:2023-11-22 格式:DOC 页数:10 大小:102.50KB
返回 下载 相关 举报
微机接口课程设计报告地铁收费系统_第1页
第1页 / 共10页
微机接口课程设计报告地铁收费系统_第2页
第2页 / 共10页
微机接口课程设计报告地铁收费系统_第3页
第3页 / 共10页
微机接口课程设计报告地铁收费系统_第4页
第4页 / 共10页
微机接口课程设计报告地铁收费系统_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《微机接口课程设计报告地铁收费系统》由会员分享,可在线阅读,更多相关《微机接口课程设计报告地铁收费系统(10页珍藏版)》请在金锄头文库上搜索。

1、微机接口技术课程设计报告 设计题:地铁收费系统指导老师: 学生姓名:学号:所在班级: 网络工程一 . 课程设计目的 结合一个实际的接口技术问题在实验台上编程模拟实现。二 . 课程设计要求 由一个主控机监控和若干个下位机组成,主控机负责数据处理,下位机负责访问接口。三 . 课程设计内容及步骤 (1) 题目: 地铁收费系统 (2) 系统功能: A. 乘客进入地铁站刷卡,记录起始站点,出站也要刷卡,记录终点站,根据距离计算车费,并判断乘客是否买足了票,若票款不足,则发出警报。B. 下位机从接口上接收到卡号数据,并将该下位机的编号传到主控机,主控机保存. 当主控机再次收到该卡号的时候,计算该下位机和已

2、经存储的下位机之间的距离计算出车费,用该卡号的金额减去车费,如果大于0则扣除费用,否则报警.(3). 系统接口框图 主控机ISA总线 8250收/发时钟 TTL/232电平转换或TTL/485电平转换TTL/232电平转换或TTL/485电平转换收/发时钟 8250下位机ISA总线8255A口 B口 C口A B C口分别表示三个站点 ,每个口中1-3口为站点编号, ,4-7口记录卡号,最高位为标志位 (4) . 系统程序 主控机保存,查询,计算余额,临时保存卡号信息等程序。 主控机与下位机通信程序。 下位机与主控机通信程序。下位机访问接口程序。 (5) . 系统流程(设计)说明首先主控机启动程

3、序,开始监听下位机,一旦收到数据就进行处理,首先分割出低3位作为站点编号,中间4为作为卡号.然后主控机查询数据库,得到该卡号的信息,包括是否是第一次进站,卡上的余额等等.接下去主控机返回该卡号的余额给下位机,下位机接受到余额判断是否小于零,如果是则报警(响铃),否则显示余额,下位机不进行判断用户到底是进站还是出站.所有判断都是交给主控机,下位机还需要从接口读取数据,前3位表示站点编号,中间4位表示卡号,最高位为标志位,只有它为1时表示已经插卡并且已经ready可以读数据了.下位机读取数据后通过com通信和主机建立连接,下位机对于接口的监听是主动的,这里我们程序中开了一个线程用于专门监听读取接口

4、上的数据,而且同时设计了标志以防止反复读取,反复将同一数据发送至服务器端(主控机). (6) . 部分关键程序源码 程序包括客户端和服务器端程序 A . COM通讯: 1. 连接初始化:m_com1.SetCommPort(1);m_com1.SetInBufferSize(1024);m_com1.SetOutBufferSize(512);if(!m_com1.GetPortOpen()m_com1.SetPortOpen(true);m_com1.SetInputMode(1);m_com1.SetSettings(9600,n,8,1);m_com1.SetRThreshold(1);

5、m_com1.SetInputLen(0); 2. 发送数据 int CKou1Dlg:SendComMessage(CString msg)CByteArray sendstr;WORD sLength;sLength=msg.GetLength();sendstr.SetSize(sLength);for(int i=0;isLength;i+)sendstr.SetAt(i,msg.GetAt(i);m_com1.SetOutput(COleVariant(sendstr);return 0;3. 接收数据 void CKou1Dlg:OnOnCommMscomm1() UpdateDa

6、ta(true);VARIANT variant_ins;COleSafeArray safearray_ins;long i=0;int len;char rxdata1000;CString tmp;switch(m_com1.GetCommEvent()case 2:variant_ins=m_com1.GetInput();safearray_ins=variant_ins;len=safearray_ins.GetOneDimSize();for (i=0;iEnableWindow(false);/*HANDLE Hthread1;Hthread1=CreateThread(NUL

7、L,0,CKou1Dlg:Fun1Proc,this,0,NULL);*/AfxBeginThread(Fun1Proc,this);UINT CKou1Dlg:Fun1Proc(LPVOID lpparameter) /开线程int flag0=0;int i=0;OpenPortTalk();/system(music.exe); /播放音乐/设置控制方式/outportb(CTRL_8255,0x82); /0x303 使读a口写B 口while(1)outportb(CTRL_8255,0x82); unsigned char c=inportb(PB_8255); :Sleep(20

8、0); CString a0= 刷啊刷; if(c&0x80)=0) flag0=0; continue; if(c=flag0) /判断是否为有效数据 continue; flag0=c; CString a; a.Format(%d,(c&0x78)3); (CKou1Dlg *)lpparameter)-SetDlgItemText(IDC_EDIT1,(LPCTSTR)a);(CKou1Dlg *)lpparameter)-UpdateWindow();CByteArray sendArr; WORD wLength; /wLength = (CString)c.GetLength()

9、; sendArr.SetSize(1); /发送数据到主控机(CKou1Dlg *)lpparameter)-m_com1.SetOutput(COleVariant(sendArr);ClosePortTalk();C . 下位机数据处理 接受主控机返回的数据(账户余额),如果大于0正常,如果小于0则响铃报警 void CKou1Dlg:OnOnCommMscomm1() UpdateData(true);VARIANT variant_ins;COleSafeArray safearray_ins;long i=0;int len;char rxdata1000;CString tmp;

10、switch(m_com1.GetCommEvent()case 2:variant_ins=m_com1.GetInput();safearray_ins=variant_ins;len=safearray_ins.GetOneDimSize();long j=0;short recvicedate=0;safearray_ins.GetElement(&j,&recvicedate);/for (i=0;ilen;i+)/safearray_ins.GetElement(&i,&rxdatai);/rxdatai=0;/m_recv+=rxdata;/接收到回馈进行数据处理if(recvi

11、cedate&0x80)/余额不足,报警m_recv=余额不足,报警! ;/for(int n=0;n127)res=-128+recvicedate-128;else if(recvicedate0)res=recvicedate;char * ccc=new char10;CString a(itoa(recvicedate,ccc,10);m_recv=您的余额是:+a;UpdateData(false);break;default:break; D . 主控机处理程序 接收下位机传送过来的卡号和站点编号,通过卡号查询数据库得到该卡号的信息(包括余额和状态),如果是出站则计算余额并返回给下位机,同时改变该卡状态为出站.如果是进站,则登记为进站,同时直接返回当前余额给下位机.程序如下: (其中status表示进站还是出站)void CKou1Dlg

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号