单片机AVR单片机病房控制系统设计+源程序

一、系统方案
设计一个可容8张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮,此时护士值班室内的呼叫系统板上显示该患者的床位号,并蜂鸣器报警。当护士按下“响应”键时,结束当前呼叫。
操作视频BIBIBI:https://www.bilibili.com/video/BV1kN4y127f8/
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
//LCD端口初始化
void LCDPort_Init(void)
{
LCD_BUS = 0XFF;
LCD_BUS_Direction_REG =0XFF; //LCD数据端口设置为输出

 LCD_ControlPort_SET;          //RS RW EN脚均设置为输出	LCD_ControlPort_CLR;          //RW RW EN低电平

}

//LCD写指令
void Write_Com(unsigned char LCD_Com)
{

 RS_CLR; //RS=0,写指令RW_CLR; //RW=0,写命令EN_SET; //E=1,写操作	LCD_BUS=LCD_Com;    //数据送往数据端口?_delay_ms(1);    //这个延时非常重要,结合时序图来理解,可以跟送数据顺序调换EN_CLR;// E=0,下角_delay_ms(1);  

}
2、液晶显示程序
//LCD端口初始化
void LCDPort_Init(void)
{
LCD_BUS = 0XFF;
LCD_BUS_Direction_REG =0XFF; //LCD数据端口设置为输出

 LCD_ControlPort_SET;          //RS RW EN脚均设置为输出	LCD_ControlPort_CLR;          //RW RW EN低电平

}

//LCD写指令
void Write_Com(unsigned char LCD_Com)
{

 RS_CLR; //RS=0,写指令RW_CLR; //RW=0,写命令EN_SET; //E=1,写操作	LCD_BUS=LCD_Com;    //数据送往数据端口?_delay_ms(1);    //这个延时非常重要,结合时序图来理解,可以跟送数据顺序调换EN_CLR;// E=0,下角_delay_ms(1);  

}

