【51单片机】【protues仿真】基于51单片机呼叫系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示

2、矩阵按键​

3、呼叫后数码管显示号数同时声光警报提示

4、应答按键按下后取消当前呼叫和声光警报

二、使用步骤

基于51单片机的呼叫系统设计(如病床呼叫、排队叫号等)是一种典型的嵌入式应用,采用数码管显示,矩阵按键和蜂鸣器组成。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、蜂鸣器模块,led灯模块

4、数码管显示模块

四、软件设计

#include <reg51.h>

#include"intrins.h"

#define uint unsigned int

#define uchr unsigned char

sbit led0=P2^2;

sbit buzzer=P2^3;

sbit dula=P2^6; //声明段选线选通端

sbit wela=P2^7; //声明位选线选通端

sbit clear=P3^4;

uchr key,shi,ge,count;

uchr code tab[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0x76,0x79,0x38,0x3f};

/*延时子函数,xms为形参*/

void delay(uint xms)

{

do

{

nop();

nop();

nop();

xms--;

}

while(xms);

}

/*矩阵键盘扫描子程序*/

void matrixkeyscan()

{

uint temp;

P3=0xf7; //给P3口赋值

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0) //检测是否有键按下

{

delay(6); //延时去抖

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0) //再次检测是否有键按下

{

temp=P3;

switch(temp)

{

case 0x77:

key=1;

break;

case 0xb7:

key=2;

break;

case 0xd7:

key=3;

break;

case 0xe7:

key=4;

break; //判断按下的是哪个键

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

} //等待按键释放

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(6);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0x7b:

key=5;

break;

case 0xbb:

key=6;

break;

case 0xdb:

key=7;

break;

case 0xeb:

key=8;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(6);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0x7d:

key=9;

break;

case 0xbd:

key=10;

break;

case 0xdd:

key=11;

break;

case 0xed:

key=12;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(6);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0x7e:

key=13;

break;

case 0xbe:

key=14;

break;

case 0xde:

key=15;

break;

case 0xee:

key=16;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

}

五、实验现象

演示视频:

相关推荐
不能跑的代码不是好代码2 小时前
STM32窗口看门狗(WWDG)知识点及标准库使用指南
stm32·单片机·嵌入式硬件
bingquan33332 小时前
在 Ghidra 中分析STM32裸机固件
stm32·单片机·嵌入式硬件
羽获飞2 小时前
从零开始学嵌入式之STM32——11.STM32---USART串行通讯
stm32·单片机·嵌入式硬件
宵时待雨4 小时前
STM32笔记归纳9:定时器
笔记·stm32·单片机·嵌入式硬件
逐步前行4 小时前
STM32_新建工程(寄存器版)
stm32·单片机·嵌入式硬件
bai5459365 小时前
STM32 CubeIDE 通过PWM占空比控制舵机角度
stm32·单片机·嵌入式硬件
2401_858936886 小时前
【Linux C 编程】标准 IO 详解与实战:从基础接口到文件操作实战
linux·c语言
松涛和鸣6 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
简单中的复杂7 小时前
【避坑指南】RK3576 Linux SDK 编译:解决 Buildroot 卡死在 host-gcc-final 的终极方案
linux·嵌入式硬件
上海合宙LuatOS7 小时前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程