单片机流水灯代码大全(单片机流水灯程序汇编)

简介

流水灯是最基础的单片机实验。通过改变其中某个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小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年4月26日 上午12:44
下一篇 2023年4月26日 上午12:44

猜你喜欢