嵌入式课程设计流水灯

合集下载

单片机流水灯实验总结

单片机流水灯实验总结

单片机流水灯实验总结引言:单片机流水灯实验是学习嵌入式系统和单片机基础的重要实践环节。

通过设计和搭建流水灯电路,我们可以深入理解单片机的工作机制和时序控制。

本文将总结我在流水灯实验中的心得体会,分享一些有关单片机流水灯设计的经验。

一、实验概述这个实验的目标是设计一个能够连续闪烁的流水灯电路,通过单片机的控制,实现一串灯按照固定的顺序不断亮灭的效果。

我们可以通过改变灯的亮灭时间和顺序,来获得不同的流水灯效果。

二、选材准备在进行单片机流水灯实验之前,我们需要准备一些基本的材料和工具。

首先,我们需要一块单片机开发板,最常用的是STC89C52系列的开发板,该开发板搭载了一颗51单片机。

此外,我们还需要准备串联的LED灯,该灯可以选择常见的5mm直径的LED灯,同时需要配备一定数量的适量电阻用于限流。

三、实验步骤1. 连接电路:首先,需要将电路图中的元件按照连接要求连接好,确保各个元件之间的连接无误且紧固可靠。

2. 编写程序:接下来,我们需要使用Keil等软件编写单片机的程序。

通过学习嵌入式C语言编程,我们可以控制单片机的输入输出,包括控制LED灯的亮灭。

3. 烧录程序:编写完程序后,需要借助烧录器将程序烧录到单片机中。

这样单片机才能按照我们设计的程序来控制灯的状态。

4. 调试与测试:当烧录完成后,可将单片机开发板上的电源与电源线连接,并打开开关,此时,流水灯便会开始闪烁。

通过观察流水灯的灯光变化,我们可以判断我们的程序是否正确。

四、实验心得通过进行单片机流水灯实验,我深刻体会到了嵌入式系统的编程和硬件设计的重要性。

在编写程序时,我们需要仔细思考流水灯的亮灭规律和顺序,以及每个灯亮灭的时间间隔。

这需要我们对嵌入式C语言的基本语法和单片机的时序控制有一定的理解。

另外,在实验过程中,我遇到了一些问题和挑战。

例如,如何控制灯的顺序和亮灭时间,如何调整程序的延时时间等。

在解决这些问题的过程中,通过查阅资料和与同学的讨论,我逐渐积累了解决问题的经验,并在实践中不断调试和优化程序。

嵌入式实验 流水灯

嵌入式实验 流水灯

#include "config.h"# define LED1 1 << 17 /* P0.17控制LED1 */# define LED2 1 << 18 /* P0.18控制LED2 */# define LED3 1 << 19 /* P0.19控制LED3 */# define LED4 1 << 20 /* P0.20控制LED4 *//****************************************************************************** ***************************** Function name: DelayNS** Descriptions: 延时函数** input parameters: uiDly 值越大,延时时间越长** output parameters: 无** Returned value: 无******************************************************************************* **************************/void DelayNS (uint32 uiDly){uint32 i;for (; uiDly > 0; uiDly--){for(i = 0; i < 50000; i++);}}/****************************************************************************** ***************************** Function name: main** Descriptions: 跳线JP4短接,LED1闪烁** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/int main (void){PINSEL1 = PINSEL1 & (~(0x03 << 2)); /* 将P0.17设置为GPIO *//* 将P0.20设置为GPIO */ IO0DIR = LED1; /* 设置LED控制口为输出*/IO0SET = LED1; /* LED1熄灭*/while (1) {IO0DIR = LED1; /* 设置LED控制口为输出*/IO0SET = LED1; /* LED1熄灭*/IO0SET = LED1; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED1; /* LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED2; /* 设置LED控制口为输出*/IO0SET = LED2; /* LED1熄灭*/IO0SET = LED2; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED2; /* LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED3; /* 设置LED控制口为输出*/IO0SET = LED3; /* LED1熄灭*/IO0SET = LED3; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED3; /*LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED4; /* 设置LED控制口为输出*/IO0SET = LED4; /* LED1熄灭*/IO0SET = LED4; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED4; /* LED1点亮*/DelayNS(50); /* 延时*/}return 0;}/****************************************************************************** ***************************** End Of File******************************************************************************* ***************************/。

