电话+V:159999-78052,欢迎咨询单片机移位小灯程序,[小程序设计与开发],[小程序投流与推广],[小程序后台搭建],[小程序整套源码打包],[为个体及小微企业助力],[电商新零售模式],[小程序运营推广及维护]
要使用80C51单片机硬件控制小灯,我们需要理解代码逻辑并将其应用到实际硬件中。
首先,`#includemain()`这一行表示我们使用的是单片机的主函数。主函数是单片机程序的入口点,所有程序执行都将从此处开始。
然后,`inti,j,LED;`定义了三个变量,`i`和`j`作为循环计数器,`LED`用于存储控制小灯的二进制编码。
接下来,`LED=0xfe;`将`LED`变量初始化为十六进制数0xfe,它在二进制表示下为11111110。
在`for(j=0;j<8;j++)`循环中,`LED`变量的值通过左移操作符`<<`和按位或运算符`|`进行更新。每次循环`j`增加1,`LED`的值左移一位,再与0x01进行按位或运算,将最低位设置为1。这样,`LED`变量就代表了8位二进制数,每一位对应小灯的亮灭状态。
在外部的`for(i=0;i<30000;i++)`循环中,程序暂停30000次循环。每次循环结束时,小灯的状态通过`P0=LED;`命令进行更新。单片机通过P0端口输出当前的`LED`值,从而控制小灯的亮灭。
在实际应用中,你需要将80C51单片机连接到外部的LED电路。确保电路中包含一个电阻,用来限制电流并保护单片机。通过控制P0端口输出的高低电平,你可以控制小灯的亮灭。
#include
#defineuintunsignedint
sbitLED=P1^0;
sbitKEY1=P1^2;
voiddelay(uint);
voidmain(void)
{
LED=1;//初始化LED熄灭
KEY1=1;//赋值KEY1高电平
while(1)
{
if(!KEY1)//检测到按键按下
{
LED=~LED;/*LED取反,此时LED=0,灯亮。当松手时,KEY1=1,不满足if语句不
进入循环,LED继续保持当前状态即LED=0,如果再次按下按键,此时检测到KEY1=0,进入循
环,LED取反得到LED=0,灯亮。*/
delay(500);/*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/
}
}
}
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=85;x>0;x--)
for(y=z;y>0;y--);
}
点亮led灯简单的理解就是要求阳极高电平阴极低电平。接下来我们去看看单片机的原理图,找到led模块。
如图可以看到led的阳极是连接的VCC(电源高电平)阴极连接的接口是单片机的I/O口P20到P27.要想led点亮只需控制单片机I/O口输出低电平即可(单片机I/O口默认高电平)。
接下来就是如何编写程序并烧录到单片机中了。
第一次编写单片机程序我们首先要有一个框架
第一句#include"reg52.h"是必不可少的这句可以把单片机的接口等信息导入
第二句位定义sbitD1=P2^0;将单片机I/O口定义一个名字让我们可以操作。从原理图可以看出LED1阴极连接的是P2.0这里注意,使用c语言编程的时候要用P2^0表示
接下来编写主程序框架应该是
上面我们提到需要控制单片机I/O口输出0即可点亮这个LED灯。
所以这里的命令应该是D1=0;
因为单片机运行完程序以后会复位然后重新执行主程序。为了避免这种情况的出现我们在主程序最后加一个死循环while(1);
有时没有这个死循环并没有错误可是很多时候找不到错误的时候发现加一个while(1)程序就正常了。为了保持严谨避免这种错误,以后请务必在主程序末尾加上一个死循环。
最后写出的程序如下
然后编译,无错误无警告
因为单片机烧录需要hex文件所以我们接下来去输出hex文件
再次编译就能在存放工程文件的文件夹中找到hex文件。
接下来将程序烧录到单片机中。我是买的普中的单片机学习板附赠有普中自己写的烧录软件,购买学习板都会附赠有烧录软件的也会附带后视频教程,我这里写文案的目的是记录自己的学习过程,方便自己以后遗忘时快速复习。也可以分享给嫌弃看视频教程太慢的同学用这种图文快速学习。
输入单片机后呈现的效果如下
电话+V: 159999-78052
专注于小程序推广配套流程服务方案。为企业及个人客户提供了高性价比的运营方案,解决小微企业和个体拓展客户的问题