简介
流水灯是最基础的单片机实验。通过改变其中某个LED灯的亮灭以达到流水灯的效果。这种实验一般是按照实验书上的程序来写的,不算难。但是有不同型号的单片机,对应的编程方式也不同。本文旨在总结不同型号单片机的流水灯代码,方便初学者理解和使用。
Atmega8流水灯代码及说明
Atmega8是一种AVR单片机,分类属于MegaAVR系列。其Flash存储容量为8K字节。以下是Atmega8的流水灯代码:
#include #include #define F_CPU 16000000UL int main (void) { DDRC = 0xFF; //设置PC0-PC7引脚为输出 while(1) { PORTC=0x01; //点亮PC0 _delay_ms(300); //延时300ms PORTC=0x02; //点亮PC1 _delay_ms(300); PORTC=0x04; //点亮PC2 _delay_ms(300); PORTC=0x08; //点亮PC3 _delay_ms(300); PORTC=0x10; //点亮PC4 _delay_ms(300); PORTC=0x20; //点亮PC5 _delay_ms(300); PORTC=0x40; //点亮PC6 _delay_ms(300); PORTC=0x80; //点亮PC7 _delay_ms(300); PORTC=0x00; //全部熄灭 _delay_ms(300); } return 0; }
因为Atmega8的引脚比较少,所以只采用了PC0-PC7八个引脚。PC0-PC7共8个引脚是用来控制LED灯的亮灭,将这8个引脚全部设置为输出,即可控制全部LED的亮灭。在流水灯中,通过不断改变其中一个的状态,达到流水灯的效果。
STM32F103C8T6流水灯代码及说明
STM32F103C8T6是一款Arm Cortex-M3内核的单片机。其Flash存储容量为64K字节。以下是STM32F103C8T6的流水灯代码:
#include "stm32f10x.h" #include "delay.h" void LED_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口时钟 GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //定义信号线 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //应用配置信息 GPIO_ResetBits(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); //初始设置为低电平,因为数码管是共阳极的 } int main(void) { LED_Init(); while(1) { GPIO_SetBits(GPIOC, GPIO_Pin_0); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_1); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_2); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_3); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_4); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_5); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_6); delay_ms(300); GPIO_SetBits(GPIOC, GPIO_Pin_7); delay_ms(300); GPIO_ResetBits(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); delay_ms(300); } }
STM32F103C8T6的流水灯和Atmega8的非常相似,都是通过修改GPIO的状态来实现流水灯的效果。要注意的是,STM32F103C8T6的引脚比Atmega8多得多,本代码使用了PC0-PC7引脚,需要使用GPIO_Init初始化,设置为推挽输出的模式。
总结
总的来说,单片机的流水灯代码都比较简单,但是不同型号的单片机在实现方法上还是有区别的,需要根据不同的型号选择对应的代码。最重要的是,初学者可以通过编写流水灯代码来加深对单片机的了解,同时还能实现一个有趣的小实验。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/mcu4u5u.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!