米乐m6官网
您现在的位置:首页 > 产品展示 > LED驱动

AVR单片机实践--ATmega16按键操控流水灯

发布时间:2022-10-23 18:48:05 来源:米乐m6官网

  (1)在下方贴出运用Proteus制作的电路原理图。对应Proteus仿线)描绘所规划程序(“按键操控流水灯款式”)的总体规划思路(可包含依据使命区分的程序顶层结构、各使命的规划思路、各使命间的数据传递,怎么处理要害问题):

  首要编写延时函数、按键初始化、LED初始化函数,设定按键对应端口为输入端口(方向寄存器置低电平),并设定上拉电阻使能(数据寄存器置高电平),再设定LED对应端口为输出端口(方向寄存器置高电平),而且输出低电平(由于电路图中LED低电平导通)。

  然后编写按键1、2、3的扫描函数,首要进行按键消抖,然后进行按键是否按下的判别,关于按键1编写操控启停的程序,按键2编写操控款式改换的程序,按键3编写流水灯速率改动的程序(思考题要求),终究判别按键是否松开。

  主函数中首要初始化LED与按键,然后进入while循环,在循环中不断进行按键1、2、3的扫描,当对应按键按下后就履行对应功用。

  本程序经过界说一个含八个16进制数一位数组,运用for循环为八个LED灯对应的端口的数据寄存器进行赋值的方法完结流水灯功用。

  在履行for循环进行流水灯的进程中,也在不断进行着按键扫描函数。若是按键2按下,则会经过break句子跳出该形式流水灯的循环。

  在履行for循环进行流水灯的进程中,若检测到按键1按下,则会进入一个while(1)的循环,在里面会为LED端口的数据寄存器进行不断的赋值(其值固定),但不再进行for循环,故其会完结流水灯的暂停。在这个进程中,也不短进行着按键检测,若检测到按键1再次按下,则经过break跳出该死循环,继续进行for循环,即接着之前的流水灯程序进行。

  (3)依据所规划的程序顶层结构,对主函数、中止函数(假如没有运用中止可不写)、要害功用子函数的规划思路进行简略描绘,并给出各函数的流程图

  在按键检测函数中,经过读取输入引脚寄存器中对应引脚的电平状况可判别按键是否被按下,若被按下,则改动按键对应的按键标志位(按键1对应power,其操控程序的运转或中止;按键2对应led_number,其操控流水灯的款式;按键3对应timer,其操控流水灯速度。)在主循环中,经过不断地按键检测,可完结对流水灯状况的改动。

  在主函数中,首要进行相关引脚的初始化,程序刚刚运转时,power的值为0,经过按键扫描待到按键1按下开端履行流水灯程序。在履行流水灯的进程中,也在不断进行按键扫描,若检测到按键1或按键2按下时,即可跳出该款式流水灯的履行进程,履行另一款式的流水灯程序(非思考题)。若检测到按键3按下,可经过对延时时刻的改动完结对流水灯循环速度进行改动,本程序中,按键3供给三种不同的速度。

  //if(led_mode==2)//流水灯形式切换时跳出该形式,把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //{break;} //把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //if(led_mode==1)//流水灯形式切换时跳出该形式,把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //{break;} //把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  1.假如要求每次按下 K2 时,运转形式不能立刻发生改动,而是要履行完当时形式的一个周期再改动形式,怎么进行程序规划?

  能够经过注释掉主函数中K2按下时就当即跳出流水灯款式循环的for循环来到达运转形式不立刻改动的功用,而是履行完当时的周期再改动

  //if(led_mode==2)//流水灯形式切换时跳出该形式,把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //{break;} //把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //if(led_mode==1)//流水灯形式切换时跳出该形式,把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  //{break;} //把该两句注释掉可完结完结一个周期后再形式改换的要求,现在即能完结要求

  能够经过写一个switch—case句子来操控timer的改变,然后改动delay_ms(timer)的延时时刻,从而终究改动流水灯的改动速度。

  51单片机PIC单片机AVR单片机ARM单片机嵌入式体系轿车电子消费电子数据处理视频教程电子百科其他技能STM32MSP430单片机资源下载单片机习题与教程词云: