本设计由STC89C52单片机电路+HX711称重模块电路+红外避障传感器电路+继电器模块电路+RFID模块电路电源电路。
1、如果重量超过一定值(具体值可自行确定)或者红外避障传感器检测到障碍物,则继电器断开。(继电器默认闭合)
2、称重传感器量程是0-5kg,模拟重量即可。
3、RFID模块刷卡(设定好的卡)后,则继电器2打开(继电器2打开5秒后自动断开)否则,继电器2不动作。
资料下载地址
https://pan.baidu.com/s/1pj-Pn7n97lbtqjgNf_VVZg?pwd=8888
部分代码
void Init_Timer0(void); //函数声明
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void main (void)
{
Init_Timer0(); //定时器0初始化
UART_Init();
uartSendStr("ready ok!",9);
PcdReset();//复位RC522
PcdAntennaOn();//开启天线发射
DelayMs(100); //延时有助于稳定
Weight_Maopi = HX711_Read(); //读取去皮重量
DelayMs(100);
Weight_Maopi = HX711_Read();
relay1 = 0;//默认打开
relay2 = 0;
while (1) //主循环
{
if(PcdRequest(0x52,Temp)==MI_OK) //读取卡号成功
{
if(PcdAnticoll(UID)==MI_OK) //获取卡号成功
{
u
uartSendByte(0x00);
}
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time_20ms++;
if(relayLater>0) relayLater--;
else
{
relay2 =1; //继电器 不 动作
}
if(time_20ms%5==0)
{readFlag =1;}
}
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}