当前位置: 首页 > news >正文

基于51单片机的智能病房呼叫系统的设计与实现

一、前言

        显示床位号使用到4位数码管,为了节约单片IO口,使用TM1637来驱动数码管。

二、TM1637驱动芯片简介

三、电路设计,使用矩阵按键来模拟每个床位的呼叫按钮

四、编写51单片机代码

void delay_ms(u16 n)
{u8 i;while(n--){i = 111;while(i--);}
}u8 key_scan()
{u8 keyH, keyL, line, row;KEY=0xF0;if(KEY!=0xF0){delay_ms(10); //消抖延时if(KEY!=0xF0){keyH=KEY&0xF0;KEY=0x0F;keyL=KEY&0x0F;switch(keyH){case 0x70: line=1;break;case 0xB0: line=2;break;case 0xD0: line=3;break;case 0xE0: line=4;break;}switch(keyL){case 0x07: row=1;break;case 0x0B: row=2;break;case 0x0D: row=3;break;case 0x0E: row=4;break;}while(KEY!=0x0F);return (line-1)*4+row;}}return 0xFF;
}code unsigned char tab[] =
{0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x77,/*10 A*/0x7C,/*11 b*/0x58,/*12 c*/0x5E,/*13 d*/0x79,/*14 E*/0x71,/*15 F*/0x76,/*16 H*/0x38,/*17 L*/0x54,/*18 n*/0x73,/*19 P*/0x3E,/*20 U*/0x00,/*21 黑屏*/
};// TM1637串行数据线
sbit CLK = P2^0;
sbit DIO = P2^1;// LED灯
sbit LED = P3^0;void delay_us(unsigned int i)
{for (; i < 0; i--)_nop_();
}// TM1637开始信号
void TM1637_Start()
{CLK	= 1;DIO = 1;delay_us(2);DIO = 0;
}// TM1637结束信号
void TM1637_Stop()
{CLK = 0;DIO = 0;delay_us(2);CLK = 1;delay_us(2);DIO = 1;
}void TM1637_ACK(void)
{CLK = 0;DIO = 1;while(DIO == 1);CLK =1;
}// 向TM1637写数据
void TM1637_Write(unsigned char DATA)
{unsigned char i;for (i = 0; i < 8; i++){CLK = 0;if (DATA & 0x01){DIO = 1;}else{DIO = 0;}DATA = DATA >> 1;CLK = 1;delay_us(2);}
}void TM1637_Display(u8 index)
{TM1637_Start();TM1637_Write(0x40);	 // 命令TM1637_ACK();TM1637_Stop();TM1637_Start();TM1637_Write(0xC0);	 // 地址TM1637_ACK();	TM1637_Write(0x3F);	 // 数据1TM1637_ACK();TM1637_Write(0x3F);	 // 数据2TM1637_ACK();TM1637_Write(0x3F);	 // 数据3TM1637_ACK();TM1637_Write(0x3F);	 // 数据4TM1637_ACK();TM1637_Write(0x3F);	 // 数据5TM1637_ACK();TM1637_Write(index);	 // 数据6TM1637_ACK();TM1637_Stop();TM1637_Start();TM1637_Write(0x89);	 // 亮度命令TM1637_ACK();TM1637_Stop();
}void main()
{u8  num;LED =  LED_ON;TM1637_Display(tab[0]);while(1){num = key_scan();if(num!=0xFF){TM1637_Display(tab[num]);}}
}

五、电路仿真运行效果

六、完整Proteus仿真电路图和51单片机源码下载:

链接:https://pan.baidu.com/s/1TojZnTWu3sGl8oGfjc2dhw?pwd=ga5p
提取码:ga5p

http://www.lryc.cn/news/170643.html

相关文章:

  • js在一个时间范围内产生一个随机时间
  • Javascript Date 对象相关知识
  • Vim快捷用法
  • Stream流的常用方法(自用)
  • 【python函数】torch.nn.Embedding函数用法图解
  • with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found
  • [golang gui]fyne框架代码示例
  • 2000-2018年各省能源消费和碳排放数据
  • C# ref 学习1
  • MQ - 08 基础篇_消费者客户端SDK设计(下)
  • Flutter层对于Android 13存储权限的适配问题
  • Android kotlin开源项目-功能标题目录
  • Linux下,基于TCP与UDP协议,不同进程下单线程通信服务器
  • qt功能自己创作
  • Linux网络编程:使用UDP和TCP协议实现网络通信
  • 【后端速成 Vue】初识指令(上)
  • 爬虫 — Scrapy-Redis
  • tcpdump常用命令
  • 计算机网络运输层网络层补充
  • java CAS详解(深入源码剖析)
  • 1786_MTALAB代码生成把通用函数生成独立文件
  • 2023/09/19 qt day3
  • Docker 学习总结(78)—— Docker Rootless 让你的容器更安全
  • 如何使用ArcGIS Pro将等高线转DEM
  • 【爬虫基础】万字长文详解XPath
  • 分布式多级缓存SDK设计的思考
  • 设计模式:适配器模式(C++实现)
  • 【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
  • 容器技术所涉及Linux内核关键技术
  • IPV4和IPV6,公网IP和私有IP有什么区别?