📄 zhenggeshi.c
字号:
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#include<DIS_LEDNUM_595.c>
#define F_ADDR P0
sbit PButton = P3^2;
#define uchar unsigned char
#define uint unsigned int
#define F_ST 0x02
#define F_END 0x03
#define F_Receive_OK 0x05
#define F_Receive_Error 0x06
#define F_Overtime 0x09
uchar UART_Receive;
bit ST_Flag;
bit ADDR_Flag;
bit LEN_Flag;
bit Receive_OK_Flag;
bit Receive_Error_Flag;
bit Receive_Overtime_Flag;
bit Button_Flag;
bit Send_Flag;
bit Send_Overtime_Flag;
uchar Temer_Num;
uchar F_LEN;
uchar ASCII_Receive_Buf[20];
uchar ASCII_Send_Buf[20];
uchar HEX_Send_Buf[20];
uchar LEN_Data_Buf;
uchar UART_Data_Buf;
void Timer_init(void);
void UART_init(void);
void Delay_1ms(uint Nms);
void Send_Response(uchar Frame);
void Send_Array(void);
uchar ASCII_To_Hex(uchar bChar);
uchar Hex_To_ASCII(uchar bHex);
void Send_Hex_To_ASCII(void);
bit CheckSum(void);
void Get_CheckSum(void);
void int0() interrupt 0
{
uchar i,j;
EA=0;
PButton=1;
for(j=0;j<10;j++)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
}
}
if(!PButton)
{
Button_Flag=1;
}
EA=1;
}
void timer0(void) interrupt 1
{
TH0=0x15;
TL0=0xa0;
if(ADDR_Flag)
{
TR0=0;
Receive_Overtime_Flag=1;
ST_Flag=0;
ADDR_Flag=0;
LEN_Flag=0;
}
if(Send_Flag)
{
if(Temer_Num>10)
{
Temer_Num=0;
Send_Overtime_Flag=1;
}
else
{
Temer_Num++;
}
}
}
void UART_Isr() interrupt 4
{
ES=0;
if(RI)
{
RI=0;
UART_Data_Buf=SBUF;
if(ST_Flag)
{
if(ADDR_Flag)
{
if(LEN_Flag)
{
if(F_LEN)
{
F_LEN--;
ASCII_Receive_Buf[LEN_Data_Buf - F_LEN]=UART_Data_Buf;
}
else
{
if(UART_Data_Buf==F_END)
{
Receive_OK_Flag=1;
TR0=0;
ST_Flag=0;
ADDR_Flag=0;
LEN_Flag=0;
}
else
{
Receive_Error_Flag=1;
ST_Flag=0;
ADDR_Flag=0;
LEN_Flag=0;
TR0=0;
}
}
}
else
{
F_LEN=UART_Data_Buf;
ASCII_Receive_Buf[0]=F_LEN;
LEN_Data_Buf=F_LEN;
LEN_Flag=1;
}
}
else
{
if(UART_Data_Buf==F_ADDR)
{
ADDR_Flag=1;
TH0=0x15;
TL0=0xa0;
TR0=1;
}
else
ST_Flag=0;
}
}
else
{
if(UART_Data_Buf==F_ST)
ST_Flag=1;
}
}
ES=1;
}
void UART_Send(uchar Send_Value)
{
TI=0;
SBUF=Send_Value;
while(TI==1);
TI=0;
}
void main()
{
uchar i=0;
F_ADDR=0x00;
IT0=1;
EX0=1;
Timer_init();
UART_init();
EA=1;
Dis_LedNum(1);
Dis_LedNum(0);
while(1)
{
if(Button_Flag)
{
Send_Flag=1;
TH0=0x15;
TL0=0xa0;
TR0=1;
Temer_Num=0;
HEX_Send_Buf[0]=0x01;
HEX_Send_Buf[1]=0x45;
Send_Hex_To_ASCII();
Send_Array();
Button_Flag=0;
}
if(Send_Flag)
{
TR0=1;
}
if(Send_Overtime_Flag)
{
HEX_Send_Buf[0]=0x01;
HEX_Send_Buf[1]=0x45;
Send_Hex_To_ASCII();
Send_Array();
Send_Overtime_Flag=0;
}
if(Receive_OK_Flag)
{
if(CheckSum())
{
if(ASCII_Receive_Buf[1]<0x30)
{
if(ASCII_Receive_Buf[1]==F_Receive_OK)
{
Send_Flag=0;
Send_Overtime_Flag=0;
TR0=0;
}
}
else
{
i=ASCII_To_Hex(ASCII_Receive_Buf[1])<<4;
i+=ASCII_To_Hex(ASCII_Receive_Buf[2]);
Dis_LedNum(i);
Send_Response(F_Receive_OK);
}
}
else
{
Receive_Error_Flag=1;
}
Receive_OK_Flag=0;
}
if(Receive_Error_Flag)
{
Send_Response(F_Receive_Error);
Receive_Error_Flag=0;
}
if(Receive_Overtime_Flag)
{
Send_Response(F_Overtime);
Receive_Overtime_Flag=0;
}
}
}
void Timer_init(void)
{
TMOD=0x1;
TH0=0x15;
TL0=0xa0;
PT0=1;
ET0=1;
}
void UART_init()
{
SCON = 0x50;
TMOD|= 0x20;
TH1 = 0xFB;
TL1 = 0XFB;
TR1 = 1;
ET1 = 0;
//AUXR=64;
ES = 1;
//PS = 1;
EA = 1;
}
bit CheckSum(void)
{
uchar ASCII_Len=0;
uchar Checksum_Temp=0;
ASCII_Len=ASCII_Receive_Buf[0]-1;
for(;ASCII_Len!=0;ASCII_Len--)
{
Checksum_Temp+=ASCII_Receive_Buf[ASCII_Len];
}
ASCII_Len=ASCII_Receive_Buf[0];
if(Checksum_Temp==ASCII_Receive_Buf[ASCII_Len])
return 1;
else
return 0;
}
void Get_CheckSum(void)
{
uchar ASCII_Len=0;
uchar CheckSum_Temp=0;
ASCII_Len=ASCII_Send_Buf[0]-1;
for(;ASCII_Len!=0;ASCII_Len--)
{
CheckSum_Temp+=ASCII_Send_Buf[ASCII_Len];
}
ASCII_Len=ASCII_Send_Buf[0];
ASCII_Send_Buf[ASCII_Len]=CheckSum_Temp;
}
void Send_Response(uchar Frame)
{
uchar ASCII_Len=1;
ASCII_Send_Buf[ASCII_Len++]=Frame;
ASCII_Send_Buf[0]=ASCII_Len;
ASCII_Send_Buf[ASCII_Len]=Frame;
Send_Array();
}
void Send_Hex_To_ASCII(void)
{
uchar i;
uchar Hex_Len=0;
uchar ASCII_Len=1;
Hex_Len=HEX_Send_Buf[0];
for(i=1;i<=Hex_Len;i++)
{
ASCII_Send_Buf[ASCII_Len++]=Hex_To_ASCII(HEX_Send_Buf[i]>>4);
ASCII_Send_Buf[ASCII_Len++]=Hex_To_ASCII(HEX_Send_Buf[i]&0x0f);
}
ASCII_Send_Buf[0]=ASCII_Len;
Get_CheckSum();
}
void Send_Array(void)
{
uchar i;
uchar ASCII_Len=1;
ASCII_Len=ASCII_Send_Buf[0];
UART_Send(F_ST);
Delay_1ms(2);
UART_Send(F_ADDR);
Delay_1ms(2);
for(i=0;i<=ASCII_Len;i++)
{
UART_Send(ASCII_Send_Buf[i]);
Delay_1ms(2);
}
UART_Send(F_END);
Delay_1ms(2);
}
uchar ASCII_To_Hex(uchar bChar)
{
if((bChar>=0x30)&&(bChar<=0x39))
bChar -= 0x30;
else if((bChar>=0x41)&&(bChar<=0x46))
bChar -= 0x37;
else if((bChar>=0x61)&&(bChar<=0x66))
bChar -= 0x57;
else bChar = 0xff;
return bChar;
}
uchar Hex_To_ASCII(uchar bHex)
{
if((bHex>=0)&&(bHex<=9))
bHex += 0x30;
else if((bHex>=10)&&(bHex<=15))
bHex += 0x37;
else bHex = 0xff;
return bHex;
}
void Delay_1ms(uint Nms)
{
uchar Temp;
for(;Nms!=0;Nms--)
{
for(Temp=0;Temp<255;Temp++)
{
_nop_();
_nop_();
_nop_();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -