蜂鸣器:是一种一体化结构的电子讯响器,采用直流电压供电,分为压电式蜂鸣器和电磁式蜂鸣器(无源和有源),51开发板一般是压电式的。
根据网上查的资料可以知道无源和有源的区别:
⑴有无震荡源
无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
⑵价格不同
有源蜂鸣器往往比无源蜂鸣器贵,就是因为里面多个震荡电路。
怎么区分?有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。
无源蜂鸣器通过脉冲频率才能发声
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16;
sbit BEEP=P2^5;
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void main()
{
u16 i=2000;
while(1)
{
while(i--)
{
BEEP=!BEEP;
delay_10us(100);
}
i=0;//赋0就不会再响了
BEEP=1;//这赋0或者1都行
}
while(1);
}
数码管:
静态数码管:
单个数码管循环输出0-9代码:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define SMG_A_F_PORT P0//宏定义数码管P0端口
u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义数组存放0-F段码,gsmg中g代表全局变量
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void main()
{
u8 i=0;
u8 sz=sizeof(gsmg_code)/sizeof(gsmg_code[0]);//数组元素个数
while(1)
{
for(i=0;i
实验现象:https://b23.tv/rZFXi3D
动态数码管:静态和动态数码管本质区别是:静态数码管中只要给了段码数码管就一定工作(显示只取决于段码端),动态数码管中段码端给了段码值后还需要COM端配合才能点亮数码管。
快速切换工作的数码管,动态数码管利用了人眼的视觉暂留,则人看到的是所有的数码管都在亮(其实亮度是比静态驱动低的)。肉眼看到的范围是20-50ms
要学会看芯片手册!!!!(虽然我还看不懂)
3-8译码器芯片:
头上有一横表示在低电平时有效
真值:L:表示低电平0 H:表示高电平1 X:表示无论是高电平还是低电平都不影响真值
代码:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define SMG_A0_F_PORT P0//宏定义数码管P0端口
sbit A0=P2^2;
sbit A1=P2^3;
sbit A2=P2^4;
u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义数组存放0-F段码,gsmg中g代表全局变量
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void main()
{
u8 i=0;
while(1)
{
for(i=0;i<8;i++)
{
switch(i)
{
case 0:A0=1;A1=1;A2=1;break;//Y7//板子从左边数第一个数码管,下面以此类推
case 1:A0=0;A1=1;A2=1;break;//Y6
case 2:A0=1;A1=0;A2=1;break;//Y5
case 3:A0=0;A1=0;A2=1;break;//Y4
case 4:A0=1;A1=1;A2=0;break;//Y3
case 5:A0=0;A1=1;A2=0;break;//Y2
case 6:A0=1;A1=0;A2=0;break;//Y1
case 7:A0=0;A1=0;A2=0;break;//Y0
}
SMG_A0_F_PORT=gsmg_code[i];
delay_10us(100);//延时1毫秒左右
SMG_A0_F_PORT=0x00;//消影
}
}
while(1);
}
没消影的实验现象:
消影后: