【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 天前
C语言内存函数
c语言·后端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874754 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
m0_531237174 天前
C语言-数组练习进阶
c语言·开发语言·算法
Lester_11014 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元4 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133974 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315204 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书4 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http