学习进度条:
点亮LED→独立按键控制LED→静态数码管和动态数码管→定时器→蜂鸣器
主要参考资料已放置链接。
数码管遇到的问题:
为什么数码管该亮的地方暗,该暗的地方亮?
首先数码管分为共阴极数码管和共阳极数码管,在编写数字的时候,是两组不同的代码,我之前做的第一版数字钟是用的共阴极数码管,到第二版的时候用的共阳极,所以出现了问题。
除此之外,数码管还分有点和没点的两种,使用的时候要甄别清楚。
亲测有效的编码组
共阴如下:
uchar s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
共阳时,我们只需要在调用时取反即可
P1=0x7f; //0111 1111 只有数码管第一位选通
P0=~s[t0]; //显示第一位
delay(1); //延时1ms
P1=0xbf;
P0=~s[t1]; //p0口被用来放置数码管的数字
delay(1); //p1口被用来放置数码管的选通
P1=0xdf;
P0=~0x40;
delay(1);
P1=0xef;
参考资料
51单片机(四)静态数码管和动态数码管显示_51单片机动态数码管显示代码分析-CSDN博客
蜂鸣器遇到的问题:
上拉电阻法
因为笔者用的第一版是有源蜂鸣器,第二版是无源蜂鸣器,两者的代码有细微的不同。
让蜂鸣器叫起来的方法除了三极管上拉电阻法之外,文章开头发参考资料主要讲解了集成电路驱动,但是我们先不去使用它。先来掌握三极管上拉电阻的方法。
不管是有源还是无源,我们的解法都如上,注意区分pnp和npn即可,在把P37和2接在一起之后,这很重要,因为笔者就因为以为它内部接好了,然后发现一直没有声音以为坏掉了,后来万用表检查半天才弄明白——不会看原理图的错。
无源蜂鸣器——提供一个方波信号:
b=0;
while(1)
{
b=b+1;
bee=0;
delay(10);
bee=1;
delay(10); //产生震荡
if(b==100)
break;
}
while(1)//如果不加,代码跑个不停就不会停下来
{
};
有源蜂鸣器——提供一个直流电压:
bee=0; //让蜂鸣器停止发声
if(min==30&&sec<3)
{
bee=1;
delay(50); //响50ms
}
参考资料
如果有什么想要交流的评论区见!
但是笔者的能力很显而易见,希望能帮到你!