【精选】搞了个单片机2:进阶led控制(亮灭和两种流水控制方式)、延时时间控制、蜂鸣器。(蓝桥杯单片机速成)(零基础!超详细!小白速成!教你跑遍单片机例程!)

您所在的位置:网站首页 单片机全亮全灭程序怎么设置 【精选】搞了个单片机2:进阶led控制(亮灭和两种流水控制方式)、延时时间控制、蜂鸣器。(蓝桥杯单片机速成)(零基础!超详细!小白速成!教你跑遍单片机例程!)

【精选】搞了个单片机2:进阶led控制(亮灭和两种流水控制方式)、延时时间控制、蜂鸣器。(蓝桥杯单片机速成)(零基础!超详细!小白速成!教你跑遍单片机例程!)

2023-10-24 07:46| 来源: 网络整理| 查看: 265

前言:如果有软件不会使用的,可以参考官方的给出的资源包里面的软件使用,里面不仅包含了如何安装软件也涵盖了一些例程的演示

LED的简单亮灭

我们先来操控LED的简单亮灭,然后再来控制亮灭的时间。

上节课,我说过,用总线控制法来写下一个程序,现在,根据上节课的基础,我来写一个程序

#include void main(void) { P2 = ((P2&0x1f)|0x80); P0 = 0xfe; P2 &= 0x1f; }

操控的时候,要格外注意大小写,为什么P0、P2要大写呢?其实,在reg52.h里面,定义了P0、P2口,所以,我们要按照规范来。否则会出现未定义的情况。上面的程序是控制第一个LED灯亮。P07-P00的二进制是1111 1110,给低电平就是亮了,具体原因在上一篇博客中。 好,现在还只是亮,下面,我先写一个循环和简易的延时来控制亮灭进程。

#include void main(void) { unsigned int a; while(1) { a = 65535; P2 = ((P2&0x1f)|0x80); P0 = 0xfe; //open LED P2 &= 0x1f; while(a--); a = 65535; P2 = ((P2&0x1f)|0x80); P0 = 0xff;//close LED P2 &= 0x1f; while(a--); } }

在这里插入图片描述视频点这里观看 目前为止,这还是个简陋的亮灭程序,下面,我们来研究更方便控制的延时。

这里插入一个小知识点,keil里面的宏定义格式 : #define 自定义的名字 原本的规范名字 例如:#define uint unsigned int

现在,我考虑用for循环来试一试,你们也可以用do while循环,而且在官方例程上,我们可以看到do while循环,目前,我采用for循环。

#include #define uint unsigned int void delay(uint k) { uint i = 0; uint j = 0; for(i=700;i>0;i--) { for(j=0;j while(1) { P2 = ((P2&0x1f)|0x80); P0 = 0xfe; //open LED P2 &= 0x1f; delay(500); P2 = ((P2&0x1f)|0x80); P0 = 0xff;//close LED P2 &= 0x1f; delay(500); } }

在这里插入图片描述 在这里插入图片描述 这个我也录制了视频, 视频点这里观看.

蜂鸣器的使用

老样子啊,我们需要先观看原理图,这里我先告知一下,蜂鸣器的英语单词: 在这里插入图片描述 好,知道了这个单词之后,我们来找原理图上面的蜂鸣器 在这里插入图片描述 这里可以类比LED,给0。想要关闭蜂鸣器,那就在我图中标识的地方,给高电平,也就是给1。 接下来,我们再找这个N_BUZZ连的是哪里 在这里插入图片描述 我给大家连起来了,这样观赏比较直观,再接着,我们又看到这个蜂鸣器的左端寄存器和LED很像,那么我们要根据左端的Y5C找到对应的Y5口 在这里插入图片描述 再接着找Y5连在哪里 在这里插入图片描述 左端的寄存器,是否似曾相识?没错!就是也控制LED的那个,原理我已经在上一篇文章中叙述过了 那么此时,我们需要给Y5一个低电平也就是0,使电流通过。 在这里插入图片描述 我们需要P27-5的控制是这个结果,你可以直接转换成16进制 赋值给P2,也可以按照我之前说的,为了方便查看,按照官方例程来,先给P2的高三位初始化,这个步骤也在我上一篇文章中说过了,下面,我直接通过蜂鸣器的信号来控制了,你也可以采用总线控制,但我觉得位控制比较方便:

sbit BUZZ = P0^6; void cbuzz(uint c) { P2 = ((P2&0x1f)|0xA0); BUZZ = c; P2 &= 0x1f; }

为什么是P0^6?这就是原因: 在这里插入图片描述 这个蜂鸣器函数封装好了,我们只需要调用就好了,下面是目前的总程序:

#include #define uint unsigned int sbit BUZZ = P0^6; void cbuzz(uint c) { P2 = ((P2&0x1f)|0xA0); BUZZ = c; P2 &= 0x1f; } void delay(uint k) { uint i = 0; uint j = 0; for(i=700;i>0;i--) { for(j=0;j while(1) { P2 = ((P2&0x1f)|0x80); P0 = 0xfe; //open LED P2 &= 0x1f; cbuzz(0); delay(500); P2 = ((P2&0x1f)|0x80); P0 = 0xff;//close LED P2 &= 0x1f; cbuzz(1); delay(500); } }

来吧!!展示! 在这里插入图片描述 视频点这里观看.

流水灯走起!

终于到了这个环节了,接下来,我手把手教你们跑流水灯,通过库函数,和操作符两种方法,完成流水灯的设计

顺流流水灯

①库函数的方法 首先,我们要知道2个库函数:crol 还有cror 在这里插入图片描述 在这里插入图片描述 这个原理解释清楚了,那么cror的原理就不难理解了吧。r是right也就是右的意思,l是left也就是左的意思。 好,现在我们可以知道这两个函数的用途了,我们先体验一下这crol这个函数,cror就留给你们自己体验看成果。 代码如下:

#include #include #define uint unsigned int sbit BUZZ = P0^6; void cbuzz(uint c) { P2 = ((P2&0x1f)|0xA0); BUZZ = c; P2 &= 0x1f; } void delay(uint k) { uint i = 0; uint j = 0; for(i=700;i>0;i--) { for(j=0;j uint temp = 0; temp = 0xfe; P0 = temp; while(1) { P2 = ((P2&0x1f)|0x80); temp = _crol_(temp,1); P0 = temp; P2 &=0x1f; cbuzz(0); delay(500); cbuzz(1); delay(500); } }

在这里插入图片描述

来吧!展示! 在这里插入图片描述 视频点击这里观看.

②操作符的方法: 在这里插入图片描述 代码如下:

#include #define uint unsigned int sbit BUZZ = P0^6; void cbuzz(uint c) { P2 = ((P2&0x1f)|0xA0); BUZZ = c; P2 &= 0x1f; } void delay(uint k) { uint i = 0; uint j = 0; for(i=700;i>0;i--) { for(j=0;j uint temp = 0; temp = 0xfe; P0 = temp; while(1) { P2 = ((P2&0x1f)|0x80); //temp = _crol_(temp,1); P0 = temp; temp uint i = 0; uint j = 0; for(i=700;i>0;i--) { for(j=0;j uint temp = 0; temp = 0xfe; P0 = temp; while(1) { while(temp != 0x00) { P2 = ((P2&0x1f)|0x80); //temp = _crol_(temp,1); P0 = temp; temp


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3