#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "HX711.h"
sbit KEY_ADD1=P1^0; //定义红外输入端口
sbit KEY_ADD2=P1^1;
sbit KEY_ADD3=P1^2;
sbit KEY_ADD4=P1^3;
sbit KEY_ADD5=P1^4;
sbit LED1=P2^0; //定义led输出端口
sbit LED2=P2^1; //定义led输出端口
sbit LED3=P2^2; //定义led输出端口
sbit LED4=P2^3; //定义led输出端口
sbit LED5=P2^4; //定义led输出端口
sbit Buzzer = P3^7;
bit num1=0;
bit num2=0;
bit num3=0;
bit num4=0;
bit num5=0;
long Weight_Shiwu = 0;
unsigned int GapValue;
unsigned char Tx_Buf[12];
unsigned char Rx_buf[1];
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/**********************************************************************************************************
* @函数名称 UartInit
* @功能描述 :串口程序
* @参数说明 None
* @创建日期 : 2023-04-17
**********************************************************************************************************/
void InitUART(void) //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。
{
TMOD = 0x21;
SCON = 0x50;
TL0 = 0xb0;
TH0 = 0x3c; //赋初值50ms
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
ET0 = 1; //打开定时器0中断允许开关
TR0 = 1; //打开定时器0定时开关
}
///**********************************************************************************************************
//**函数名称 :putc_to_SerialPort(unsigned char c)
//**函数描述 :uart发送函数
//**输 入 :buf
//**输 出 :None
//**********************************************************************************************************/
void putc_to_SerialPort(unsigned char c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void puts_to_SerialPort(unsigned char *s)
{
while(*s != '\0')
{
putc_to_SerialPort(*s);
s++;
DelayMs(5);
}
}
void number(void)
{
Tx_Buf[0] = 'Z'; //帧头
Tx_Buf[1] = 'L'; //将库存数据送往发送数组,送给蓝牙模块让手机APP显示
Tx_Buf[2] = ':'; //
Tx_Buf[3] = Weight_Shiwu/100000 + 0x30; //
Tx_Buf[4] = Weight_Shiwu%100000/10000 + 0x30;
Tx_Buf[5] = Weight_Shiwu%10000/1000 + 0x30; //
Tx_Buf[6] = '.'; //
Tx_Buf[7] = Weight_Shiwu%1000/100 + 0x30; //
Tx_Buf[8] = Weight_Shiwu % 100 / 10 + 0x30;
Tx_Buf[9] = Weight_Shiwu % 10 + 0x30;
Tx_Buf[10] = 'k'; //帧尾
Tx_Buf[11] = 'g';
}
/*------------------------------------------------ 红外识别函数------------------------------------------------*/
void hongwai_KeyPress()
{
if(!KEY_ADD1) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD1) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD1);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num1=~num1;
if(num1==1)
{
LED1 = 0;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("1 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("1 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD2) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD2) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD2);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num2=~num2;
if(num2==1)
{
LED1 = 1;
LED2 = 0;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("2 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("2 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD3) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD3) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD3);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num3=~num3;
if(num3==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 0;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("3 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("3 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD4) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD4) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD4);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num4=~num4;
if(num4==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 0;
LED5 = 1;
puts_to_SerialPort("4 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("5 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD5) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD5) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD5);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num5=~num5;
if(num5==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 0;
puts_to_SerialPort("5 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("5 hao wu wupin\r\n");
}
}
}
}
}
//****************************************************
//称重
//****************************************************
void Get_Weight()
{
long sum = 0;
unsigned char count = 0;
Weight_Shiwu = HX711_Read();
for(count = 0;count<100;count++)
sum += Weight_Shiwu;
Weight_Shiwu=sum /100;
if(Weight_Shiwu>=0)
{
// Weight_Shiwu = (signed long)((float)(Weight_Shiwu*100)/35); //计算实物的实际重量
Weight_Shiwu = Weight_Shiwu;
if(Weight_Shiwu >= 10000) //超重报警
{
Buzzer = !Buzzer;
puts_to_SerialPort("chaozhong\r\n");
}
else
{
Buzzer = 1;
}
}
else
{
Weight_Shiwu=0;
Buzzer = 1;
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
static unsigned char i;
P2=0XFF; //红外输入端口电平置高
P1=0XFF;
InitUART();
while (1) //主循环
{
DelayMs(10);
i++;
if(i>=2)
{
hongwai_KeyPress();
}
else if(i>=4)
{
i=0;
Get_Weight();
number();
}
}
}
void UART1_irq() interrupt 4 //处理接收的串口数据
{
static unsigned char tmp;
ES=0;
if(RI) //接收到字节
{
tmp = SBUF;
RI = 0; //手动清零接收中断标志位
}
ES=1;
}
#include "HX711.h"
sbit KEY_ADD1=P1^0; //定义红外输入端口
sbit KEY_ADD2=P1^1;
sbit KEY_ADD3=P1^2;
sbit KEY_ADD4=P1^3;
sbit KEY_ADD5=P1^4;
sbit LED1=P2^0; //定义led输出端口
sbit LED2=P2^1; //定义led输出端口
sbit LED3=P2^2; //定义led输出端口
sbit LED4=P2^3; //定义led输出端口
sbit LED5=P2^4; //定义led输出端口
sbit Buzzer = P3^7;
bit num1=0;
bit num2=0;
bit num3=0;
bit num4=0;
bit num5=0;
long Weight_Shiwu = 0;
unsigned int GapValue;
unsigned char Tx_Buf[12];
unsigned char Rx_buf[1];
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/**********************************************************************************************************
* @函数名称 UartInit
* @功能描述 :串口程序
* @参数说明 None
* @创建日期 : 2023-04-17
**********************************************************************************************************/
void InitUART(void) //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。
{
TMOD = 0x21;
SCON = 0x50;
TL0 = 0xb0;
TH0 = 0x3c; //赋初值50ms
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
ET0 = 1; //打开定时器0中断允许开关
TR0 = 1; //打开定时器0定时开关
}
///**********************************************************************************************************
//**函数名称 :putc_to_SerialPort(unsigned char c)
//**函数描述 :uart发送函数
//**输 入 :buf
//**输 出 :None
//**********************************************************************************************************/
void putc_to_SerialPort(unsigned char c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void puts_to_SerialPort(unsigned char *s)
{
while(*s != '\0')
{
putc_to_SerialPort(*s);
s++;
DelayMs(5);
}
}
void number(void)
{
Tx_Buf[0] = 'Z'; //帧头
Tx_Buf[1] = 'L'; //将库存数据送往发送数组,送给蓝牙模块让手机APP显示
Tx_Buf[2] = ':'; //
Tx_Buf[3] = Weight_Shiwu/100000 + 0x30; //
Tx_Buf[4] = Weight_Shiwu%100000/10000 + 0x30;
Tx_Buf[5] = Weight_Shiwu%10000/1000 + 0x30; //
Tx_Buf[6] = '.'; //
Tx_Buf[7] = Weight_Shiwu%1000/100 + 0x30; //
Tx_Buf[8] = Weight_Shiwu % 100 / 10 + 0x30;
Tx_Buf[9] = Weight_Shiwu % 10 + 0x30;
Tx_Buf[10] = 'k'; //帧尾
Tx_Buf[11] = 'g';
}
/*------------------------------------------------ 红外识别函数------------------------------------------------*/
void hongwai_KeyPress()
{
if(!KEY_ADD1) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD1) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD1);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num1=~num1;
if(num1==1)
{
LED1 = 0;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("1 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("1 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD2) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD2) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD2);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num2=~num2;
if(num2==1)
{
LED1 = 1;
LED2 = 0;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("2 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("2 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD3) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD3) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD3);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num3=~num3;
if(num3==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 0;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("3 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("3 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD4) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD4) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD4);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num4=~num4;
if(num4==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 0;
LED5 = 1;
puts_to_SerialPort("4 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("5 hao wu wupin\r\n");
}
}
}
}
if(!KEY_ADD5) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD5) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD5);//如果确认按下按键等待按键释放,没有释放则一直等待
{
num5=~num5;
if(num5==1)
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 0;
puts_to_SerialPort("5 hao you wupin\r\n");
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
puts_to_SerialPort("5 hao wu wupin\r\n");
}
}
}
}
}
//****************************************************
//称重
//****************************************************
void Get_Weight()
{
long sum = 0;
unsigned char count = 0;
Weight_Shiwu = HX711_Read();
for(count = 0;count<100;count++)
sum += Weight_Shiwu;
Weight_Shiwu=sum /100;
if(Weight_Shiwu>=0)
{
// Weight_Shiwu = (signed long)((float)(Weight_Shiwu*100)/35); //计算实物的实际重量
Weight_Shiwu = Weight_Shiwu;
if(Weight_Shiwu >= 10000) //超重报警
{
Buzzer = !Buzzer;
puts_to_SerialPort("chaozhong\r\n");
}
else
{
Buzzer = 1;
}
}
else
{
Weight_Shiwu=0;
Buzzer = 1;
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
static unsigned char i;
P2=0XFF; //红外输入端口电平置高
P1=0XFF;
InitUART();
while (1) //主循环
{
DelayMs(10);
i++;
if(i>=2)
{
hongwai_KeyPress();
}
else if(i>=4)
{
i=0;
Get_Weight();
number();
}
}
}
void UART1_irq() interrupt 4 //处理接收的串口数据
{
static unsigned char tmp;
ES=0;
if(RI) //接收到字节
{
tmp = SBUF;
RI = 0; //手动清零接收中断标志位
}
ES=1;
}