嵌入式系统-流水灯、按键、定时器实验报告

嵌入式系统-流水灯、按键、定时器实验报告

嵌入式系统应用实验报告姓名:学号:学院:专业:班级:指导教师:实验1、流水灯实验编程控制实验板上LED灯轮流点亮、熄灭,中间间隔一定时间。

实验主要考察对STM32F10X系列单片机GPIO的输出操作。

参阅数据手册可知,通过软件编程,GPIO可以配置成以下几种模式:◇输入浮空◇输入上拉◇输入下拉◇模拟输入◇开漏输出◇推挽式输出◇推挽式复用功能◇开漏式复用功能根据实验要求,应该首先将GPIO配置为推挽输出模式。

由原理图可知,单片机GPIO输出信号经过74HC244缓冲器,连接LED灯。

由于74HC244的OE1和OE2都接地,为相同电平,故A端电平与Y端电平相同且LED灯共阳,所以,如果要点亮LED,GPIO应输出低电平。

反之,LED灯熄灭。

软件方面,在程序启动时,调用SystemInit()函数〔见附录1〕,对系统时钟等关键部分进行初始化,然后再对GPIO进行配置。

GPIO配置函数为SZ_STM32_LEDInit()〔见附录2〕,函数中首先使能GPIO 时钟:RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);然后配置GPIO输入输出模式:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;再配置GPIO端口翻转速度:GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;最后将配置好的参数写入寄存器,初始化完成:GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure)。

初始化完成后,程序循环点亮一个LED并熄灭其他LED,中间通过Delay()函数进行延时,到达流水灯的效果〔程序完整代码见附录3〕。

实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:实验二、按键实验利用STM32读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯亮起。

左右来回循环的流水灯实验报告

左右来回循环的流水灯实验报告

青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01 信息科学技术学院计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。

而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。

能够通过按键控制8个LED小灯从左到右依次点亮。

关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

嵌入式系统——基于Keil5的STM32固件库寄存器编程实现流水灯

嵌入式系统——基于Keil5的STM32固件库寄存器编程实现流水灯

