📄 read4442.c
字号:
#include <stdio.h>
#include <intrins.h>
#include <string.h>
#include <ctype.h>
#include <setjmp.h>
//#include <reg51.h>
#include "AT89X52.h"
#include <absacc.h>
#include <Read4442.h>
#define BN 16 //数据个数
#define allow 0x0EA
#define address 0x08 //下位机机号
#define FSA_INIT 0x00
#define FSA_ADDRESS 0x01
#define FSA_DATA 0x02
uchar command_pre,command_cur;
//uhar compare_command_buffer(void);
uchar compare_command_buffer(void) reentrant;
uchar bdata flag;
sbit auto_flush=flag^1;
sbit message_disp=flag^3;
sbit message_flag=flag^2; //需刷新显示置位
uchar recv_state = FSA_INIT;
uchar recv_ctr = 0;
uchar command_buffer_cur[16]; // =
// {0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF};
uchar command_buffer_pre[16];
uchar command_buffer_OK[16] =
{0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0BF,0x0B4,0x1D,0x00,0x00,0x01,0x0C0,};
uchar command_buffer_Pin15ConnectPin16[16] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar command_buffer_Pin4ConnectPin5[16] =
{0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF};
uchar command_buffer_Pin19ConnectPin20[16] =
{0x88,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x07F,0x69,0x3B};
main()
{
init();
message_flag = 0;
message_disp = 1;
Lcd2002Init();
Lcd2002Clr(1);
Lcd2002DispStr(4,1,"UC/OS-II V2.52");
Lcd2002DispCha(12, 1, ' ');
Lcd2002DispStr(13,1,"V2.52");
while(1)
{
if(message_flag == 1)
{
message_flag = 0;
message_disp = 0;
command_pre = compare_command_buffer();
message_disp = 1;
if (command_pre == command_cur)
{
auto_flush = 0;
auto_flush = 0;
}
else
{
auto_flush = 1;
command_cur = command_pre;
}
}
if (auto_flush == 1)
switch(command_cur)
{
case 0x01:
{
// EA = 0 ;
Lcd2002Clr(1);
Lcd2002Clr(2);
Lcd2002DispStr(2,2,"No SmartCard board");
auto_flush = 0;
// EA =1;
}
break;
case 0x02:
{
// EA = 0;
Lcd2002Clr(1);
Lcd2002DispStr(7,1,"Success!");
Lcd2002Clr(2);
Lcd2002DispStr(2,2,"SmartCard board OK");
auto_flush = 0;
// EA = 1;
}
break;
case 0x03:
{
// EA = 0;
Lcd2002Clr(1);
Lcd2002DispStr(1,1,"SmartCard Board Bad!");
Lcd2002Clr(2);
Lcd2002DispStr(1,2,"2 3 4 15 16 CN2:6 7!");
auto_flush = 0;
// EA = 1;
}
break;
case 0x04:
{
// EA = 0;
Lcd2002Clr(1);
Lcd2002DispStr(1,1,"SmartCard Board Bad!");
Lcd2002Clr(2);
Lcd2002DispStr(1,2,"Bridge:4 5 6 7 17 18");
auto_flush = 0;
// EA = 1;
}
break;
case 0x05:
{
// EA = 0;
Lcd2002Clr(1);
Lcd2002DispStr(1,1,"SmartCard Board Bad!");
Lcd2002Clr(2);
Lcd2002DispStr(3,2,"Bridge:18 19 20");
auto_flush = 0;
// EA = 1;
}
break;
default: auto_flush = 0;
break;
}
}
}
/*
void Delay10us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
// _nop_();
// _nop_();
}
void Delay5us(void)
{
_nop_();
_nop_();
// _nop_();
}
*/
void init()
{
TMOD=0x20;
TL1=0xFd; //19200 Fosc =22.1184
TH1=0xFd;
// TL1=0xFA; //9600 Fosc =22.1184
// TH1=0xFA;
SCON=0x50;
PCON=0x00;
EA = 1;
ES = 1;
TR1=1;
}
void Lcd2002Delay(void)
{
INT8U i;
i = 300;
do
{
;
} while (--i != 0);
}
void Lcd2002SendComm(INT8U Command)
{
Lcd2002Delay();
LCD2002_SEND_COMMAND(Command);
}
void Lcd2002SendDate(INT8U Data)
{
Lcd2002Delay();
LCD2002_SEND_DATA(Data);
}
void Lcd2002DispStr(INT8U x, INT8U y, INT8S *Data)
{
if (y == 1) /* 在第一行显示 */
{
if (x < (20 + 1)) /* 有效的列号 */
{
Lcd2002SendComm(LCD2002_LINE1 - 1 + x); /* 设置显示地址 */
for( ; x < (20 + 1) && *Data != '\0'; x++) /* 显示到字符串结束 */
/* 或是行结束 */
{
Lcd2002SendDate(*Data++); /* 显示一个字符 */
}
if (*Data != '\0') /* 字符串没有结束 */
{
x = 1; /* 从第二行第一列 */
y = 2; /* 继续显示 */
}
}
}
if (y == 2) /* 在第二行显示 */
{
Lcd2002SendComm(LCD2002_LINE2 - 1 + x); /* 设置显示地址 */
for( ; x < (20 + 1) && *Data != '\0'; x++) /* 显示到字符串结束 */
/* 或是行结束 */
{
Lcd2002SendDate(*Data++); /* 显示一个字符 */
}
}
}
void Lcd2002DispCha(INT8U x, INT8U y, INT8U Data)
{
if (y == 1) /* 在第一行显示 */
{
if (x < (20 + 1)) /* 有效的列号 */
{
Lcd2002SendComm(LCD2002_LINE1 - 1 + x); /* 设置显示地址 */
Lcd2002SendDate(Data); /* 显示一个字符 */
}
}
if (y == 2) /* 在第二行显示 */
{
Lcd2002SendComm(LCD2002_LINE2 - 1 + x); /* 设置显示地址 */
Lcd2002SendDate(Data); /* 显示一个字符 */
}
}
void Lcd2002Clr(INT8U y)
{
INT8U i;
if(y==1)
{
Lcd2002SendComm(LCD2002_LINE1);
}
if(y==2)
{
Lcd2002SendComm(LCD2002_LINE2);
}
for(i=0;i<20;i++)
{
Lcd2002SendDate(' ');
}
}
void Lcd2002Init(void)
{
Lcd2002SendComm(LCD2002_MODE); // 设置LCM模式(系统方式设置)
Lcd2002SendComm(LCD2002_NO_FLASH); // 打开LCM显示,无光标
Lcd2002SendComm(LCD2002_NO_SHIFT); // 字符向地址递增,光标移动
Lcd2002SendComm(LCD2002_SH); // 重新设为光标移动,向右移
Lcd2002Clr(1); // 清屏
Lcd2002Clr(2);
}
void serial_int(void) interrupt SIO_VECTOR using 3
{
uchar c;
if(_testbit_(RI))
c = SBUF;
switch(recv_state)
{
case FSA_INIT:
if (c == 0xEA)
recv_state = FSA_ADDRESS;
else
recv_state = FSA_INIT;
break;
case FSA_ADDRESS:
if (c == address)
recv_state = FSA_DATA;
else
recv_state = FSA_INIT;
break;
case FSA_DATA:
{
command_buffer_pre[recv_ctr] = c;
recv_ctr ++;
if (recv_ctr >= BN)
{
message_flag = 1;
if(message_disp == 1)
memcpy(command_buffer_cur,command_buffer_pre,16);
recv_state = FSA_INIT;
recv_ctr = 0;
}
else
recv_state = FSA_DATA;
// command = compare_command_buffer();
};
break;
}
}
uchar compare_command_buffer(void) reentrant
{
//uchar compare;
// uchar i;
// for(compare=0;compare<6;compare++)
// {
// i = strncmp(command_buffer_cur,command_buffer_OK,BN);
if(!strncmp(command_buffer_cur,command_buffer_OK,16))
{
return(0x02);
}
// i = strncmp(command_buffer_cur,command_buffer_Pin15ConnectPin16,BN);
else if(!strncmp(command_buffer_cur,command_buffer_Pin15ConnectPin16,16))
{
return(0x03);
}
// i = strncmp(command_buffer_cur,command_buffer_Pin4ConnectPin5,BN);
else if(!strncmp(command_buffer_cur,command_buffer_Pin4ConnectPin5,16))
{
return(0x04);
}
// i = strncmp(command_buffer_cur,command_buffer_Pin19ConnectPin20,BN);
if(!strncmp(command_buffer_cur,command_buffer_Pin19ConnectPin20,16))
{
return(0x05);
}
else
return(0x01);
// }
// message_flag=1;
// return(0x01);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -