单片机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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【idea】设置鼠标滚轮控制缩放大小

1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小

python进阶技巧

1.闭包 通过函数嵌套&#xff0c;可以让内部函数依赖外部变量&#xff0c;可以避免全局变量的污染问题 闭包注意事项&#xff1a; 总结&#xff1a; 2.装饰器 2.1装饰器的一般写法 2.2 装饰器的语法糖写法 def outer(func):def inner():print(睡了)func()print(起床)retur…

java--多态

1.什么是多态 多态是在继承/实现的情况下的一种现象&#xff0c;表现为&#xff1a;对象多态、行为多态。 2.多态的具体代码体现 编译看左边&#xff0c;运行看右边 3.多态的前提 有继承/实现关系&#xff1b;存在父类引用子类对象&#xff1b;存在方法重写 4.多态的一个注…

Navicat连接Oracle数据库记录

oracle服务如图&#xff1a; navicat连接设置&#xff1a; 测试连接成功&#xff01; 连接创建成功&#xff01;

语音信号处理:librosa

1 librosa介绍 Librosa是一个用于音频和音乐分析的Python库&#xff0c;专为音乐信息检索&#xff08;Music Information Retrieval&#xff0c;MIR&#xff09;社区设计。自从2015年首次发布以来&#xff0c;Librosa已成为音频分析和处理领域中最受欢迎的工具之一。它提供了一…

python中的函数定义

默认参数 注&#xff1a; 在Python中&#xff0c;print(x, and y both correct)是一条打印语句&#xff08;print statement&#xff09;&#xff0c;用于将一条消息输出到控制台或终端。它的作用是将变量x的值和字符串and y both correct同时输出到屏幕上。 在这个语句中&…

基于AT89C51单片机的节日彩灯门设计

1&#xff0e;设计任务 本设计采用单片机为主控芯片&#xff0c;结合外围电路组成彩灯门的控制系统器&#xff0c;用来控制16个彩色的LED发光&#xff0c;实现彩色亮点的循环移动&#xff1b;通过软件编程实现各种各样的彩色亮点平面循环移动&#xff0c;该彩色控制器可以通过输…

LRU缓存淘汰策略的实现——LinkedHashMap哈希链表

LRU&#xff08;最近最少使用&#xff09;缓存淘汰策略可以通过使用哈希链表实现。LinkedHashMap 是 Java 中提供的一种数据结构&#xff0c;它综合了哈希表和双向链表的特点&#xff0c;非常适合用来实现 LRU 缓存。 LinkedHashMap 内部维护了一个哈希表和一个双向链表。哈希…

树与二叉树堆:经典OJ题集

目录 查找值为x的结点&#xff1a; 思路分析&#xff1a; 单值二叉树&#xff1a; 示例&#xff1a; 思路分析&#xff1a; 相同的树&#xff1a; 示例&#xff1a; 思路分析&#xff1a; 二叉树的前序遍历&#xff1a;——使用前序遍历把结点元素放入数组中 题…

Gartner发布降低软件供应链安全风险指南

软件供应链攻击已呈三位数增长&#xff0c;但很少有组织采取措施评估这些复杂攻击的风险。这项研究提供了安全和风险管理领导者可以用来检测和预防攻击并保护其组织的三种实践。 主要发现 尽管软件供应链攻击急剧增加&#xff0c;但安全评估并未作为供应商风险管理或采购活动的…

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集

030 - STM32学习笔记 - ADC&#xff08;四&#xff09; 独立模式多通道DMA采集 中断模式和DMA模式进行单通道模拟量采集&#xff0c;这节继续学习独立模式多通道DMA采集&#xff0c;使用到的引脚有之前使用的PC3&#xff08;电位器&#xff09;&#xff0c;PA4&#xff08;光敏…

js事件流与事件委托/事件代理

1 事件流 事件流分为两步&#xff0c;一是捕获&#xff0c;二是冒泡 1.1 捕获概念 捕获就是从最高层一层一层往下找到最内部的节点 1.2 冒泡概念 捕获到最小节点后&#xff0c;一层一层往上返回&#xff0c;像是气泡从最底部往上冒一样&#xff0c;由于水深不同压强不同&…

如何在工作中好好利用CHAT?

问CHAT&#xff1a;智能微网和综合能源项目实施过程中存在的管理风险和应对措施 CHAT回复&#xff1a;在智能微网和综合能源项目实施过程中&#xff0c;可能存在的管理风险和应对措施主要有以下几个方面&#xff1a; 1. 技术风险&#xff1a;所使用的技术和设备可能还处在研发…

某60区块链安全之薅羊毛攻击实战一学习记录

区块链安全 文章目录 区块链安全薅羊毛攻击实战一实验目的实验环境实验工具实验原理实验内容薅羊毛攻击实战一 实验步骤EXP利用 薅羊毛攻击实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约薅羊毛攻击漏洞 找到合约漏洞进行分析并形成利用 实验环境 Ubun…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

前言&#xff1a; 风格是指在不同领域内&#xff0c;人们在表达自己的过程中&#xff08;如艺术、音乐、文化、时尚、建筑、软件系统等&#xff09;&#xff0c;所选择的、相对稳定的表达方式和特征的总和。在不同领域内都存在着多种不同的风格。 在艺术领域内&#xff0c;也…

vue项目下npm或yarn下安装echarts多个版本

最近在大屏展示的时候&#xff0c;用到了百度的echarts图表库&#xff0c;看完效果图后&#xff0c;又浏览了一下echarts官网案例&#xff0c;大同小异。但是搬砖过程中发现实际效果和demo相差甚远&#xff0c;一番折腾发现&#xff0c;项目中安装的是echarts4.x版本&#xff0…

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数&#xff1a; QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单&#xff0c;但是会阻…

跨链原子交换

原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出&#xff0c;它可以实现两个区块链之间的代币交换。 这些交换是原子的&#xff0c;因为双方要么收到对方的硬币&#xff0c;要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方&#xff0c;消除…

3.Ansible的file模块,我最常用的文件操作

1.file 模块的用法 1.1 官方概念 Set attributes of files, symlinks or directories. Alternatively, remove files, symlinks or directories. Many other modules support the same options as the file’ module - including [copy], [template], and [assemble]. For Wi…