2023年7月14日发(作者:)
51的_呼吸灯_跑马灯_按键亮灯_的原理与实现51之旅的第⼀步,亮灯。但我们不仅仅只是亮⼀个灯就够了,我们亮就要亮出花样出来,接下来我来说⼏种常见的形式。(⼀)按键亮灯最终所要实现的效果:当按下A键对应A灯亮,按下B键对应B灯亮,按下C键对应C灯亮,按下D键对应D灯亮。就选四个键,多了⾃⼰写,原理都⼀样。原理⽀撑:对于嵌⼊的LED,低电平亮,⾼电平灭(这个⼤部分这样,实际情况不放⼼可以⾃⼰测⼀下,分别给个⾼低的电平看看那个亮)。对于独⽴按键来说,当按键按下,按键所接对应引脚变为低电平。接线:LED:L1接P1.0,L2接P1.1,L3接P1.2,L4接P1.3。按键:K1接P0.0,K2接P0.1,K3接P0.2,K4接P0.3。好了,原理跟接线都完成了,接下来思路就是:当K1按下时,P0.0变成低电平,此时P1.0应变位低电平,L1亮。即实现了按下K1时L1亮。此时问题就转化成了判断P0.0是否为低电平,实现很简单,没错,⽤个if语句⾜以。sbit p00 = P0^0;if(p00 == 0){}这⾥需注意⼀点,为了减少误触的风险,应当设置防抖动。所以最后⼀个完整过程的代码实现应为:sbit p00 = P0^0;sbit p10 = P1^0;if(p00 == 0){ delay_ms(10); if(p00 == 0){ p10 = 0; }}注意,上⾯的delay代表延时,这个函数得⾃⼰写。带上头⽂件,最后得完完整整得程序应为:#include sbit p00 = P0^0;sbit p10 = P1^0;void delay_ms(unsigned int n){ int i,y; for(i=n;i>0;i--) for(y=114;y>0;y--);}void main(){ while(1) { if(p00 == 0){ delay_ms(10); if(p00 == 0){ p10 = 0; } } }}四个的话,改变引脚重复四次就可以了。我就不多说了。接下来,进⾏下⼀个,跑马灯。(⼆)跑马灯最终效果:当第⼀个灯亮,其余灯灭,接着第⼆个灯亮,同时第⼀个灯灭,接下来是第三个····当最后⼀个灯亮完,重复整个过程,再来⼀遍。原理⽀撑:灯亮的原理同上,emmm,好像只要说这个就⾏。接线:讲L1-L8对应接在P1.0-P1.7上。实现上述过程,主要是通过位运算来完成。通过左移右移来实现灯灭灯亮。在这之前介绍⼀种⽤法:P1 = 0xfe;上⾯代表着,将P1的第⼀位置为0,也就是P1.0为0,其余位置为1。有了上⾯的基础,这我也不多说,⼤概差不多,我直接给出完整的程序:#include void delay_ms(unsigned int n){ int i,y; for(i=n;i>0;i--) for(y=114;y>0;y--);}void main(void){ while(1) { P1 = 0xfe; delay_ms(1000); while(P1 != 0xf7) { P1 <<= 1; P1 |= 0x01; delay_ms(1000); } P1 = 0x7f; delay_ms(1000); while(P1 != 0xef) { P1 >>= 1; P1 |= 0x80; delay_ms(1000); } }}ok,跑马灯咋也完成了,接下来进⾏最后⼀项,呼吸灯。(三)呼吸灯最终效果:实现灯的由暗到亮并且由亮到暗的逐渐变化。原理:emmm,我们采⽤for循环的⽅式来进⾏呼吸灯的实现。两个for循环,总的循环次数不变。假设,总的循环次数为500,当亮为500时,暗为0;当亮为200时,暗为300;当亮为0时,暗为500。如果开始是从亮为0开始循环,即实现的是由暗到亮,如果从亮为500开始,即实现的是由亮到暗。然后你想象⼀下,两者⼀结合,是不是就是⼀个从暗到亮然后亮到暗的完整过程,然后不断重复此过程,好了,恭喜你,呼吸灯你完成了。接线:我们只实现⼀个灯的呼吸灯,所以我们只接⼀个脚就可以了。将L1接在P1.0上。感觉差不多,原理中应该说的很详细了,接下来接触程序:#include sbit p10 = P1^0;void main(void){ int time = 200; int i,j=0; while(1) { p10 = 0; for(i=0;i0) { p10 = 0; for(i=0;i
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689329866a230849.html
评论列表(0条)