你好!
1楼正解,
单片机没法读写sim卡,
只能借助周边设备,
比如GSM模块.
通过GSM模块来读写Sim卡.
如有疑问,请追问。
读写都只能按块来,也就是只能用起始地址,要从中间你可以把开始的那些数据丢弃就可以了。
如果你纯以直接物理地址访问的话需要30根地址线。51本身提供的地址线16根,其余的14根可以通过以下几种方法得到:
1、由P1和P3直接提供,这样的话就最多只有2个IO可用,其余作为地址线访问内存。当然高位地址(大于64K)需要手动特殊处理比如访问0003ffffH可以这样操作:
MOV P3,#00H
MOV P1,#03H
MOV DPTR,#0FFFFH
MOVX A,@DPTR
2、扩展两个8位口来提供高位地址,这样在硬件上做些处理,可以节约一些IO口,这种方式软件处理起来麻烦一些。这里就不做例子了。
貌似应当在一个子程序中先填满一屏内存,然后切换显示内存指针会好一些.你这是在动态写显存,但是由于速度主频都不够,被更高级的中端抢走了寄存器.看看似乎很有规律.
最好选择屏幕带有足够内存的显示器.51速度低,刷这么大的屏有困难.
1G以上。51单片机读写1G以上内存卡,51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。SD存储卡是一种基于半导体快闪记忆器的新一代记忆设备,由于它体积小、数据传输速度快、可热插拔等优良的特性,被广泛地于便携式装置上使用,例如数码相机、平板电脑和多媒体播放器等。
你现在的IC卡 是不是 就是单片机的EEPROM ,如果是的话 那么 按键开启和停止键就用来控制EEPROM的 WR的使能 修改的话 由于不能频繁修改EEPROM所以 我建议你 其他按键修改金额后 用另外一个按键来确定修改,这样 可以一次性把修改后的金额放入EEPROM, 基本上充值都是加法运算,也就是说 点了确定键后 你先计算 然后在写到EEPROM,如果 IC卡不是单片机自带的EEPROM那么 开启和停止键就用来控制 IC 的 CS 也就是说你可以用4个I/O口 设置4个按键,然后 通用4个按键子程序 分别处理,按键程序可以用扫描法 我这里给你一个读键的子程序 键值的子程序自己写吧 。
void GetKey()//键扫描子程序,用于获得键值
{
bank1 static unsigned char nSetp=0;
bank1 static unsigned char nBufferedKey;
switch(nSetp)
{
case 0://去抖动
if (wDelay20)//5MS延时
nSetp=1;
break;
case 1:
if ((RA5==0)(nBufferedKey==1)) //存键值
nSetp=3;
else if ((RA4==0)(nBufferedKey==2))
nSetp=3;
else if ((RA3==0)(nBufferedKey==3))
nSetp=3;
else if ((RA2==0)(nBufferedKey==4))
nSetp=3;
else nSetp=2;
break;
case 2:
if (RA5==0)//判断是否按键按下,并记录第一次按键情况 RA5功能键
{
nBufferedKey=1;
wDelay=0;
nSetp=0;
}
else if (RA4==0) //+键 {
nBufferedKey=2;
wDelay=0;
nSetp=0;
}
else if (RA3==0) //-键
{
nBufferedKey=3;
wDelay=0;
nSetp=0;
}
else if (RA2==0)// 确定键
{
nBufferedKey =4;
wDelay=0;
nSetp =0;
}
else
nBufferedKey=0;
break;
case 3:
if (RA5==1 RA4==1 RA3==1RA2==1)//等待键释放
{nKey=nBufferedKey;br br nSetp=0;}
default:
break;
}
}
//上面用到的变量自己定义下 RA5 RA4 RA3 RA2是4个按键的I/O口,通过判断nKey的值来判断按键子程序
主程序或中断程序可以一直扫描这个getkey()程序
然后在switch(nKey) 下就OK了
51单片机读卡的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:51单片机读卡