🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家 ^ 星级博主~掘金⇿InfoQ创作者~周榜44»总榜2569🏅 🆔本文由 謓泽 原创 CSDN首发 🙉 如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客💬 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 📣系列专栏-『proteus』_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
💡『Protues』之 LED灯 💡de目录
这个系列是带大家从单片机和Protues这个软件一起结合进行学习的,如果你是一名新手小白那么在学习之前你可以先去了解下什么是C语言和单片机相关的知识点哟(●'◡'●) 当然也需要使用到这个ProtuesEDA仿真工具,那么我推荐你可以先看看辉哥的这篇手把手教你上手Protues写的真的非常之详细(ง •_•)ง 手把手教你上手Proteus(下载安装+仿真51单片机程序)_小辉_Super的博客-CSDN博客_proteus
之所以要配合单片机一起是因为Protues这款仿真从原理图布图以及代码调试到单片机与外围电路协同仿真和一键切换到PCB设计是真正实现了从概念到产品的完整设计。
因此配合(Proteus) ➕ 单片机来一起学习。
正片开始之前,我们先来学习了解一下二极管。二极管的最大的特点就是具有:单向导电性!电流只允许从一个方向通过,二极管当中的正向电流是从无色环当中流向有色环当中『重点★』
而在这里我们用到的发光二级管也就无非是当导通的时候就会点亮,亮度的颜色和工作电压根据你所选择的发光二极管来决定的,越鲜艳的颜色二极管的工作电压也就越高。
🍅注⇢二极管是工作在正向电压区的,而稳压二极管工作在反向电压区上的。
这个是要配合keil软件去使用的,如果你还不清楚keil软件的话可以看看博主这篇文章。 keil5如何创建工程_謓泽的博客-CSDN博客_keil5怎么新建工程
我们现在先对P2.0进行LED灯的点亮,如下图所示↓(注:我们这里LED灯点亮已共阳为标准)
点亮D1的LED灯达到点亮并且点亮1s后熄灭循环往复。 🍯 程序代码如下↓
#include <REGX52.H>
#include <INTRINS.H> //_nop_();需要的头文件
sbit LED0=P2^0;
void Delay(unsigned int xms)
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
while(1)
{
LED0 = 0; //点亮
Delay(1000);//延迟
LED0 = 1; //熄灭
Delay(1000);//延迟
}
}
sbit⇢专门对位进行控制的,sbit是C51单片机中位地址的定义指令。单片机的编程需要控制字节地址或位地址进行输入和输出,以控制其它设备,而位地址定义指令 sbit 可以使编程简洁易读。
看到这里张三同学此时想要实现一个流水灯的效果请你帮助它实现一下吧(o゚v゚)ノ
🌺流水灯
🍯 程序代码如下↓
#include <REGX52.H>
#include <INTRINS.H>//_nop_()所需头文件
void Delay(unsigned int xms)
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
int i = 0;
while(1)
{
for(i=0;i<8;i++)
{
P2 = ~(0x01<<i);//1111 1110 按位左移操作符
Delay(1000);
}
}
}
📙程序代码经过实验有效\^o^/
🍊注⇢单片机和C语言还是不一样的,我们单片机这里的死循环是必须要保证我们的单片机不断地工作运行的。
🍏拓展知识点⇥将一个运算对象的各二进制位全部左移若干位 (左边的二进制位丢弃,右边补0)~取反(~)号是取反操作0变1、1变0
🍎说明知识点→在单片机当中自带时钟频率(仿真)如果是实物的话就需要加上了。
⒈共阳极⇢低电平导通,二极管P极连接到电源。
⒉共阴极⇢高电平导通,二极管N极连接到接地。
🍈注释
注释的操作也是很简单的如下↓
📑作业内容→实现现点亮共阳和共阴的LED灯依次从第一个到最后一个,点亮之后结束共阳的点亮从而点亮共阴的LED灯从第一个灯到最后一个灯(共⑧个灯、延迟0.1s)循环往复。 🌺仿真图
🍯 程序代码如下↓
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
int i = 0;
P1=0x00;
while(1)
{
for(i=0;i<8;i++)
{
P2 = ~(0x01<<i);//1111 1110 按位左移操作符
Delay(100);
}
P2 = 0xFF;//置1
for(i=0;i<8;i++)
{
P1 = 0x01<<i;//0000 0001
Delay(100);
}
P1 = 0x00;//置0
}
}
📋程序实现→花式流水灯的实现。 📝要求⇢随意发挥只要觉得花❀就可以了以P2口和共阳为标准。
/*
花式流水灯的实现方案
0:延时0.1s
一:从低位到高位
二:从高位到低位
三:全亮再全灭
四:高位亮低位熄灭、低位亮高位熄灭。
五:单数亮、双数灭。
六:双数亮、单数灭。
七:从边缘向中间靠近,再从边缘向中间扩散。
八:依次熄灭灯从高位到低位、低位到高位。
*/
📚注→以上的花式流水灯的实现方案是博主自己写的一套花式流水灯当然也可以按照你的标准来写一套自己的花式流水灯哟ヾ(^▽^*))) 🍯 程序代码如下↓
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
_nop_();
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main()
{
unsigned int i = 0;
while(1)
{
//一:从低位到高位
for(i=0;i<8;i++)
{
P2 = ~(0x01<<i);
Delay(100);
}
//二:从高位到低位
for(i=1;i<8;i++)
{
P2 = ~(0x80>>i);
Delay(100);
}
//三:全亮0.2s全灭0.2s
P2=0;
Delay(100);
P2=1;
Delay(100);
//四:高位亮低位熄灭、低位亮高位熄灭。(0.3s)
P2 = 0x0F;
Delay(100);
P2 = 0xF0;
Delay(100);
//五:单数亮、双数灭。0.2S
P2 = 0|(0xAA);
Delay(100);
P2 = 1;//清0
//六:双数亮、单数灭。0.2S
P2 = 0|(0x55);
Delay(100);
//七:从边缘向中间靠近,再从中间向边缘扩散。
for(i = 0;i < 8;i++)
{
P2 = (0xFF & ~(0x01 << i)) & (0xFF & ~(0x80 >> i));
Delay(100);
}
//八:依次熄灭灯从高位到低位、低位到高位。
for(i=0;i<8;i++)
{
P2 = (0x80>>i);
Delay(100);
}
for(i=1;i<8;i++)
{
P2 = (0x01<<i);
Delay(100);
}
}
}
🍋花式流水灯视频如下所示↓ 花式流水灯❀❀❀❀❀❀❀❀❀ https://live.csdn.net/v/embed/215754
那么今天的知识点就先到这里吧 如果觉得博主的这篇文章不错的话麻烦给博主一个三连。你的三连就是对我最大的支持^_+。这句话感觉好耳熟啊(doge)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有