总结
总结
在了解研究8051单片机的结构特点及其相关的设计实例后,本次设计充分利用其相关的功能,开发设计了IC卡读写器。另外,在软件设计过程中,主要程序代码使用C编写,大大加快了开发进程与后期的可维护性提升。设计主要完成了以下工作:
1.深入了解了8051单片机的性能特点、开发工具和应用领域
2. 使用PROTEL软件绘制完成了系统完整的电路图,实现了基于51单片机的IC卡读写器的设计。
3.以C语言为主,完成了相应的软件设计,达到了预期的效果。 4.最终完成了基于51单片机的IC卡读写器的设计:以51单片机为核心,结合AT24C02作为外部存储器,存放关键信息,液晶SMG12232B-2作为显示系统。 实现了IC卡与单片机的通信,有51单片机控制数据传输过程,实现读卡和写卡操作。
存在的问题及今后的改进:
1.液晶显示部分还未调试成功-----不能正常显示。 2.具体的应用有待于完善。
- 41 -
致谢
致谢
本来对51单片机了解甚少,但是通过本次设计,加深了我对51单片机知识的了解,使我学到了许多原来所未涉及的东西,并且学会了一些软件的使用。
在此期间,我得到了我的导师卢恒炜老师的细心指导,本论文也是在卢老师的极大帮助下完成的。卢老师除了亲自面授辅导,还通过电子邮件、电话等各种通信方式给予我各方面的指导,并且无私的提供各种相关的资料,帮助我解决许多问题。卢恒炜老师严谨的治学态度、敏锐的洞察力和实事求是的工作作风使我受益匪浅,卢老师广博的学识和严于律己、宽以待人的生活作风使我终身难忘。对卢老师的精心指导再次表示我衷心的感谢。
同时在毕业论文期间,我还得到了电子信息科学与技术教研室实验室全体老师的关心和支持,也在此表示由衷的感谢。
感谢我的同组同学何智锋、宋鹏飞、宋超、薛岩、陈健锋等几位同学,在此次设计中他们给了我很大帮助。大家一起研究硬件的选取、程序的设计,一起提出问题,一起解决问题,使我感到学习的快乐和同学之间的深厚友谊,这将给我留下最美好的回忆。
感谢审阅此论文的各位老师,感谢你们的宝贵意见。
感谢我的父母,是他们的关心和支持,使我能顺利完成毕业设计,感谢所有关心和帮助我的人们。
- 42 -
参考文献
部分程序清单
一、SLE4442卡操作程序清单: #include #include
#define RMM_COMM 0x30 //#define UMM_COMM 0x38 //#define CVD_COMM 0x33 //#define RSM_COMM 0x31 //#define USM_COMM 0x39 //#deifne RPM_COMM 0x34 //#deifne WPM_COMM Ox3c //Sbit RST=P1^4; Sbit CLK=P1^5; Sbit IO=P1^6;
#deifne uchar unsigned char
附录
读主存命令字写密码存储区校验密码 读密码存储区写密码存储区读保护存储区写保护存储区- 43 -
附录
#define uint unsigned int 1.延时子程序 Void delay()
{_nop_();_nop_();_nop_();_nop_();_nop_();} 2.SLE4442卡开始条件子程序 void start()
{IO=1;delay();CLK=1;delay();IO=0;delay();CLK=O;} 3.SLE4442卡结束条件子程序 Void stop()
{IO=0;delay();CLK=1;delay(}:IO=1;delay();}
4.SLE4442卡发送一个字节子程序 uchar InByte(void) {uchar a,i; A=0;IO=1;
for(i=8;i>O;i--) {a=a﹥﹥l;
if((uchar)IO) a=0x80; CLK=1; delay(); CLK=O; delay();} return(a); }
5.SLE4442卡接收一个字节子程序 void OutByte(uchar ch) {uchar i;
for(i=8;i>O;i--) {I0=(bit)(ch&0x01); delay(); CLK=1; delay(); CLK=O; ch=ch﹥﹥l;} }
6.SLE4442卡复位子程序 void reset(uchar data*pt) {uchar i;
RST=1; delay(); CLK=1; delay(); delay(); CLK=O; delay(); RST=0; i=4;
do{*pt=InByte();
- 45 -
附录
pt++;}while(--i); }
7.SLE4442卡跳出子程序 void ic_break() {CLK=O; delay(); RST=1; delay(); delay(); RST=O; }
8.SLE4442卡处理模式子程序 void Procee_Mod(void) {uint i;
CLK=O;delayQ; IO=1;IO=0;
for(i=620;i>O;i--) { CLK=1; delay(); CLK=O; delay(); if(IO) break; } }
9.CPU向SLE4442卡发送命令子程序 入口: a=命令字,b=地址,c=数据
void SendComm(uchar a,uchar b,uchar c) {
starto; OutByte(a);OutByte(b);OutByte(c);stop(); }
10.CPU读SLE4442卡n个字节子程序 入口:pt=起始地址,i=数据个数
Void Read_Mod(uchar data*pt,uchar i) { CLK=O; delay();
do
{ *pt=InByte(); //读入一个字节 Pt++; //指针加一
}while(--i); //计数器减一,判断 }
11.CPU读SLE4442卡主存储区子程序
void Rmm(uchar cardAdd,uchar*pt,uchar i) {SendComm(RMM_COMM,cardAdd,O); Read_Mod(pt,i);ic_break(); }
void Utmm(ucharCardAdd,uchar data*pt) {SendComm(UMM_COMM,CardAdd,*pt); Proce_Mod();
- 46 -