📄 readme2.txt
字号:
adr 地址偏移量(0-255)
len 读数据的长度(1-256)
*s 写入数据的缓冲区指针
说明:用于SIM441828(4页),SIM443242(1页),ATMEL16K(8页),AT24C64(32页)卡.
/* AT45D041卡专用函数(4兆位卡) */
8.void cardread_4m(xdata long add,xdata int len,xdata char *buf)
功能:从卡上add地址读len字节数据到缓冲区buf中.
参数:add 读卡地址(0--540671)
len 读卡长度(1--65535)
buf 数据接收缓冲区
说明:add是卡上的连续地址,因为卡的存储容量是540672字节(2048*264),所以
地址是0--540671.读卡长度理论上一次能读写64K(即65535)字节,但是考虑
到C51指针的寻址范围以及数据库会占用大部分存储空间,所以len不能太大.
9.void cardwrit_4m(xdata long add,xdata int len,xdata char *buf)
功能:将buf中长度为len字节的数据写到卡上地址add开始的地方.
参数:add 写卡地址(0--540672)
len 写卡长度(1--65535)
buf 待写数据缓冲区
/*工商卡专用函数*/
10.char cardcomp_gs(xdata char add,xdata char *buf)
功能:比较卡上各区的密码
参数:add ( 1:全卡安全代码; 2:第一区用户密码; 3:第一区擦除密码;
4:第二区用户密码; 5:第二区擦除密码;
6:第三区用户密码; 7:第三区擦除密码;
8:第四区用户密码; 9:第四区擦除密码; )
buf: 密码字符串
返回:该密码的错误计数器状态(0xFF,比较正确;其它值错误)
说明:指针buf可以指向CODE区或XDATA区.
举例:①xdtat char ma[10];
... ...
keys(ma); /*从键盘接收密码串*/
if(!cardcomp_gs(1,ma))
putstr("密码正确!");
else
putstr("密码错误!");
... ...
②... ...
cardcomp_gs(1,"1234"); /*密码串放在CODE区中,为常数*/
... ...
11.void cardread_gs(xdata int add,xdata int len,xdata char *buf)
功能:从卡上add地址读len字节数据到缓冲区buf中.
参数:add 读卡地址(0--2048)
len 读卡长度(1--2048)
buf 数据接收缓冲区
12.void cardwrit_gs(xdata int add,xdata int len,xdata char *buf)
功能:将buf中长度为len字节的数据写到卡上地址add开始的地方.
参数:add 写卡地址(0--2048)
len 写卡长度(1--2048)
buf 待写数据缓冲区
13:char jmdo_gs(xdata char area)
功能:产生卡上各区的加密校验码
参数:area 产生校验码的区号(1-4)
返回:加密的结果(255:没有加密芯片或加密芯片不工作;
0:区号超出范围
1:加密正确)
14:char jmcheck_gs(xdata char area)
功能:检验卡上各区的加密算法
参数:area 检验校验码的区号(1-4)
返回:校验的结果(255:没有加密芯片或加密芯片不工作;
0:区号超出范围
1:检验正确)
/* ATMEL102卡专用函数 */
15.char cardread_102(xdata char add,xdata char len,xdata char *buf);
功能:从卡上add地址读len字节数据到缓冲区buf中.
参数:add 读卡地址(0--177)
len 读卡长度(1--177)
buf 数据接收缓冲区
16.char cardwrit_102(xdata char add,xdata char len,xdata char *buf);
功能:将buf中长度为len字节的数据写到卡上地址add开始的地方.
参数:add 写卡地址(0--177)
len 写卡长度(1--177)
buf 待写数据缓冲区
说明:应用一区地址为22--85,应用二区地址为92--155.
17.char cardcomp_102(xdata char n,xdata char *buf);
功能:102卡密码比较
参数:n 密码长度(该处固定为4)
buf 密码串
返回:密码计数器的值.比较正确时是0xFF(即十进制的255),连续错4次后卡烧毁.
说明:用于ATMEL102卡.
密码串c可以是一个指针变量,也可以是一个确定的串.
举例:①xdata char s[10];
...
poweron();
keys(s);
cardcomp_102(4,s);
poweroff();
...
②...
poweron();
cardcomp_102(4,"F0F0");
poweroff();
...
/* CPU卡操作函数 */
18.char cpu_poweron(xdata char *s);
功能:CPU卡上电
入口参数: *s 返回数据指针
返回值: 0 卡片没有应答;
1 效验错误;
其他值 返回数据长度;
19.char cpu_command(xdata char *s1,xdata char n,xdata char *s2);
功能:CPU卡指令操作
入口参数: *s1 指令地址指针;
n 命令长度;
*s2 返回数据指针;
返回值: 0 卡片没有应答;
1 效验错误;
其他值 返回数据长度;
20.void cpu_off(void);
功能:CPU卡下电
21.void en_des(xdata char *s1,xdata char *s2,xdata char *s3);
功能:DES加密
参数:*s1 密码地址指针
*s2 明文地址指针
*s3 返回密文地址指针
22.void de_des(xdata char *,xdata char *,xdata char *);
功能:DES解密
参数:*s1 密码地址指针
*s2 密文地址指针
*s3 返回明文地址指针
五.数据库操作函数
1.void libopen(xdata char n)
功能:打开第n个数据库作为当前库.
参数:n 数据库号(0:表示第一数据库;1:表示第二数据库)
说明:如果参数n超过1,则将第一数据库作为当前库.
2.int libsumr(void)
功能:返回当前数据库的记录总数.
3.char libsumf(void)
功能:返回当前数据库的字段总数.
4.int libgetr(void)
功能:返回当前的记录序号.
说明:记录序号从0开始,表示第一个记录,下同.
5.char libgetf(void)
功能:返回当前的字段序号.
说明:字段序号从0开始,表示第一个字段,下同.
6.char libgetl(void)
功能:返回数据库个数.
7.char libset(xdata int n,xdata char n)
功能:设置当前记录序号和字段序号.
参数:n 记录序号
m 字段序号
返回:0 序号设置正确
1 序号超出范围
说明:如果序号超出范围,则设置为当前库的第一记录的第一字段.
8.char libread(xdata char *s)
功能:读当前字段.
参数:s 存放读出内容的缓冲区指针
返回:读出的内容长度.同时系统变量LIBN,LIBL中分别放字段类型和字段长.
说明:读出的数据串已将字段中实际数据头尾空格删除,故返回的长度值小于或等于
当前字段的字段长.如果字段为空,则返回0.
9.void libwrite(xdata char *s)
功能:写当前字段.
参数:s 存放欲写内容的缓冲区指针
说明:该函数将根据数据库中当前字段的类型及长度对写入数据作相应调整.
六.计算类函数
1.char stradd(xdata char *d,xdata char *s,xdata char n)
功能:两个数字字符串相加(减).
参数:d 第一个串指针
s 第二个串指针,计算结果也保存此处.
n 字符串长度
返回:0 计算成功
1 溢出
说明:字符串可以带有'-'号及小数点.字符串的格式要求左对齐,长度不及n的在余
下位置赋空字符(0x20).计算的结果程序会自动按此格式办理.
2.char strsub(xdata char *d,xdata char *s,xdata char n)
功能:两个数字字符串相减.
参数:d 第一个串指针
s 第二个串指针,计算结果也保存此处.
n 字符串长度
返回:0 计算成功
1 溢出
说明:字符串必须是无符号的.字符串格式同上.
3.char strmul(xdata char *d,xdata char *s,xdata char n)
功能:两个数字字符串相加乘.
参数:d 第一个串指针
s 第二个串指针,计算结果也保存此处.
返回:0 计算成功
1 溢出
说明:字符串可以带有'-'号及小数点.字符串格式同上.
4.char strdiv(xdata char *d,xdata char *s,xdata char n)
功能:两个数字字符串相加除.
参数:d 第一个串指针
s 第二个串指针,计算结果也保存此处.
返回:0 计算成功
1 溢出
说明:字符串可以带有'-'号及小数点.字符串格式同上.
七.通讯接口函数
1.void comini(xdata char band,xdata char par)
功能:初始化通讯端口
参数:band 波特率,说明如下:
#define BAND38 255 /*38400波特率 */
#define BAND96 252 /* 9600波特率 */
#define BAND48 248 /* 4800波特率 */
#define BAND24 240 /* 2400波特率 */
#define BAND12 224 /* 1200波特率 */
par 校验
0 偶校验
1 奇校验
2 无校验
说明:在各种方式下,数据都包括1位起始位,8位数据位,1位停止位.
注意,在调用其他函数时有可能把通讯口的初始化状态破坏.如key()函数.
2.char comread(xdata char *c)
功能:从通讯口读一字符
参数:*c 接收的数据
返回:0 接收到一个数据
1 奇偶校验错
3.void comwrit(xdata char c)
功能:向通讯口写一字符
参数:c 发送的数据
八.其他函数
1.char hi(xdata char *s)
功能:返回指针的地址高位.
参数:s 指针
2.char lo(xdata char *s)
功能:返回指针的地址低位.
参数:s 指针
3.void memncpy(xdata char *d,xdata char *s,xdata int len)
功能:从s拷贝len字节数据到d.
参数:d 目的地址指针
s 源地址指针
len 长度
说明:该函数可以完成字符串,结构等多种类型的数据拷贝.以结构为例:
xdata struct exam{
char s1[10];
char s2[20];
int i;
char c;
};
...
xdata struct exam des,sou;
...
memncpy(des.s1,sou.s1,33);
4.void delay(xdata int n)
功能:延时程序,单位毫秒.
参数:n n毫秒(1--65535)
5.void run(xdata char n)
功能:调用某些系统功能模块,如:电子钟模块,通讯模块.
参数:n 模块号,说明如下:
#define CLOCK 0 /*电子钟模块*/
#define TRANS 1 /*通讯模块*/
6.char itos(xdata int i,xdata char *s)
功能:将整型数转换为ASCII码串.
参数:i 整型数
*s 转换后的ASCII串
返回:ASCII串的长度.
7.int stoi(xdata char n,xdata char *s)
功能:将ASCII码数字串转换为整数.
参数:n 串长度
*s 串
返回:转换后的整数.
8.char ltoa(xdata long l,xdata char *s)
功能:将长整数转换为ASCII码数字串.
参数:l 长整数
*s 转换后的ASCII数字串
返回:串长度
9.void htoa(xdata char h)
功能:将一字节的十六进制数据转换为两字节ASCII码.
参数:h 待转换的数据
返回:两字节ASCII码放入系统变量HEXA和HEXB
举例:参数h为0x1A,则转换后HEXA为'1',HEXB为'A'.
10.char atoh(xdata char a,xdata char ba)
功能:将两个ASCII码转换为一个8位十六进制数.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -