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

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

《微机接口课程设计报告地铁收费系统.doc》由会员分享,可在线阅读,更多相关《微机接口课程设计报告地铁收费系统.doc(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 . 主控机处理程序 接收下位机传送过来的卡号和站点编号,通过卡号查询数据库得到该卡号的信息(包括余额和状态),如果是出站则计算余额并返回给

12、下位机,同时改变该卡状态为出站.如果是进站,则登记为进站,同时直接返回当前余额给下位机.程序如下: (其中status表示进站还是出站)void CKou1Dlg:OnOnCommMscomm1() m_recv=;UpdateData(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=var

13、iant_ins;len=safearray_ins.GetOneDimSize();long j=0;short recvicedate=0;safearray_ins.GetElement(&j,&recvicedate);/将接收数据显示出来char * c3=new char10;CString a3(itoa(recvicedate,c3,10);m_recv+=a3+ ;/查询数据库,获取该卡号信息_variant_t Raffected,cardnum0,count0,status0;int cardnum=(recvicedate&0x78)3;CString y2,str0;

14、str0.Format(%d,cardnum);y2=select * from card where cardnum=+str0;m_pRset-Open(_variant_t(LPCTSTR)y2),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);CString str;while (!m_pRset-adoEOF)cardnum0=m_pRset-GetCollect(cardnum);count0=m_pRset-GetCollect(count);status0=m_pRset-GetC

15、ollect(status);/str=(LPCTSTR)(_bstr_t)cardnum0;/GetDlgItem(IDC_EDITID)-SetWindowText( str );/m_pRset-PutCollect(_variant_t(cardnum),_variant_t(long)2000);/UpdateWindow();m_pRset-MoveNext();Sleep(100);/(*cardcurrent).cardnum=(short)vid;/(*cardcurrent).count=(short)vpsw;/(*cardcurrent).zhan =(short)vm

16、on;m_pRset-Close(); short yue=-1;if(short)status0!=-1)int zhan2=recvicedate&0x7;yue=(short)count0-abs(short)zhan2-(short)status0)*10);/重置status为-1status0=(short)-1;elsestatus0 =(short)(recvicedate&0x7);yue=(short)count0;if(yue=0)/先回写数据库,改变statusCString yue2,status2,sql;yue2.Format(%d,yue);status2.Fo

17、rmat(%d,(short)status0);sql=update card set count=+yue2+,status=+status2+ where cardnum=+str0;m_pConnection-Execute(_bstr_t(LPCTSTR)sql),&Raffected,adCmdText); /发送余额到客户端CByteArray sendArr; sendArr.SetSize(1); sendArr.SetAt(0, yue); CKou1Dlg:m_com1.SetOutput(COleVariant(sendArr);/将发送信息显示出来char * c=ne

18、w char10;CString a(itoa(yue,c,10);/char * c2=new char10;/CString a2(itoa(str0,c2,10);m_edit+=向卡号为:+str0+发送余额:+a+元nr ; UpdateData(false);break;default:break;(7) . 部分程序截图主控机接受下位机发送的卡号等数据,同时查询数据库返回该卡余额,主控机在进行充值操作的截图四 . 实验心得 这次接口的课程设计可获收获颇大, 首先是更加清晰地认识了一些接口芯片的使用,比如说8255,8250芯片, 最重要的是学会了两微机com口的通讯,这是本次课程

19、设计的关键!觉得以前接口的实验还是蛮简单,这一次算是系统地又复习了遍一些基础知识.其次因为对C+语言不是很熟悉,也算是学习C+,下位机程序中用到了线程来实现监听,同时也控制了不会重复发送相同数据,这一点实现了下位机的主动查询,而无需人工按下按钮.觉得这段代码写的还可以,也是本次实验的收获之一.同时程序也用到了数据库,不过比较基本,但也到位了,报警也采取了响铃的方式,总体来说比较完美,自己也从中学到了不少东西,在这里我为我的另外3个同伴感到很欣慰,也是大家一起合作努力的结果,也非常感谢老师的指导!五 . 参考文献 单片机原理及应用 中国铁道出版社 现代微机系统与接口技术 高等教育出版社 微机接口实验指导书 华中科技大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号