前言

该笔记记录了4月11日上午在粤嵌兴趣课中学习的内容。本次兴趣课我的设备环境如下:
硬件方面
单片机:C51
CPU:AT89C52
软件方面
IDE:Keil uVision4
烧写软件:stc-isp-15xx-v6.85H.exe
驱动:ch341ser(适用于win10操作系统)
实验部分

1、C51单片机实现蜂鸣器实验
2、实现运行流水灯的同时可通过独立按键改变蜂鸣器状态
附:一个更好的实验2的代码(链接)

课堂笔记部分
1、轮询
2、中断
3、C51单片机的中断源以及中断的使用

正文

实验部分

1、C51单片机实现蜂鸣器实验

大家经过计算机或者电子的学生实验室,可能会经常听到一些刺耳的声响,这一般是实验室里的同学做单片机实验时弄响了单片机上的蜂鸣器。
打开C51单片机引脚图,找到蜂鸣器以及蜂鸣器对应的引脚


如图,蜂鸣器引脚(FM)与CPU上的P07号引脚相连接,同时也可看出输入0时蜂鸣器才会运行发声,因此可按照点亮LED的方法编写程序

#include<reg52.h>
#include<intrins.h>
#define bara unsigned intsfr p1= 0x90;
sbit bee = P0^7;int main()
{while(1){bee = 0;}
}

之后再烧写到单片机上。
编写程序时引脚设置错误:这么小声(没声音)还想当蜂鸣器!?设置正确:你吼辣么大声干什么啦!!

2、实现运行流水灯的同时可通过独立按键改变蜂鸣器状态

这可能是开课以来我遇到的最难的实验,一个上午几乎都耗在了这个实验上。但是我完成了这个实验,才感觉自己入了C51单片机的门 (很有可能在不久后还会入一次C51的门) (一种知识的入门可以有无数次)
设置需要用到的引脚()
根据上节课的知识点,要想让流水灯运行的同时,还能实现按键改变蜂鸣器状态,需要:在检测到按键按下时,让单片机短暂的暂停流水灯,将蜂鸣器状态改变后再继续运行流水灯。暂停流水灯的时间必须要足够短,以至于无法察觉。
中断:你直接点我名算了
很明显需要设定一个中断,使按键电平变化的时候改变蜂鸣器的电平,因此该中断是外部中断。
先设置中断操作函数:

void int0()interrupt 2//外部中断,且要生成高电平
{                     //高电平的原因:LED遇到高电平停止工作sleep(1000);       //先延时,和按键控制一样,需要一定时间进行判断if(bee==1) {//若蜂鸣器为高电平,则改为低电平bee=0;}else{bee=1;}//若蜂鸣器为低电平,则改为高电平
}

然后在主函数中将IE寄存器(控制外部中断)初始化,并设置为下沿方式触发

EA = 1;EX1 = 1;IT1 = 1;//下沿触发      bee = 1;

完整代码如下:

#include<reg52.h>
#include<intrins.h>
#define bara unsigned intsfr p1= 0x90;
sbit key = P3^7;
sbit led1 = p1^0;
sbit led2 = p1^1;
sbit led3 = p1^2;
sbit led4 = p1^3;
sbit led5 = p1^4;
sbit led6 = p1^5;
sbit led7 = p1^6;
sbit led8 = p1^7;
sbit bee = P0^7;void sleep(bara n)
{bara i;for(i=0;i<n;i++){}
}void light_water()
{led1=0;sleep(5000);led1=1;led2=0;sleep(5000);led2=1;led3=0;sleep(5000);led3=1;led4=0;sleep(5000);led4=1;led5=0;sleep(5000);led5=1;led6=0;sleep(5000);led6=1;led7=0;sleep(5000);led7=1;led8=0;sleep(5000);led8=1;led7=0;sleep(5000);led7=1;led6=0;sleep(5000);led6=1;led5=0;sleep(5000);led5=1;led4=0;sleep(5000);led4=1;led3=0;sleep(5000);led3=1;led2=0;sleep(5000);led2=1;led1=0;sleep(5000);led1=1;
} void int1() interrupt 2
{sleep(1000);if(bee==1)   {bee=0;}else{bee=1;}
}int main()
{EA = 1;EX1 = 1;IT1 = 1;//下沿触发    bee = 1; while(1){light_water();//流水灯}return 0;
}

