使用的51单片机作为主控芯片,两个51单片机通过24L01通信,一个检测吊瓶滴液的速度,如果太快太慢或者不滴液都会报警,并发送到主机,输液者也可以主动通过按键呼叫主机,丛机用1602显示,主机用12864显示。
Altium Designer画的原理图和PCB图如下:
单片机源程序如下:
#include #include #include "keys.h" #include "24L01.h" #include "LCD1602.h" #define uint unsigned int #define uchar unsigned char sbit YeDi=P2^0;//红外信号采集口 sbit Speaker=P2^4;//蜂鸣器 uchar TX_buf[32]=0; uchar View_Con=0; uchar View_Change=1; uchar View_Con_Change=1; uint Cap_Data=100; uint Cap_View=0; uchar View_Data[8]; uint YeDi_Num=0; void InitTimer0(void) { TMOD |= 0x01; TH0 = 0x0D8; //10000us TL0 = 0x0F0; EA = 1; ET0 = 1; TR0 = 1; } void InitTimer1(void) { TMOD |= 0x10; TH1 = 0x0FC; //1000us TL1 = 0x18; EA = 1; ET1 = 1; } void main() { TX_buf[1]=0; TX_buf[2]=2; TX_buf[3]=5; TX_buf[4]=4; InitLcd(); Lcd_1602_word(0x80,16," NRF24L01 "); //1602第一行显示 NRF24L01 //Lcd_1602_word(0xc0,16," Connecting "); //1602第二行显示 Connecting while(NRF24L01_Check()); //检查24L01是否存在 NRF24L01_Init(); //开机的时候需要初始化24l01 InitTimer0(); //定时计数器0初始化 InitTimer1(); //定时计数器1初始化 Lcd_1602_word(0xc0,16," Connecting "); while(1) { if(Key_Change) //如果Key_Change为真 { Key_Change=0; View_Change=1; switch(Key_Value) //选择键值 { case 1: { View_Con_Change=1; if(View_Con==0) { View_Con=1; TR1 = 1; Cap_View=Cap_Data*100; } if(View_Con==2) { View_Con=1; TR1 = 1; } break; } case 2: { if(View_Con==0) //液滴加 { if(Cap_Data<=500) Cap_Data+=10; } break; } case 3: { if(View_Con==0) { if(Cap_Data>10) //液滴减 Cap_Data-=10; } break; } case 4: { if(View_Con==1) { TR1 = 0; YeDi_Num=0; View_Con=2; View_Con_Change=1; TX_buf[0]=0xf5;//蜂鸣器响 TX_buf[5]=4;//用户呼叫 NRF24L01_TxPacket(TX_buf); NRF24L01_TxPacket(TX_buf); } break; } } } if(View_Change) { View_Change=0; if(View_Con_Change) { View_Con_Change=0; switch(View_Con) { case 0:Lcd_1602_word(0x80,16,"Infusion Set: ");Lcd_1602_word(0xc0,16," ");break; case 1:Lcd_1602_word(0x80,16,"In The Infusion ");Lcd_1602_word(0xc0,16," ");Speaker=1;break; case 2: { Lcd_1602_word(0x80,16,"****Warning*****");Lcd_1602_word(0xc0,16,"****Warning*****");Speaker=0; if(TX_buf[5]<4) while(1); break; } } } switch(View_Con) { case 0: { View_Data[0]=Cap_Data/100+0x30; View_Data[1]=Cap_Data%100/10+0x30; View_Data[2]=Cap_Data%10+0x30; View_Data[3]='m'; View_Data[4]='l'; if(View_Data[0]==0x30) View_Data[0]=' '; Lcd_1602_word(0xcb,5,View_Data); break; } case 1: { View_Data[0]=Cap_View/10000+0x30; View_Data[1]=Cap_View%10000/1000+0x30; View_Data[2]=Cap_View%1000/100+0x30; View_Data[3]='.'; View_Data[4]=Cap_View%100/10+0x30; View_Data[5]=Cap_View%10+0x30; View_Data[6]='m'; View_Data[7]='l'; if(View_Data[0]==0x30) { View_Data[0]=' '; if(View_Data[1]==0x30) { View_Data[1]=' '; } } Lcd_1602_word(0xc8,8,View_Data); break; } } } } } void Timer0Interrupt(void) interrupt 1 { static uchar YeDi_Con; static uchar Key_Time0_Con; TH0 = 0xfc; TL0 = 0x18; Key_Time0_Con++; switch(YeDi_Con) { case 0: { if(YeDi==1) YeDi_Con++; break; } case 1: { if(YeDi==0) {
上一篇:51单片机知识点之独立按键设总开关与分开关
下一篇:单片机DIY小型电压表
推荐阅读最新更新时间:2024-11-08 15:00
设计资源 培训 开发板 精华推荐
- IMU-Board_V1.0
- 使用 LTC3612IUDC 3A、4MHz 单片同步降压转换器的典型应用
- 使用 MaxLinear, Inc 的 SPX385AM1-1.2/TR 的参考设计
- 使用 FAN431 输出控制进行 3 端固定稳压器的典型应用
- LT3973IDD-3.3 1.8V 降压转换器的典型应用
- 使用 ON Semiconductor 的 LV5747NTT 的参考设计
- 【课程设计】基于ESP32的物联网传感器基础学习开发板
- ADR392A 4.096 Vout 微功率、低噪声精密电压基准的典型应用
- 基于微信小程序的BLE低功耗动态电流分析仪
- NCV890430MW33GEVB:2 MHz、100% 占空比、降压同步稳压器汽车评估板