嵌⼊式系统——基于Keil5的STM32固件库寄存器编程实现流⽔灯//PF9-LED0,PF10-LED1//PF13-LED2,PF14-LED3#define rRCCAHB1CLKEN *((volatile unsigned long *) 0x40023830)#define rGPIOF_MODER *((volatile unsigned long *) 0x40021400)#define rGPIOE_MODER *((volatile unsigned long *) 0x40021000)#define rGPIOF_OTYPER *((volatile unsigned long *) 0x40021404)#define rGPIOE_OTYPER *((volatile unsigned long *) 0x40021004)#define rGPIOF_OSPEEDR *((volatile unsigned long *) 0x40021408)#define rGPIOE_OSPEEDR *((volatile unsigned long *) 0x40021008)#define rGPIOF_PUPDR *((volatile unsigned long *) 0x4002140C)#define rGPIOE_PUPDR *((volatile unsigned long *) 0x4002100C)#define rGPIOF_ODR *((volatile unsigned long *) 0x40021414)#define rGPIOE_ODR *((volatile unsigned long *) 0x40021014)#define time 0x300000#define on 1#define off 0void led_init(){//GPIOE -- rRCCAHB1CLKEN[4] GPIOF -- rRCCAHB1CLKEN[5]rRCCAHB1CLKEN |= (1<<4)|(1<<5);//MODER-OUT--01 PF9,PF10 [21:18]<------- 0101unsigned long r_value;r_value = rGPIOF_MODER;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 18)|(1 << 20);rGPIOF_MODER = r_value;//write//MODER-OUT--01 PF13,PF14 [29:26]<------- 0101r_value = rGPIOE_MODER;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 26)|(1 << 28);rGPIOE_MODER = r_value;//write//OTYPER-PP--0 PF9,PF10 [10:9]<--------00r_value = rGPIOF_OTYPER;//readr_value &= ~(0x3 << 9);//clearrGPIOF_OTYPER = r_value;//write//OTYPER-PP--0 PF13,PF14 [14:13]<--------00r_value = rGPIOE_OTYPER;//readr_value &= ~(0x3 << 13);//clearrGPIOE_OTYPER = r_value;//write//OSPEEDR- PF9,PF10 [21:18]<-------1010r_value = rGPIOF_OSPEEDR;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 19)|(1 << 21);rGPIOF_OSPEEDR = r_value;//write//OSPEEDR- PF13,PF14 [29:26]<-------1010r_value = rGPIOE_OSPEEDR;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 27)|(1 << 29);rGPIOE_OSPEEDR = r_value;//write//PUPDR PF9,PF10 [21:18]<--------0000 r_value = rGPIOF_PUPDR;//readr_value &= ~(0xf << 18);//clearrGPIOF_PUPDR = r_value;//write//PUPDR PF13,PF14 [29:26]<--------0000 r_value = rGPIOE_PUPDR;//readr_value &= ~(0xf << 26);//clearrGPIOE_PUPDR = r_value;//write//ODR PF9,PF10 [10:9]<-------11r_value = rGPIOF_ODR;//readr_value |= (1<<9)|(1<<10);//clearrGPIOF_ODR = r_value;//write//ODR PF13,PF14 [14:13]<-------11r_value = rGPIOE_ODR;//readr_value |= (1<<13)|(1<<14);//clearrGPIOE_ODR = r_value;//write}void led0_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<9);//clearif(is_on) r_value &= ~(1<<9);rGPIOF_ODR = r_value;}void led1_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<10);//clearif(is_on) r_value &= ~(1<<10);rGPIOF_ODR = r_value;}void led2_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<13);//clearif(is_on) r_value &= ~(1<<13);rGPIOE_ODR = r_value;}void led3_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<14);//clearif(is_on) r_value &= ~(1<<14);rGPIOE_ODR = r_value;}void ledAll_ctr1(int flag){unsigned long r_value;if(flag == 0){//LED0 off, LED1 off, LED2 off, LED3 offled0_ctr(off);led1_ctr(off);led2_ctr(off);led3_ctr(off);}if(flag == 1){//LED0 on, LED1 off, LED2 off, LED3 offled0_ctr(on);led1_ctr(off);led2_ctr(off);led3_ctr(off);}else if(flag == 2){//LED0 on, LED1 on, LED2 off, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(off);led3_ctr(off);}else if(flag == 3){//LED0 on, LED1 on, LED2 on, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(off);}else if(flag == 4){//LED0 on, LED1 on, LED2 on, LED3 on led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(on);}}void delay(int v){while(v--);}int main(){led_init();unsigned int flag = 0;while(1){for (int i=0;i<5;i++){ledAll_ctr1(i);delay(time);}for (int i=3;i>=0;i--){ledAll_ctr1(i);delay(time);}}}。

嵌入式系统 实验报告

嵌入式系统 实验报告

使能 IRQ 中断。
4 装载并使能外中断;
5 选用 DebugInExram 生成目标,然后编译连接工程。
6 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7 全速运行程序,LED 闪烁;
8 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
四.测试数据及运行结果
1
五.总结
1.实验过程中遇到的问题及解决办法;
由于本次实验较简单,且我们之前学习的微机原理课程也进行了流水灯的设
计实验,所以对于本次实验,我完成地很顺利,在实验中没有遇到问题。
2.对设计及调试过程的心得体会。
本次实验是本学期该课程我们进行的第一次实验,总的来说,实验不是很难,
设计过程也相对简单,其主要目的是让我们熟悉一下实验环境,并且能在实验环
6
五.总结 1.实验过程中遇到的问题及解决办法;
实验第一次运行时,蜂鸣器一直处于鸣响状态,及时按了按键,蜂鸣器还是 一直鸣叫,不产生外中断。后来仔细检查了程序,发现原来是忘记使能 EINT0 中 断了,加上 VICIntEnable = 1<<0x0e 代码,程序就能正常运行了。 2. 对设计及调试过程的心得体会。
境下进行简单的实验操作,为之后的实验打下坚实的基础。
六.附录:源代码(电子版)
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制 LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;
//P0.16 连接 KEY1
三.方案设计
① 启动 ADS1.2IDE 集成开发环境,选择 ARM Executable Image for lpc2131

按键、led流水灯实验

按键、led流水灯实验
特点位串行或并行输出存储状态寄存器三种状态出寄存器可以直接清除100mhz的移位频率输出能力具备并行输出总线驱动实验内容学习使用arm7嵌入式系统实验箱点亮led灯自已编程实现流水灯的闪烁
实验报告
实验名称:按键、LED流水灯
学院名称:电子与信息工程学院
专业方向:嵌入式方向
班级:电信10-1
姓名:x
实验日期:201x
while(1)
{
for(i=0;i<7;i++)
{
WriteByte(~led[i]);
if((IO0PIN & KEY1 )==0)
{
j+=200;
while((IO0PIN & KEY1 )==0);
}
if((IO0PIN & KEY2 )==0)
{
j-=200;
while((IO0PIN & KEY2 )==0);
一.实验目的:
掌握ARM7嵌入式系统实验箱的使用方法;掌握LPC2148的GPIO端口使用方法;了解74HC595的控制使用方法。
二.实验原理
1.GPIO接口的用法
LPC2114/2124的P0口和P1口由两组(每组4个)寄存器控制,如表6-10所列。对于LPC2210/2212/2214,P2口的寄存器起始地址0பைடு நூலகம்E002 8020,P3口的寄存器起始地址0xE002 8030,各寄存器的功能与P0和P1的寄存器是一致的。
④GPIO输出清零寄存器(IOnCLR, n=0、1、2、3)
当引脚配置位GPIO输出模式时,可使用该寄存器从引脚输出低电平。写入1使对应引脚输出低电平,并清零IOSET寄存器中相对应的位;写入0无效。如果一个引脚被配置为输入或第二功能,写IOCLR无效。

项目2流水灯设计

项目2流水灯设计

流水灯的原理
流水灯是一种通过控制LED的亮 灭顺序和时间间隔来模拟流水效
果的灯具。
通过控制每个LED的点亮和熄灭 时间,以及每个LED之间的亮灭 时间间隔,可以模拟出流水效果。
流水灯通常由多个LED组成,每 个LED按照一定的顺序逐个点亮 或熄灭,形成连续的视觉效果。
延时函数的原理
延时函数是一种用于控制程序执行流程的函数,它可以使程序在执行某段 代码后暂停一段时间再继续执行下一段代码。
用于编写、上传程序 到Arduino板
支持多种编程语言, 如C/C
包含代码编辑器、编 译器和调试器
编程语言
01
C/CArduino IDE主要使用的编程 语言,简单易学,适合初学者
02
Python:可选的编程语言,适用 于更高级的应用
示例代码
• 以下是一个简单的流水灯程序示例
示例代码
01
```cpp
示例代码实现
delay(500);
//
延迟500毫秒
digitalWrite(LED_PIN1, LOW); // 熄灭第一个LED
digitalWrite(LED_PIN2, HIGH); // 点亮第二个LED
示例代码实现
delay(500); 毫秒
// 延迟500
digitalWrite(LED_PIN2, LOW); // 熄灭第 二个LED
按照特定的顺序(如从左到右 或从右到左),依次点亮每个 LED。
动态效果
通过调整延迟时间,实现LED的 动态效果,如闪烁、渐变等。
示例代码实现
01
```c
02
void setup() {
wiringPiSetup();
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水灯编程
实验目的:
掌握GPIO端口的基本控制方法
掌握硬件电路仿真方法。

实验内容:
1、复习流水灯的工作原理。

2、按教材上
3、4节的内容或实验指导书2、1节的内容创建好项目,生成可执行文件。

3、阅读LED示例程序代码。

4、软件模拟,无误后下载到实验板上运行,观察效果。

5、通过硬件仿真的方式调试程序。

分析LED_Init、main这2个函数中每一行代码的作用。

6、修改程序使得灯改变一次状态的时间间隔为0、02、0、01、0、1、0、3、0、5、1、2秒。

7、修改程序使得灯闪动的方向反向。

8、修改循环亮灯的程序,使每次亮灯的起始位置依次下移。

选做进阶版
1.用左边4个灯闪烁代表绿灯,右边4个灯闪烁代表红灯,8个灯
全亮代表黄灯。

模拟交通信号灯运行(绿灯10秒,红灯20秒,
绿到红过渡时黄灯3秒)
2、将自己的学号编码用LED灯效果展示出来。

实验原理:
电路中有L0,L1,L2,L3,L4,L5,L6,L7共八个发光二极管,当引脚LED_SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。

A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。

引脚LED_SEL为1时,发光二极管才工作,否则右边的数码管工作。

注意,LED_SEL连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的IO不可用,需对AFIO_MAPR寄存器进行设置,设置其为IO可用。

实验过程及结果描述:
按实验内容的步骤一步一步的来。

重点描述实验内容的6、7、8还有选修进阶的1、2、
要实现改变灯状态的时间间隔,只需改变delay_ms这函数的里面的参数即可,例如时间间隔改为0、02秒就将参数改为20,1秒就将参数改为1000,(delay_ms()函数里面参数的单位为ms)其它以此类推。

通过参数的改变可以瞧到灯状态改变的时延相应的改变了。

改变灯的闪动方向则将light左移或者右移位数的值赋给light,例如循环一次左移一位,则light=light<<1,右移则就是light=light>>1;这里又涉及到当左移(右移)到最左(右)一位时,再次亮灯时的起始位置设置的问题,这里就可以设置当左移(右移)到最左(最右),设置一个判断语句当左移(右移)到左(右)端点时,将初始值赋给题目要求的位置即可。

实验结果:灯的移动方向改变。

每次循环完一次之后通过改变赋给初
始亮的灯的值可以实现灯初始位置的下移。

红绿灯的实现,就就是实现左边四盏灯、右边四盏灯、八盏灯按先后次序以及相对应的时延实现全亮。

这里主要就是理解GPIOE->ODR |= (light<<8);light=light<<1;这两段代码的意思。

GPIOE->ODR高八位有效,通过左移或者右移位数的次数来实现同时点亮哪几盏灯。

比如同时点亮左边四盏,将最左边的灯的值赋给light,然后添加四个GPIOE->ODR |= (light<<8);light=light>>1;语句就可以实现左边四盏灯同时亮的效果。

通过设置delay_ms()函数里面的参数可以实现四盏灯亮多长时间的效果,同样的思路可以实现右边四盏灯与八盏灯全亮。

最后就是学号的LED实现。

因为学号的显示在数码管的实验中有更好的实现,这里只描述简单的数字显示。

主要的思路就就是将学号存在一个数组里面,然后每一位学号对应一个数码管显示。

问题及解决:
最初在移位时出了一点问题。

比如从左移改为右移时没有更改初始亮灯的位置,所以之后出现灯不亮的情况。

做这个题目时,瞧到有些同学做红绿灯这一块,有些同学就是实现常亮(不闪烁),有些同学实现这个有灯光闪烁的效果。

于就是自己也想实现一下。

总的来说,这个题目难度不就是很大,但就是要做好还就是要动点,所以在如何实现灯常亮或者闪烁这个问题上出了一点问题。

在灯进入循环时,例如实现左边四盏灯亮时,每一个循环最后加一个GPIOE->ODR &= ~(0xff<<8);即最后将其高八位置零,之后再进入
循环时就会出现闪烁的效果。

总结:
这个题目在完成基本要求的同时,完成了两个选修进阶项。

在实验的过程中有点粗心,比如移位的时候没有改初试亮灯的位置以及当灯到两端的时候没有改再次亮灯的初始位置,以致于在一次循环之后灯就不亮了。

一个小小的收获就就是在红绿灯的实现时实现了两种效果一种就是常亮的效果,另一种就是闪烁的效果。

参考资料:
《STM32 中文参考手册_V10 STM32F10xxx参考手册》
《ARM Cortex-M3权威指南(中文版)》
《流水灯说明书》。

相关文档
最新文档