3、按键程序
//按键处理函数
void key_with(void)
{
uchar i;
if(key_can <= 8)
{
if(key_can == 1)
L1_0 ; //1号病房灯亮
if(key_can == 2)
L2_0 ; //2号病房灯亮
if(key_can == 3)
L3_0 ; //3号病房灯亮
if(key_can == 4)
L4_0; //4号病房灯亮
if(key_can == 5)
L5_0 ; //5号病房灯亮
if(key_can == 6)
L6_0 ; //6号病房灯亮
if(key_can == 7)
L7_0 ; //7号病房灯亮
}
4、核心算法程序
void main(void)
{
unsigned char key =1;
LCDPort_Init();
LCD_Init();
DDRB=0x7F;
PORTB=0xff;
DDRC=0xFF;
PORTC=0xff;
DDRD=0x00;
PORTD=0xff;
DDRA=0xFF;
PORTA=0xff;
write_string(1,0,Timer_buf);
write_string(2,0," wu bingrenhujiao");

while(1)
{Timer_buf[13] = br_geshu%10+47;write_string(1,0,Timer_buf); //写显示if(br_geshu > 1)BEEP_0 ;   //蜂鸣器报警else BEEP_1;       //取消报警key_with();if((PIND&0x01)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x01)==0x00)   // 确定按键依然1按下     {while((PIND&0x01)!=0X01); // 判断手松开key_can = 1;}		} if((PIND&0x02)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x02)==0x00)   // 确定按键依然1按下     {while((PIND&0x02)!=0X02); // 判断手松开key_can = 2;}		} if((PIND&0x04)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x04)==0x00)   // 确定按键依然1按下     {while((PIND&0x04)!=0X04); // 判断手松开key_can = 3;}		} if((PIND&0x08)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x08)==0x00)   // 确定按键依然1按下     {while((PIND&0x08)!=0X08); // 判断手松开key_can = 4;}		}if((PIND&0x10)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x10)==0x00)   // 确定按键依然1按下     {while((PIND&0x10)!=0X10); // 判断手松开key_can = 5;}		} if((PIND&0x20)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x20)==0x00)   // 确定按键依然1按下     {while((PIND&0x20)!=0X20); // 判断手松开key_can = 6;}		} if((PIND&0x40)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x40)==0x00)   // 确定按键依然1按下     {while((PIND&0x40)!=0X40); // 判断手松开key_can = 7;}		} if((PIND&0x80)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PIND&0x80)==0x00)   // 确定按键依然1按下     {while((PIND&0x80)!=0X80); // 判断手松开key_can = 8;}		}  if((PINB&0x80)==0x00)    // 按键1按下          {_delay_ms(10);  // 延时消抖if((PINB&0x80)==0x00)   // 确定按键依然1按下     {while((PINB&0x80)!=0X80); // 判断手松开key_can = 9;}		}  
}

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序/进程替换(讲解)

本文旨在讲解进程替换的知识&#xff01;希望读完本文&#xff0c;能使读者对进程替换有更深一步的认识&#xff01;&#xff01;好的&#xff0c;废话不多说&#xff0c;干货来了&#xff01; 进程替换的引进&#xff01; 为什么要引进进程替换呢&#xff1f;我们创建子进程总…

Achronix推出基于FPGA的加速自动语音识别解决方案

提供超低延迟和极低错误率&#xff08;WER&#xff09;的实时流式语音转文本解决方案&#xff0c;可同时运行超过1000个并发语音流 2023年11月——高性能FPGA芯片和嵌入式FPGA&#xff08;eFPGA IP&#xff09;领域的领先企业Achronix半导体公司日前自豪地宣布&#xff1a;正式…

ethtool工具添加并验证网口

Filesystem Packages->console->network->ethtool 命令描述&#xff1a; ethtool 是用于查询及设置网卡参数的命令。 使用命令&#xff1a; ethtool ethx //查询ethx网口基本设置&#xff0c;其中 x 是对应网卡的编号&#xff0c;如eth0、eth1等等 ethtool –…

【NodeJS】 API Key 实现 短信验证码功能

这里使用的平台是 短信宝整体来讲还是挺麻烦的平台必须企业才行&#xff0c;个人是无法使用该平台的 平台必须完成 身份信息认证 和 企业认证 这里就需要 “营业执照”了 &#xff0c;没有 “营业执照” 的朋友还是后退一步吧 后端我用的是NodeJS &#xff0c;使用第三方库 ro…

【Java ——异常机制详解】

Java异常是Java提供的一种识别及响应错误的一致性机制&#xff0c;java异常机制可以使程序中异常处理代码和正常业务代码分离&#xff0c;保证程序代码更加优雅&#xff0c;并提高程序健壮性。本文综合多篇文章后&#xff0c;总结了Java 异常的相关知识&#xff0c;希望可以提升…

统信UOS和vue.js的一个兼容问题

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 这事到现在说起还很奇怪&#xff0c;在UOS20&#xff08;硬件为华为鲲鹏服务器&#xff0c;arm架构&#xff0c;g8.3&#xff09;上部署uve.js&#xff0…

Excel 使用技巧

Excel 使用技巧 注意&#xff1a; excel 中设计计算的字符尽量使用英文。 拼接两段文字&#xff08;字符串拼接&#xff09; 方法一 在需要计算的单元格上,键入 点击 A1(点击需要拼接的单元格) & C1(点击需要拼接的单元格) 举例: 姓名栏想要拼接 姓 和 名 两列点击姓名这一…

Leetcode 450 删除二叉搜索树中的节点

删除二叉搜索树的节点要比插入一个节点更难&#xff0c;区别在于&#xff0c;我们总能找到一个叶子节点&#xff0c;把我们要插入的值缀在后面。 但是删除节点不总是删除叶子节点&#xff0c;还有可能删除一个中间节点&#xff0c;这就需要额外的操作。 我们需要分情况来讨论。…

企业微信HOOK开发接口调用,发送语音消息

简要描述 发送语音消息 可以从CDN/CDN文件上传中上传silk文件(silk文件可以自己用mp3转换&#xff0c;或者用语音接收消息的值进行发送)&#xff0c;拿到发送值 操作码 101019 请求说明 参数名必选类型说明username是string用户名password是string密码name否string昵称 请…

linux NAT网卡配置static

由于是内网&#xff0c;资料无法拷贝&#xff0c;借助参考资料&#xff0c;整理发出。 镜像安装 基本操作。 查看VM配置 图1&#xff0c;有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255&#xff0c;对应下面配置的N…

Java 的第二十章:多线程

创建线程 继承Thread 类 Thread 类时 java.lang 包中的一个类&#xff0c;从类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行&#xff0c;任务是指线程在启动时执行的工作&#xff0c;start() 方法启动线程&am…

SpringBoot学习笔记-实现微服务:匹配系统(中)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 同步玩家位置1.1 游戏信息的记录1.2 实现多线程同步移动 2. 同步碰撞检测3. 实现游戏结束界面4. 持久化游戏状态4.1 创建数据库表4.2 保存游戏对局信息…

入门Python+Vue 全栈开发高级BI数据的可视化实战项目几个技术点总结

PythonVue全栈开发是一种强大的技术组合&#xff0c;可以用于构建高级BI数据可视化项目。在这篇文章中&#xff0c;我将总结几个关键技术点&#xff0c;以帮助读者入门并实战这个领域。 数据处理和分析&#xff1a;Python是一种流行的数据处理语言&#xff0c;它提供了丰富的库…

11-30 JavaWeb

修改与删除操作 防止空指针异常 localhost:8080 -> 分页查询 修改流程&#xff1a;(先查后改(两个servlet)) 修改&#xff1a; 传用户id(用户id怎么得到 -> 循环一次得到一个user 对象 user对象里用user.getId()得到用户id) UpdateUserQueryServlet.java &#xff08;…

从浏览器控制台发送get,post请求

---------------------get请求--------------------------- fetch(url, { method: get, }) .then(response > response.json()) .then(data > { // 获取到响应的数据后的处理逻辑 console.log(data); }) .catch(error > { // 请求发生错误的处理逻…

Oracle存储过程返回DataSet(多个DataTable)给C#

一、存储过程 CREATE OR REPLACE PROCEDURE GET_SENDEXCEL_XY ( ZGJ182X OUT SYS_REFCURSOR , ZGJ182Y OUT SYS_REFCURSOR , ZXN182X OUT SYS_REFCURSOR , ZXN182Y OUT SYS_REFCURSOR , ZLH182X OUT SYS_REFCURSOR …

Vue模块与小程序生命周期

文章目录 一、Vue中五个模块1、state2、getters3、mutations4、actions5、modules 二、小程序中的生命周期 一、Vue中五个模块 1、state 是用来存储数据的地方&#xff0c;我们需要传递的数据或者需要保存的数据都会在state中声明。 2、getters 类似于Vue中的计算属性&…

html/css中位置position的绝对位置absolute顺时针盒子案例图片排序

目标图片&#xff1a; Dreamweaver界面&#xff1a; 代码部分&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css">.red{background-color:r…

element中el-form-item设置label-width=‘auto‘报错

文章目录 一、问题二、解决三、最后 一、问题 el-form中的设置了全局标题宽度是200px&#xff0c;此时想要对el-form-item取消标题宽度&#xff0c;设置了label-widthauto&#xff0c;结果&#xff0c;报错了~~~ <el-form label-width"200px" label-position&quo…

python的itertools库

itertools常用的方法如下&#xff1a; import itertools 1. 生成的列表累加&#xff0c;在生成新的列表x itertools.accumulate(range(10))print(list(x))结果&#xff1a;[0, 1, 3, 6, 10, 15, 21, 28, 36, 45] 2. 连接多个列表或者迭代器x itertools.chain(range(3), rang…