Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >山东大学单片机原理与应用实验 4.1 按键声光报警实验

山东大学单片机原理与应用实验 4.1 按键声光报警实验

作者头像
timerring
发布于 2022-07-20 06:19:16
发布于 2022-07-20 06:19:16
1.2K00
代码可运行
举报
文章被收录于专栏:TechBlogTechBlog
运行总次数:0
代码可运行

目录

一、实验题目

二、实验要求

三、实验过程及结果

四、实验流程图

五、实验源代码


一、实验题目

4.4按键声光报警实验

二、实验要求

1、画出实验的流程图

2、编写源程序并进行注释

3、记录实验过程

4、记录程序运行结果截图

三、实验过程及结果

本实验联系静态按键识别,发光二极管驱动,以及外部中断的使用方法,实验原理图如下图1所示(注:图中元件编号中括号里面的内容表示该元件所在的板子名称,如CPU 表示该元器件位于CPU 板,以下类同)。

图1:实验原理图

要求利用外部硬件中断,按键按下一次产生一次外部中断,在中断服务程序中计数器加1,同时,通过发光二极管的闪烁和蜂鸣器响的次数,指示计数器的当前值。当计数到10时,再次按键将重新从1开始计。

1. 在实验前先采用软件仿真的方式验证代码。

   1)使用Proteus软件搭建实验电路如下所示:

图2:实验电路图

 2)使用keil软件新建工程与文件,将代码写入,并且build,将hex文件导入

 3)观察实验结果如下图所示,可知程序运行符合题意:

图3:仿真实验结果

2. 硬件实验运行

1)关掉实验箱电源。将 MCU 板插接在母板上,按照前面连接关系表将硬件连接好。

2)在仿真器断电情况下将仿真器的仿真头插在 MCU 板的MCU 插座上。将仿真器与开发PC 机的通信口连接好,打开实验箱及仿真器的电源。

3)运行 Keil uVision2 开发环境,建立工程int0_c.uV2,MCU 为AT89S51,包含启动文件STARTUP.A51。

4)按照实验功能要求创建源程序 int0.c 并加入到工程int0_c.uV2,并设置工程

int0_c.uV2 属性,将其晶振频率设置为11.0592MHz,选择输出可执行文件,DEBUG方式选择硬件DEBUG,并选择其中的“WAVE V series MCS51 Driver”仿真器。 5)构造(Build)工程 int0_c.uV2。如果编程有误进行修改,直至构造正确为止。

6)运行程序,按下 MCU 板上的KEY0 按键,观察每次按键按下时主板上的发光二极管的闪烁和蜂鸣器响的次数,是否符合程序要求,若不符合要求,分析出错原因,继续重复第4、5 步的步骤,直至结果正确。

通过硬件实验可知,按下按键即可看到灯闪一次,蜂鸣器响一次;再次按下,就是闪两次,响两次。一直到最后闪10次,响十次;再次按下时,跳回1重新开始。

四、实验流程图

图4:实验流程图

五、实验源代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led=P3^0;     //定义led灯控制端口
sbit bell=P3^1;    //定义蜂鸣器控制端口
sbit key=P3^2;    //定义报警控制端口
uchar count,i;    //定义计数器
void delay(uchar count)  // 定义延时函数
{
	uint x,y;
	for(x=count;x>0;x--)   //循环嵌套
    	for(y=110;y>0;y--);  //1ms延时函数
}//总延时为count*1 ms 

void show(uchar count)  // 定义蜂鸣器报警并且灯光闪烁
{     i=count; 	//循环变量
      for(;i!=0;i--)   //函数循环次数
          {led=0;   //置低电平则LED灯亮
           bell=0;   // 置低电平则蜂鸣器响
           delay(500); //调用延时函数
           led=1; //置高电平则LED灯灭
           bell=1; //置高电平蜂鸣器不响
           delay(500); //调用延时函数
           }
}
void s_timer0() interrupt 0 using 0 // 定义中断程序
{
EA=0;   //屏蔽中断请求
     if(count!=10)
          count=count+1;   //count自增
     show(count); 
     delay(50);//延时
     if(count==10)   // 紧接着就要判断是否是10,否则,再响十次之后,下一次不会是响一次。
           count=0;  //若count为10则结束,重新赋值为0
     EA=1;  //允许中断
}
void main()     // 主程序
{     
    EA=1;    //允许中断
	EX0=1;     //允许外部中断0中断
	IT0=0;   //设置外中断0为电平触发方式
	while(1);   //循环 
}

初学单片机,可能存在错误之处,还请各位不吝赐教。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
山东大学单片机原理与应用实验 4.5 8255并行I/O扩展及交通信号灯控制实验
本实验利用 8255 实现可编程的并行 IO 扩展功能,并利用其完成交通灯控制。实验要求红灯常亮 30S,绿灯常亮 25S 后闪烁 5S。使用静态数码管显示绿灯常亮倒计时。实验原理图1如下:
timerring
2022/07/20
1.1K0
山东大学单片机原理与应用实验 4.5 8255并行I/O扩展及交通信号灯控制实验
山东大学单片机原理与应用实验 4.7 7279键盘扫描及动态LED显示实验
1. 关掉实验箱电源。将 MCU 板,KEY&LED 板插接在母板上。按照前面连接关系表将硬件连接好。
timerring
2022/07/20
7590
山东大学单片机原理与应用实验 4.7 7279键盘扫描及动态LED显示实验
基于51单片机的流水灯设计
设计思路一(未用中断): 8个LED灯正极解电源,负极接单片机I/O口。 死循环:设置P2口为11111110,使用左移函数,循环七次。 同时每次位移中间加入延时函数。 三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响: 思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环 设置变量j,按下B,j++,当j大于3,j=j-3;使用j*1000,来空置循环函数的延时时间。设置bit变量s=0,按下按键C,s++,当s=1,j进入循环蜂鸣器响,s=0退出循环。 在每次延时时检查按键
全栈程序员站长
2022/08/18
8420
基于51单片机的流水灯设计
山东大学单片机原理与应用实验 3.1 基本并行I/O口实验
实现功能:要求当SW1按键被按下后,D1-D8轮流点亮,点亮时间为100ms,当按键停下后,停止轮换;再次按下后,继续轮换。
timerring
2022/07/20
9130
山东大学单片机原理与应用实验 3.1 基本并行I/O口实验
单片机入门:LED灯闪烁
本设计需要闪烁一个LED小灯, LED(发光二极管)正极接+5V电源,负极接单片机P1.0口,这样只要单片机P1.0口输出高低电平就可以实现LED灯的闪烁。
电子工程师成长日记
2022/07/21
1.5K0
单片机入门:LED灯闪烁
51单片机入门:LED灯实现不同频率闪烁
在上一篇文章中,我们用51单片机实现了单个LED灯的闪烁,但闪烁频率固定的。下面我们实现LED灯不同频率的闪烁!
电子工程师成长日记
2022/07/21
3.8K0
51单片机入门:LED灯实现不同频率闪烁
单片机ds1302时钟程序(51单片机液晶显示程序)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129766.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
1.4K1
单片机ds1302时钟程序(51单片机液晶显示程序)
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%—95%),不影响检测到结果。频率检测的结果通过LCD1602的第一行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5μs的脉冲信号。
timerring
2022/07/20
9710
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
单片机零基础学习之从“点灯”入门STM32
  本篇文章通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程。
用户6754675
2020/01/13
7840
51单片机开发中一些常用代码块
数码管中的16个字符 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 延时函数(使用之前先声明一遍) void delay(uint); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 点亮第一个二级管 #include //点亮第一个发光二级管
Gorit
2021/12/09
6410
山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件。
timerring
2022/07/20
7450
山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)
本学期单片机课程要求做课程设计,我选取的课题如下: 基于单片机的电子时钟设计,要求: (1)实时显示当前时间; (2)能够对时间进行设置; (3)包括年月日,小时,分钟,秒. (4)整点提醒功能. 经过一周的时间已实现上述功能,故在此分享一下;
全栈程序员站长
2022/09/15
4.7K2
基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)
单片机入门:LED灯循环左移点亮
本设计需要实现8个LED灯的循环点亮。LED(发光二极管)正极接+5V电源,负极接单片机P1口,这样只要单片机P1口输出高低电平就可以导通二极管,实现LED灯的点亮与熄灭。
电子工程师成长日记
2022/07/21
2.2K0
单片机入门:LED灯循环左移点亮
山东大学单片机原理与应用实验 3.7LCD 1602显示实验
要求利用LCD1602和16个按键实现简单的十进制数的加减乘除四则运算。其中按键KEY0-KEY9代表数字0-9,按键KEY10-KEY13分别代表运算符+、-、*、/,按键KEY15代表=,按键KEY14代表清除命令。不管什么时候按下清除按键,计算过程均将停止,两个输入变量清零,屏幕将清屏。
timerring
2022/07/20
8950
山东大学单片机原理与应用实验 3.7LCD 1602显示实验
单片机入门:LED灯循环右移点亮
本设计需要实现8个LED灯的循环点亮。LED(发光二极管)正极接+5V电源,负极接单片机P1口,这样只要单片机P1口输出高低电平就可以导通二极管,实现LED灯的点亮与熄灭。
电子工程师成长日记
2022/07/21
1.7K0
单片机入门:LED灯循环右移点亮
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
4890
山东大学单片机原理与应用实验 3.3 静态LED显示实验
7SEG2 为十位显示数码管,7SEG1 为个位显示数码管,KEY_LOAD:倒计时初值按钮,KEY_START:倒计时启动按钮
timerring
2022/07/20
6650
山东大学单片机原理与应用实验 3.3 静态LED显示实验
51单片机流水灯的实现
流水等的实现需要先实现灯光的闪烁 #include #define uint unsigned int sbit p1=P1^0; void delay1s(); main() {     while(1)         {             p1=0;//打开第一个发光二极管             delay1s();//延迟一秒             p1=1;//关闭第一个发光二级管             delay1s();         } } void delay1s() {  
Gorit
2021/12/09
4950
单片机入门:LED双向流水灯
本设计需要实现8个LED灯的循环点亮。LED(发光二极管)正极接+5V电源,负极接单片机P1口,这样只要单片机P1口输出高低电平就可以导通二极管,实现LED灯的点亮与熄灭。
电子工程师成长日记
2022/07/21
1.2K0
单片机入门:LED双向流水灯
基于单片机的简易声光报时时钟
本设计采用STC89C51单片机作为主控制器,外部加上74HC573驱动数码管。系统总体框图如下:
一条晒干的咸鱼
2024/11/19
1310
基于单片机的简易声光报时时钟
推荐阅读
相关推荐
山东大学单片机原理与应用实验 4.5 8255并行I/O扩展及交通信号灯控制实验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验