十一.延时
①软件延时:一直占用CPU,浪费CPU资源
②定时器延时:精准,且不占用CPU
十二.
main函数会自动循环,但一般还是要加while
这样写的话,led灯也会亮,但亮度会低一半,因为其一半时间是亮,一半时间是灭
0xff也可以写成十进制的255,把这组数据赋值给IO口,数据的最低位给IO口的最低位
闪烁间隔比一秒稍大
十三.
#define uchar unsigned char
用uchar代替unsigned char
define是预处理指令,不能加分号
typedef需要分号
十三.
左移运算符<<和循环左移不一样。左移运算符移位后空缺的低位补零,而循环移位高位移动到低位
_crol_可以直接对IO口使用,但会出现问题,不知道为什么会出现问题
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp;
void Delay() //@12.000MHz 100ms
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 144;
k = 71;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int i;
while(1)
{
temp=0xf7;
P2=temp;
Delay();
temp=_crol_(temp,1);
P2=temp;
Delay();
temp=_crol_(temp,1);
P2=temp;
Delay();
for(i=3;i>0;i--)
{
temp=0xc7;
P2=temp;
Delay();
P2=0xff;
Delay();
}
}
}
/*void main()
{
int i;
while(1)
{
P2=0xf7;
Delay();
P2=_crol_(P2,1);
Delay();
P2=_crol_(P2,1);
Delay();
for(i=3;i>0;i--)
{
temp=0xc7;
P2=temp;
Delay();
P2=0xff;
Delay();
}
}
}*/
/**/内的为有问题代码,暂不清楚问题所在
十四.
电磁蜂鸣器有两种:无源和有源,有源的有振荡器
蜂鸣器有一个金属导体,导体绕有线圈,当通5v直流电时,产生磁场,这时会吸附导体上面的金属震动薄片,然后若快速让薄片吸合弹开(即电压为0v),薄片就会发出声音。有源的有振荡器,所以其声音的频率是固定的,无源的可以自行调节方波,让薄片可以随自己想要的频率发声。
扬声器的工作原理与蜂鸣器差不多。
蜂鸣器的工作电流一般为几时mA,最大不能超过0.5A。
无源蜂鸣器发声代码如上
十五.
直插式封装:TO-92
贴片式封装:SOT-23
三极管饱和压降:0.2v-0.3v
箭头起始位置电压比结束位置电压高0.7v
具体计算可以参考:
三极管的放大倍数是指基极电流到集电极电流的放大倍数,同一个三极管的放大倍数不是固定的,收到静态工作点和温度影响。但大部分情况下可以把它看成固定的。
NPN和PNP三极管区别详细解释:
十六.
当P23默认状态时,电平被上拉电阻拉到5v,R10右侧电压为5v,不满足发射极大于基极0.7v,三极管截止,相当于开关闭合。当P23输出0v时,R10右侧电压为4.3伏,基极电流为43mA,经过放大,发射极电流为几百毫安,蜂鸣器正常工作。
十七.
单片机只适合做控制用,不是功率器件,驱动电流非常小(因为IO口有内阻,且比较大)
十八.
51单片机灌电流能力为10mA,而拉电流能力(即驱动电流)却为几百微安
这是NPN型的。NPN型为高电平触发,PNP为低电平触发。所以根据上面理论,当选用NPN时,单片机往外拉电流,会使蜂鸣器声音较小,所以51单片机一般选用PNP,即低电平触发。