将程序烧写到单片机上,按下电源键,流水灯开始运行;当按下key1时即可触发中断,让程序暂时放下流水灯,将蜂鸣器的电平置反后继续运行流水灯,由于中断使劲啊极短,因此看起来流水灯并无停顿
我这个代码看起来比较玄学。。。整篇代码没提到过独立按键的变量,却能用独立按键引发中断。。。

我看了一下和我一起上兴趣课的另一位大神的博客,感觉他这段实验的代码比我的正确性更高、更直白且设置起来更自由,在此向大家推荐:

2021-04-11 粤嵌单片机兴趣课(三)

因为是模仿他,所以我们博客的标题特别雷同

课程笔记部分

在我的上一篇博客中,我记录了关于对中断的大致定义以及中断编号、中断优先级的认识,本次课程连接上次。

1、中断的使能开关

中断的使能开关位于IE寄存器处,其各引脚以及功能如下表所示

被定义的变量名 对应引脚 功能介绍
(sbit)EA IE^7 中断总开关
(sbit)ET2 IE^5 (不清楚,后续会补上)
(sbit)ES IE^4 串口中断开关
(sbit)ET1 IE^3 定时器中断开关(1)
(sbit)EX1 IE^2 外部中断开关(1)
(sbit)ET0 IE^1 定时器中断开关(0)
(sbit)EX0 IE^0 外部中断开关(0)

2、外部中断的触发方式以及配置代码

外部中断有两种触发方式:低电平触发下降沿触发
两种触发方式区别:

一、触发条件不同

1、低电平触发:外部中断低电平触发是检测到引脚为低电平就触发,从而进入中断函数中处理这个中断。

2、下降沿触发:下降沿触发是检测到信号有下降沿时的开关动作就触发,从而进入中断函数中处理这个中断。

二、触发次数不同

1、低电平触发:外部中断低电平触发只要引脚为低电平时间内中断一直有效,那么就会一直进入中断,直到电平变化为高电平。

2、下降沿触发:下降沿触发中断只会触发一次,只有在下次电平发生变化时才会重新触发中断。

在程序运行时对ITx(x=1或0)变量赋值,可以控制外部中断的触发方式:若为0则是低电平触发,为1则是下降沿触发;
x的取值表示第几号IE寄存器,因为IE寄存器有0号和1号两个,每次程序运行时只能调用其中一个,因此要注意。

常见的设置IE寄存器函数编写如下:

void config()
{IT1 = 0;//1号IE寄存器设置为低电平触发EA = 1;//打开中断总开关EX1 = 1;//打开外部中断1开关
}

