📄 1.c
字号:
#include<reg52.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
unsigned long data lin_shi;
float data change[2];
uchar idata math_save[110];
uchar data soft_counter;
uint data replace_T1;
uchar data k;
uchar data send_buf[13];
uchar data rece_temp[13];
uchar data *rece_point;
uchar data send_order;
uchar data send_counter;
uchar data interrupt_counter;
sbit cs_25045=P1^0;
sbit so_25045=P1^1;
sbit wp_25045=P1^2;
sbit si_25045=P1^3;
sbit sck_25045=P1^4;
sbit 7279_cs=P2^0;
sbit 7279_clk=P2^1;
sbit 7279_data=P2^2;
sbit 7279_key=P2^3;
void send_command(uchar m1);
void enable_25045(void);
void watchdog(void);
void initiate(void);
void wait(void);
uchar bchcode(uchar*);
uchar gets_card_num(void);
//******************************************
main()
{
replace_T1=0x00;
lin_shi=0x00;
change[0]=0x00;
change[1]=0x00;
way_code=0x00;
for(k=0;k<110;k++)
math_save[k]=0x00;
interrupt_counter=0x00;
rece_point=&rece_temp[0];
initiate();
enable_25045();
while(1)
{
card_code=gets_card_num();
watchdog();
}
}
//*****************************
void service_TO(void) interrupt 1 using 0
{
TR1=0;
TR0=0;
replace_T1=TH1*256+TL1;
lin_shi=lin_shi+replace_T1;
soft_counter++;
if(soft_counter>=20)
{
soft_counter=0;
if(way_code!=0){
if((way_code%2)==0){
change[0]=(float)lin_shi/5350;//(20000*2.7);
math_save[3*way_code-2]=(uchar)(change[0]/1);
change[1]=change[0]-(float)math_save[3*way_code-2];
math_save[3*way_code-3]=(uchar)(change[1]*100/1);
}else {
change[0]=(float)lin_shi/5350;//(20000*2.7);
math_save[3*way_code-1]=(uchar)(change[0]/1);
change[1]=change[0]-(float)math_save[3*way_code-1];
math_save[3*way_code-2]=(uchar)(change[1]*100/1);
}
}
lin_shi=0x00;
way_code++;
if(way_code>=37) way_code=1;
//************************
void service_comm(void) interrupt 4 using 3
{
uchar data receive_wrong;
uchar data i;
ES=0;
if(RI==1)
{
RI=0;
*rece_point=SBUF;
rece_point++;
interrupt_counter++;
switch(interrupt_counter)
{
case 6:
{
receive_wrong=0;
for(i=0;i<6;i++)
{
if(rece_temp[i]!=eb90[i])
receive_wrong=1;
}
if(receive_wrong==1)
{
for(i=0;i<5;i++)
rece_temp[i]=rece_temp[i+1];
interrupt_counter--;
rece_point--;
}
}
break;
case 12:
{
if(rece_temp[11]==( ~bchcode(&rece_temp[6]))&&rece_temp[6]==0x71&&rece_temp[7]==0xdd&&rece_temp[10]==(uchar)(card_code+0x40))
{
uchar data ii;
send_counter=0;
interrupt_counter=0;
rece_point=&rece_temp[0];
for(ii=0;ii<6;ii++)
{
send_buf[ii]=eb90[ii];
send_buf[ii+6]=control_word[ii];
if(ii==3)
{
send_buf[ii+6]=(uchar)(card_code+0x40);
control_word[ii]=(uchar)(card_code+0x40);
}
if(ii==5)
{
send_buf[ii+6]=(~bchcode(&control_word[0]));
}
}
for(ii=0;ii<18;ii++)
{
math_save[6*ii]=(uchar)(card_code+0x40);
math_save[6*ii+5]=(~bchcode(&math_save[6*ii]));
}
SBUF=send_buf[send_counter];
send_counter++;
send_order=1;
}
else
{
interrupt_counter=0;
rece_point=&rece_temp[0];
}
}
break;
default:
break;
}
}
if(TI==1&&send_counter!=0)
{
if(send_order==3)
{
SBUF=math_save[send_counter];
send_counter++;
if(send_counter>=108)
{
interrupt_counter=0;
send_counter=0;
rece_point=&rece_temp[0];
}
}
if(send_order==2)
{
SBUF=math_save[send_counter-1];
send_counter=1;
send_order=3;
}
if(send_order==1)
{
SBUF=send_buf[send_counter];
send_counter++;
if(send_counter==12)
{
send_order=2;
send_counter=1;
}
}
}
TI=0;
ES=1;
}
//************************
void enable_25045(void)
{
cs_25045=0;
send_command(WREN);
cs_25045=1;
cs_25045=0;
wait();
send_command(WRSR);
wait();
send_command(0x00);
cs_25045=1;
}
//********************************
void send_command(uchar ml)
{
static uchar data p;
uchar data scan_bit=0x80;
for(p=0;p<8;p++)
{
sck_25045=0;
if(ml&scan_bit)
si_25045=1;
else
si_25045=0;
scan_bit=scan_bit>>1;
sck_25045=0;
sck_25045=1;
}
si_25045=0;
}
//*****************************
void watchDog(void)
{
cs_25045=0;
cs_25045=1;
}
//******************************
void wait(void)
{
uchar data kk;
for(kk=0;kk<20;kk++);
}
//******************************
void initiate(void)
{
TMOD=0x51;
PSW=00;
TCON=00;
IP=00;
PS=0;
PT0=1;
IE=00;
ET0=1;
ES=1;
EA=1;
PCON=00;
SCON=0x50;
TI=0;
RI=0;
TL0=0x3c;
TH0=0xb0;
TR0=1;
T2CON=0x30;
TL2=0xdc;
TH2=0xff;
RCAP2H=0xff;
RCAP2L=0xdc;
TR2=1;
}
//**************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -