文章目录[隐藏]
LED模块的使用(十六进制)以及关闭蜂鸣器(关闭外设)
原理图
根据原理图分析
- LED共阳接法,二极管正向导通发光,所以当Q1~Q8为低电平时,LED灯会点亮;
- 74HC573是一颗锁存器CMOS芯片,Y4C锁存功能,进而控制着Q端的输出,当Y4C为高电平时,锁存功能关闭,Q端根据P0端的输入进行输出。当Y4C为低电平时,锁存功能开启,Q端按照上一个状态输出;
- 74HC02是一颗四二输入或非门芯片(四个逻辑门,每个逻辑门2个输入,1个输出),图中显示一个输入是GND(WR根据J13跳帽连接了GND),所以输出Y4C与输入Y4相反;(若WR接VCC,则输出与输入相同);
- 74HC138是一颗38译码器(3输入,8输出),以 C、B、A 为逻辑顺序,CBA组成二进制数,然后转化成10进制,对应的Y输出低电平,其他均为高电平,例如:CBA=001;则Y1输出低电平,其他输出高电平。
综述:P27、P26、P25控制着74HC573是否锁存(输出的状态),即控制着Q端输出与P端输入的关系,P0输入控制LED的状态;
点亮单个LED灯代码
# include "reg52.h"
int main()
{
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 |= 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0 = 0xfe; //OXFE-->1111 1110, LED低电平亮,所以是第1个LED灯点亮
}
}
代码分析
P2 &= 0x1f
&=:按位与赋值,表示两个操作数的二进制,对它们进行按位AND运算并将结果分配给变量;先进行并运算再赋值,俗称有0为0,
P2 |= 0x80
&=:按位或赋值,表示两个操作值的二进制表示,执行按位或运算,并把结果赋给变量。先进行or运算再赋值,俗称有1为1.
单个LED闪烁代码
# include "reg52.h"
# include "intrins.h" //延时函数需要预处理的头文件
void Delay500ms() //@12.000MHz//由STC-ISP烧录软件生成的延时函数
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0 = 0xfe; //OXFE-->1111 1110, LED低电平亮,所以是第1个LED灯点亮
Delay500ms();
P0 = 0xff;
Delay500ms();
}
}
LED流水灯代码
# include "reg52.h"
# include "intrins.h"
void Delay500ms() //@12.000MHz//由STC-ISP烧录软件生成的延时函数
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
int i=0;
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0=0XFE; //移位前的第一个状态,如果为0XFF,则第一个灯不会亮
for(i=1;i<=8;i++) //移位操作的循环控制,从左到右
{
Delay500ms(); //延时函数,用于控制LED亮的时间
P0=~(0x01<<i); //移位操作,例如:~(0000 0001<<1)=~0000 0010=1111 1101左边第二个LED灯点亮
}
//P0=0X7F; //0X7F-->0111 1111 ,从右往左的流水灯
//for(i=1;i<=8;i++)
//{
//Delay500ms();
//P0=~(0x80>>i); //移位操作,例如:~(1000 0000>>1)=~0100 0000=1011 1111右边第二个LED灯点亮
//}
}
}
关闭蜂鸣器(关闭外设)
蜂鸣器对应的原理图
原理图分析
- 该Buzzer是有源蜂鸣器,一端已经接在VCC上,当N BUZZER为低电平时,蜂鸣器会响
- ULN2003是一颗高耐压、大电流符合晶体管芯片,内部有7个硅NPN复合晶体管组成,在逻辑上是一个非门
综述:当P06为高电平时,蜂鸣器会响,并且根据51单片机引脚悬空时,默认输出高电平,所以上电蜂鸣器就会响,我们调试的时候响着很烦,所以我们在写代码时第一步就是关闭蜂鸣器(或者叫外设)
关闭Y5控制的外设代码
int main()
{
int i=0;
P2 = ((P2 & 0x1f) | 0xa0); //关闭Y5控制的全部外设
P0 = 0x00;
P2 &= 0x1f;
P2 = (P2 & 0x1f) | 0xe0; //同理关闭数码管
P0 = 0xff;
P2 &= 0x1f;
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0=0XFE;
for(i=1;i<=8;i++)
{
Delay500ms();
P0=~(0x01<<i);
}
}
版权声明:本文为CSDN博主「专属熊熊先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46074226/article/details/122313215
LED模块的使用(十六进制)以及关闭蜂鸣器(关闭外设)
原理图
根据原理图分析
- LED共阳接法,二极管正向导通发光,所以当Q1~Q8为低电平时,LED灯会点亮;
- 74HC573是一颗锁存器CMOS芯片,Y4C锁存功能,进而控制着Q端的输出,当Y4C为高电平时,锁存功能关闭,Q端根据P0端的输入进行输出。当Y4C为低电平时,锁存功能开启,Q端按照上一个状态输出;
- 74HC02是一颗四二输入或非门芯片(四个逻辑门,每个逻辑门2个输入,1个输出),图中显示一个输入是GND(WR根据J13跳帽连接了GND),所以输出Y4C与输入Y4相反;(若WR接VCC,则输出与输入相同);
- 74HC138是一颗38译码器(3输入,8输出),以 C、B、A 为逻辑顺序,CBA组成二进制数,然后转化成10进制,对应的Y输出低电平,其他均为高电平,例如:CBA=001;则Y1输出低电平,其他输出高电平。
综述:P27、P26、P25控制着74HC573是否锁存(输出的状态),即控制着Q端输出与P端输入的关系,P0输入控制LED的状态;
点亮单个LED灯代码
# include "reg52.h"
int main()
{
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 |= 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0 = 0xfe; //OXFE-->1111 1110, LED低电平亮,所以是第1个LED灯点亮
}
}
代码分析
P2 &= 0x1f
&=:按位与赋值,表示两个操作数的二进制,对它们进行按位AND运算并将结果分配给变量;先进行并运算再赋值,俗称有0为0,
P2 |= 0x80
&=:按位或赋值,表示两个操作值的二进制表示,执行按位或运算,并把结果赋给变量。先进行or运算再赋值,俗称有1为1.
单个LED闪烁代码
# include "reg52.h"
# include "intrins.h" //延时函数需要预处理的头文件
void Delay500ms() //@12.000MHz//由STC-ISP烧录软件生成的延时函数
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0 = 0xfe; //OXFE-->1111 1110, LED低电平亮,所以是第1个LED灯点亮
Delay500ms();
P0 = 0xff;
Delay500ms();
}
}
LED流水灯代码
# include "reg52.h"
# include "intrins.h"
void Delay500ms() //@12.000MHz//由STC-ISP烧录软件生成的延时函数
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
int i=0;
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0=0XFE; //移位前的第一个状态,如果为0XFF,则第一个灯不会亮
for(i=1;i<=8;i++) //移位操作的循环控制,从左到右
{
Delay500ms(); //延时函数,用于控制LED亮的时间
P0=~(0x01<<i); //移位操作,例如:~(0000 0001<<1)=~0000 0010=1111 1101左边第二个LED灯点亮
}
//P0=0X7F; //0X7F-->0111 1111 ,从右往左的流水灯
//for(i=1;i<=8;i++)
//{
//Delay500ms();
//P0=~(0x80>>i); //移位操作,例如:~(1000 0000>>1)=~0100 0000=1011 1111右边第二个LED灯点亮
//}
}
}
关闭蜂鸣器(关闭外设)
蜂鸣器对应的原理图
原理图分析
- 该Buzzer是有源蜂鸣器,一端已经接在VCC上,当N BUZZER为低电平时,蜂鸣器会响
- ULN2003是一颗高耐压、大电流符合晶体管芯片,内部有7个硅NPN复合晶体管组成,在逻辑上是一个非门
综述:当P06为高电平时,蜂鸣器会响,并且根据51单片机引脚悬空时,默认输出高电平,所以上电蜂鸣器就会响,我们调试的时候响着很烦,所以我们在写代码时第一步就是关闭蜂鸣器(或者叫外设)
关闭Y5控制的外设代码
int main()
{
int i=0;
P2 = ((P2 & 0x1f) | 0xa0); //关闭Y5控制的全部外设
P0 = 0x00;
P2 &= 0x1f;
P2 = (P2 & 0x1f) | 0xe0; //同理关闭数码管
P0 = 0xff;
P2 &= 0x1f;
while(1)
{
P2 &= 0x1f; //0x1F-->0001 1111, 前三位P27,P26,P25清零,防止锁存器出错
P2 =P2| 0x80; //0X80-->1000 0000, 100-->4,即打开Y4对应的锁存器,使Q端按照P端的输入进行输出
P0=0XFE;
for(i=1;i<=8;i++)
{
Delay500ms();
P0=~(0x01<<i);
}
}
版权声明:本文为CSDN博主「专属熊熊先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46074226/article/details/122313215
暂无评论