2021年4月11日-粤嵌智能小车兴趣课笔记(3)相关推荐

  1. 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...

    在影之刃3手游中2021年3月11日更新了哪些有趣的内容呢?想了解本次更新情况内容如何的话,接下来就让我们一起来看一下吧~! 入局者敬启, <影之刃3>将于3月11日对全部服务器进行停服维 ...

  2. c++builder 6 转成vs_官方:欧洲杯将在2021年6月11日至7月11日进行,举办城市不变...

    欧足联官方宣布,2020欧洲杯仍将在原定的12座城市举办,比赛时间定在2021年6月11日-7月11日. 希望退票的球迷可以在2020年6月18日至6月25日进行退票. 2020欧洲杯附加赛暂定于今年 ...

  3. 如何让大中药丸子便于下咽, 2021年3月11日 更新 同样适用于中药粉

    2021年3月11日 更新 药粉配合胶囊板直接装入胶囊即可. 将大蜜丸,手动搓成长条,买0#胶囊壳,分成小段装入胶囊,然后用. 量少,比如一次吃一丸两丸,现做现吃. 量大可以批量手工制作,配套胶囊板, ...

  4. 最新微信8.0.1抢红包神器-亲测2021年2月11日可用-安卓IOS

    最新微信8.0.1抢红包神器-亲测2021年2月11日可用-安卓&IOS 文章目录 概述 效果图 使用指南 获取方式 概述 今晚就过年了,相信很多朋友在微信群能收到很多红包,但是过年可能吃的更 ...

  5. 小森生活服务器维护公告,小森生活2021年5月11日停服更新公告

    小森生活将在2021年5月11日凌晨时分进行停机维护,而本次维护的内容也是不少玩家一直都想了解的!不清楚的话,下面就来看一下吧! 小森生活2021年5月11日停服更新公告 小森生活计划在2021年5月 ...

  6. dnf手游服务器维护时效,DNF手游延期到2021年2月11日是真的吗 延期日期详细说明...

    DNF手游延期大家都已经知道了,但是很多玩家看到贴吧上写的期到2021年2月11日,本次就为大家带来了DNF手游延期到2021年2月11日是真的吗,也是延期日期详细说明,希望能帮到大家. DNF手游延 ...

  7. 神雕侠侣手游服务器维修,《神雕侠侣》2021年3月11日更新维护新服开启公告

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 亲爱的玩家: 为了给您提供更好的游戏体验,我们将于2021年3月11日上午8:00-11:00对所有服务器进行停机更新维护,预计维护时间3小时. 若提前完 ...

  8. 线下沙龙 | 5月11日 ,百度智能云网络技术实践分享强势来袭!

    云计算经过了十余年的发展,逐渐成为了我们个人和商业生活中不可或缺的组成部分.早期,云技术只是一个新鲜的词汇,而如今,随着全球云计算领域的活跃创新和我国云计算发展进入应用普及阶段,简单的云资源池之间的互 ...

  9. (更新时间)2021年5月11日 MongoDB数据库 MongoDB面试题

    MongoDB高频面试题 文章目录 MongoDB高频面试题 1.MongoDB是什么? 2.MongoDB有哪些特点? 3.MySQL与MongoDB之间最基本的差别是什么? 4.monogodb中 ...

  10. 2021年5月11日19:50:56 学习 真的很难吗?

    你们都是怎么看待学习的? 老子说:"为学日益,为道 日损." 意思就是 学习世间知识技能,越多越好.  学习智慧,脑子里面装的越少越好. 我的时间都去了哪里? 你们对于这个世间有什 ...

最新文章

  1. 在 .NET Core 3.0 中实现 JIT 编译的 JSON 序列化,及一些心得与随想
  2. 用java写注册表单_利用HTML表单标签编写一个注册页面
  3. WebConfig Authorization 节点
  4. php只取时间的下士_PHP 获取时间的各种处理方式!
  5. java 风车_Java兴趣编程-转动的大风车
  6. linux 丢包多少正常_干货总结!Linux运维故障排查思路
  7. [CTO札记]Disney也进军数字出版市场了
  8. 年度回顾 | 2019 年的 Apache Flink(文末有福利)
  9. 普通IC、M1、UID、CUID、FUID、UFUID卡的区别
  10. webservice调用,控制台输出错误:编码GBK的不可映射字符
  11. 计算机科学导论复习提纲,计算机科学导论复习资料整理
  12. 矩阵计算与AI革命:可将计算性能提高150倍的异构计算
  13. macos系统镜像iso_Windows10操作系统iso镜像、微软正版软件下载站:MSDN,我告诉你...
  14. 转载:HTTP调试工具:Fiddler的使用方法介绍
  15. 爬虫入门之查找JS入口篇(七)
  16. 计算机右键菜单更换顺序,win10系统调整右键菜单选项顺序的恢复技巧
  17. Linux计划任务-定时任务
  18. 【原创】【NOIP】文化之旅
  19. [2008-05-26]我的梦
  20. Xcode10 开启暗黑模式(dark mode)

热门文章

  1. UE4 虚幻 常用的流程控制蓝图节点介绍
  2. 路飞学城-python开发集训-第一章
  3. numpy 随机生成矩阵
  4. xbox360手柄win10无法识别,显示未知设备
  5. 部署3PAR VSP5.0.9.2监控3PAR实时邮件告警状态
  6. PS——ps打开webp格式的图片
  7. java的简单逻辑博彩游戏craps
  8. 基因的entrez ID 跟symbol等其它ID的转换程序
  9. c语言里的pow函数(好理解,易懂)
  10. 金融壹账通拟7月4日香港上市:2年亏近30亿 市值蒸发超90%