实验二 GPIO跑马灯实验
跑马灯实验报告.
跑马灯实验报告姓名:班级:跑马灯实验报告试验目的1.学习8031内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
3.学习端口的输入输出操作。
实验原理1、软件流程图:2.程序设计内容我们可以运用输出端口指令MOV P1,A 或MOV P1,#DATA ,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
3、硬件连接图:4.软件清单ADR EQU 8000HORG 0000HLJMP STARTORG 001BHLJMP OT1ORG 00F0HSTART:MOV TMOD,#10HMOV TL1,#0B0HMOV TH1,#3CHSETB EASETB ET1MOV R2,#14HMOV R3,#00HSETB TR1SJMP $OT1:CLR TR1CLR EAMOV TH1,#3CHMOV TL1,#0B0HDJNZ R2,BACKNEXT:MOV R2,#14HMOV DPTR,#0200hMOV A,R3MOVC A,@A+DPTRMOV DPTR,#ADRMOVX @DPTR,AINC R3CJNE R3,#08H,BACKSJMP ROUNDBACK:SETB EASETB TR1RETIROUND:MOV R3,#00HSJMP BACKORG 0200HDB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,00H END5.C语言源程序#include <AT89X51.H>unsigned char i;unsigned char temp;unsigned char a,b;void delay(void){unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}void main(void){while(1){temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++){a=temp>>i;b=temp<<(8-i);P1=a|b;delay();}}}功能说明由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
跑马灯实验报告实验原理
跑马灯实验报告实验原理实验背景:跑马灯实验主要用于研究光的传播和反射原理。
通过实验可以观察到光在不同介质中的传播路径和光的反射规律。
本实验旨在通过搭建跑马灯实验装置,探究光在直线和曲线光路中的传播特点,并观察反射光线的方向。
实验原理:1. 光的传播特点光在真空中的传播速度为光速,约为3×10^8 m/s。
当光从真空射入介质时,光速会发生变化,根据折射定律可知,光从光疏介质射入光密介质时,会向法线方向弯曲,光从光密介质射入光疏介质时,会离开法线方向。
这种光线的弯曲现象称为折射。
2. 反射光线的方向当光线从一种介质射入另一种介质时,会发生折射,但同时也会发生反射。
根据反射定律可知,入射光线和反射光线在入射面上的法线上的投影具有相同的夹角,反射光线与入射光线在入射面上的法线在同一平面内。
实验装置:1. 实验器材:跑马灯实验装置、直尺、激光笔、纸片、墨水笔等。
2. 实验步骤:a. 将跑马灯实验装置放置在平整的桌面上,调整好实验装置的角度,使得光线能够正常传播。
b. 使用激光笔在纸片上绘制直线和曲线光路图案,并进行标记。
c. 将纸片放置在实验装置上,将激光笔对准跑马灯实验装置的光源入口,发射激光光线。
d. 观察光线在直线和曲线光路中的传播路径,以及光线的反射方向。
e. 根据观察结果记录实验数据,并进行分析和总结。
实验结果:通过实验观察可以得出以下结论:1. 在直线光路中,光线沿直线传播,不会发生弯曲。
2. 在曲线光路中,光线在曲线上弯曲传播,沿着曲线的切线方向传播。
3. 光线在跑马灯实验装置中的反射方向符合反射定律,入射光线和反射光线在入射面上的法线上的投影具有相同的夹角。
实验分析:根据实验结果可知,光在不同介质中的传播路径受到折射定律的影响,而光线在界面上的反射方向受到反射定律的影响。
这些定律的存在使得光在不同介质中的传播具有一定的规律性和可预测性。
实验应用:跑马灯实验的原理和结论在日常生活中有着广泛的应用。
实验2-最简单的八路跑马灯-实验说明
实验2: 最简单的八路跑马灯1.0连接说明1.1用跳线帽将SP0排针连接;1.2依据ISP在线编程步骤将程序写到入芯片中;1.3打开电源程序即可运行。
1.4注意该实验结束后可将SP0上的跳线帽去掉,以减少开发板的功耗。
2.0相应原理图如下:3.0实验说明:本实验用到L1-8灯。
本例实验主要用到了延时子程序,clr,lcall,ajmp 指令,通过轮流点亮p1.0 …..P1.7 实现效果。
用户可以通过此程序的学习,初步掌握单片机的IO 端口操作。
练习1:怎样把延时的时间改为更短,或者更长?练习2:怎样用P0,P2,P3端口来操作?练习3:怎样实现不同的跑马花样?4.0程序范例:;//P1口控制跑马灯程序//ORG 0000HAJMP MAINORG 0030HMAIN:MOV P1,#0FFH;ACALL DELCLR P1.0 ;将P1.0送0指令ACALL DEL ;延时SETB P1.0CLR P1.1 ;将P1.1送0指令ACALL DEL ;延时SETB P1.1CLR P1.2 ;将P1.2送0指令ACALL DEL ;延时SETB P1.2CLR P1.3 ;将P1.3送0指令ACALL DEL ;延时SETB P1.3CLR P1.4 ;将P1.4送0指令ACALL DEL ;延时SETB P1.4CLR P1.5 ;将P1.5送0指令ACALL DEL ;延时SETB P1.5CLR P1.6;将P1.6送0指令ACALL DEL ;延时SETB P1.6CLR P1.7 ;将P1.7送0指令ACALL DEL ;延时SETB P1.7ACALL DELMOV P1,#00H;ACALL DELAJMP MAIN ;循环RET;//**************************//;//******延时子程序**********//;//**************************//ORG 0080HDEL: MOV R2,#255 ;想想为什么要这样?D1: MOV R3,#255D2: NOP ;延时2us秒,去掉几个NOP看结果怎样?NOPNOPNOPNOPDJNZ R3,D2DJNZ R2,D1RET。
制作跑马灯的实训报告
一、实验背景随着科技的不断发展,电子技术在我们的日常生活中扮演着越来越重要的角色。
作为电子信息工程专业的学生,掌握电子电路的设计与制作技能是必不可少的。
本实训旨在通过制作跑马灯,让学生了解基本电子元件的原理和电路设计方法,提高学生的动手能力和创新思维。
二、实验目的1. 熟悉电子元件的使用方法和电路原理。
2. 掌握电路图的绘制和实际电路的制作。
3. 理解跑马灯的工作原理,并能够进行简单的故障排除。
4. 培养学生的团队协作能力和实践创新能力。
三、实验内容1. 基本跑马灯电路制作(1)材料准备:8个发光二极管(LED)、1个按键(K1)、1个电阻、1个面包板、1个电源、连接线等。
(2)电路连接:根据图1电路图,将LED按照顺序连接到面包板上,确保每个LED的正负极正确连接。
将按键K1连接到电路中,并设置合适的电阻以限制电流。
(3)程序编写:使用C语言或汇编语言编写程序,实现LED的顺序点亮和熄灭,模拟跑马灯效果。
2. 键控跑马灯电路制作(1)材料准备:8个发光二极管(LED)、2个按键(K1、K2)、1个电阻、1个面包板、1个电源、连接线等。
(2)电路连接:在基本跑马灯电路的基础上,增加按键K2。
按下K1时,LED按正序点亮;按下K2时,LED按倒序点亮。
(3)程序编写:在原有程序的基础上,增加按键判断逻辑,实现按键控制LED点亮顺序的功能。
3. 多功能跑马灯电路制作(1)材料准备:8个发光二极管(LED)、3个按键(K1、K2、K3)、1个电阻、1个面包板、1个电源、连接线等。
(2)电路连接:在键控跑马灯电路的基础上,增加按键K3。
按下K1时,LED按正序点亮;按下K2时,LED按倒序点亮;按下K3时,LED全部熄灭。
(3)程序编写:在原有程序的基础上,增加按键判断逻辑,实现按键控制LED点亮顺序和熄灭的功能。
四、实验结果与分析1. 成功制作出基本跑马灯电路,实现了LED的顺序点亮和熄灭。
2. 成功制作出键控跑马灯电路,实现了按键控制LED点亮顺序的功能。
跑马灯实验报告
跑马灯实验报告引言跑马灯是一种常见的公共场所宣传和广告工具。
它通过不断闪烁的灯光来吸引人们的注意,向他们传达信息和内容。
在这个报告中,我们将通过一系列实验来研究跑马灯的工作原理、效果和可能的应用领域。
实验一:跑马灯的基本构造实验目的通过拆解和分析跑马灯的结构,理解其基本构造和工作原理。
实验步骤1.拆解一台跑马灯,将其分解为基本组成部分,如灯管、控制电路和外壳等。
2.分析每个组成部分的作用和功能。
实验结果根据我们的拆解和分析,我们得出了以下结论:•灯管:灯管是跑马灯的核心部件,它通过发光来吸引人们的注意。
•控制电路:控制电路负责控制灯管的闪烁频率和模式。
•外壳:外壳起到保护和美化跑马灯的作用。
实验二:跑马灯的效果分析实验目的评估不同频率和模式的跑马灯对人眼的刺激程度和注意力吸引效果。
实验步骤1.准备三台不同频率的跑马灯(低频、中频和高频)。
2.让一组实验参与者观察每种频率的灯光,并记录他们的感受和注意力集中程度。
3.对比不同频率下的实验结果,并做出分析和总结。
实验结果我们的实验结果表明:•高频率的跑马灯更容易引起人们的注意,但也会让他们感到疲劳或不适。
•低频率的跑马灯对人眼的刺激相对较轻,但可能不足以引起足够的关注。
•中频率的跑马灯在刺激度和注意力吸引效果之间取得了一个平衡,被认为是比较理想的选择。
实验三:跑马灯的应用展望实验目的探索跑马灯在不同场景和领域的应用潜力,并分析其优势和限制。
实验步骤1.分析跑马灯目前的主要应用领域,如商业广告、警示通知和信息发布等。
2.探寻跑马灯在其他领域中的潜在应用,如教育、娱乐和医疗等。
3.分析跑马灯在不同应用领域中的优势和限制。
实验结果我们的分析结果表明:•跑马灯在商业广告和公共通知中具有广泛应用的潜力,因为它能够吸引人们的注意并传达信息。
•跑马灯在教育领域中可以用于展示学生作品、提醒学生重要事项等,但需注意不要过度刺激学生眼睛。
•跑马灯在医疗领域中可以用于显示患者信息、提醒医生注意事项等,但需确保灯光不会对患者或医生造成不适。
跑马灯实验报告
跑马灯实验报告
实验目的,通过搭建一个简单的跑马灯电路,了解电子元件的基本原理和电路的工作方式。
实验器材,LED灯、电阻、导线、电池、开关、面包板。
实验步骤:
1. 将LED灯的正极与电池的正极通过导线连接起来,负极与电阻连接,然后再将电阻的另一端与电池的负极连接。
2. 将开关连接到电路中,使得可以通过开关控制电路的通断。
3. 将整个电路搭建在面包板上,确保连接牢固。
4. 打开开关,观察LED灯的亮灭情况。
实验结果:
经过搭建和观察,我们发现当开关闭合时,LED灯会亮起;当开关断开时,LED灯会熄灭。
通过不断地开合开关,我们可以看到LED灯会不断地亮灭,就像跑马灯一样在不同的位置闪烁。
实验分析:
跑马灯实验的原理是利用开关控制电路的通断,从而控制LED灯的亮灭。
当开关闭合时,电路闭合,电流可以流通,LED灯就会亮起;当开关断开时,电路断开,电流无法流通,LED灯就会熄灭。
通过不断地开合开关,就可以实现LED 灯的频繁闪烁,呈现出跑马灯的效果。
实验总结:
通过这个简单的跑马灯实验,我们了解了电子元件的基本原理和电路的工作方式。
同时,我们也体会到了实验中的观察和分析的重要性。
在今后的学习中,我们将进一步深入学习电子电路的知识,探索更多有趣的实验和应用。
以上就是本次跑马灯实验的实验报告,希望对大家有所帮助。
山交院实验二GPIO实验
实验二GPIO实验一、实验目的与要求1、熟悉Keil uVision5(MDK-ARM)软件2、熟悉GPIO的使用方法,熟悉HAL固件库中GPIO库函数的使用方法3、熟悉使用STM32CubeMX创建新项目二、实验设备SUN ESMC01实验仪(含STM32F103模块)一套、ARM仿真器一套、PC机一台三、实验内容1、熟悉Keil uVision5集成环境软件的使用方法。
2、熟悉使用STM32CubeMX创建新项目。
3、编写程序:控制实验箱F6区的指示灯DS1闪亮。
4、编写程序:控制实验箱F6区的8个指示灯DS1~DS8,循环点亮,瞬间只有一个灯亮。
5、观察实验结果,验证程序是否正确。
四、实验原理(一) LED原理图JP28:绿色发光管控制接口,0-灯亮,1-灯灭JP29:红色发光管控制接口,0-灯亮,1-灯灭(二) 实验箱跳线准备1、JP85:选择CPU2:2、JP6:选择E5V,使用实验仪给核心板供电STM32F103核心板供电方式有三种,由JP6选择:JP6选择U5V,使用USB MINI接口(CN4)供电;JP6选择C5V,使用B型USB接口(CN3)供电;JP6选择E5V,使用实验仪供电。
3、将STAR ARM_U仿真器的JTAG插头插入STM32F103核心板上的JTAG插座。
使用USB线将仿真器与微机相连。
4、打开实验仪电源。
五、使用STM32CubeMX请参阅实验箱随机“使用手册”3.5节使用STM32CubeMX六、实验说明1、源文件组成stm32f1xx_hal_conf.h 库配置文件、HSE值定义stm32f1xx_it.c 中断处理文件stm32f1xx_it.h 中断处理头文件gpio.c、gpio.h GPIO初始化(GPIOA(PA13:SWDIO、PA14:SWCLK))stm32f1xx_hal_msp.c提供MSP初始化、中断初始化函数system_stm32f1xx.c HAL库提供,一般不作改动。
1-GPIO跑马灯的单片机程序说明书
delay(25);
}
}
// USER CODE END
注:添加用户代码时,请添加到 “ // USER CODE BEGIN” 和 “// USER CODE END”之间。
4)Keil 下编译、下载、调试(相关信息,可参见 Step6 内的 Keil 使用视频教程)
当完成前一步的添加代码工作后,则可以点击 按钮进行编译,直到提示 0 Error(s)
@
网址:
北京乾勤科技发展有限公司 (版权所有,2013 年 3 月)
--------------------------------------------------------------------------
--------------------------------------------------------------------------
电话:
010-82642324/82641640
传真:
010-82641640
地址:
北京市中关村北二街四号 水清木华园 5#212
邮编:
100190
信箱:
2) DAvE 生成代码
图 1-5 Port 口配置
保存配置好的文件,点击 择的函数。
,DAvE 自动生成代码,生成的代码即包括前面所选
图 1-6 DAvE 自动产生代码
图 1-7 DAvE 生成代码文件 3) 修改用户代码
进入上一步 DAvE 保存的位置,用 Keil 打开生成的.dpt 文件。然后在 Keil 环境下 找到 main 文件。
在 main.C 中添加下列代码:
// USER CODE BEGIN (Main,1)
单片机跑马灯实验报告
学号14142200277序号19单片机原理与接口技术实验报告实验项目序号一实验项目名称跑马灯实验姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间2016年4月2日一、实验内容实验内容为3项,其中第1、2项必做。
1、基本的流水灯。
根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯。
上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、电路原理图图1 跑马灯实验电路原理图三、程序流程图开始检测P2键值完成对应键值的功能判断P2键值是否改变图2 简单键控的流水灯程序流程图四、源程序1、基本的流水灯#include<reg51.h>#define uint unsigned int#define uchar unsigned charvoid delay( j ) //延时函数data uint j;{ data uint i;while(j--)for(i=0;i<250;i++);}void main( ) //主函数{ data uchar a;a=1; //保证只有一个点亮while(1) //不断循环{ P2=~a; //低电平点亮a=a<<1; //左移一位,右补0 if(a==0)a=1; //全0delay(2250);} //流动点亮延时}2、简单键控的流水灯#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint i){ uchar t;while(i--){for(t=0;t<120;t++);}}void main(){ data uchar a;a=1;while(P2==0xff){ P0=~a;a=a<<1;if(a==0)a=1;delay(250);}while(P2==0xfe){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);}}3、键控的流水灯#include<reg51.h>#define uchar unsigned char #define uint unsigned int void delay(uint i){ uchar t;data uchar b=0xfb;while(i--){ if(P2==0xfe) b=0xfe;if(P2==0xfd) b=0xfd;if(P2==0xfb) b=0xfb;for(t=0;t<120;t++);}}void main(){ data uchar a;a=1;while(P2==0xfe){ P0=~a;a=a<<1;if(a==0)a=1;delay(250);while(P2==0xff){P0=~a;a=a<<1;if(a==0)a=1;delay(250);}}while(P2==0xfd){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);while(P2==0xff){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);}}while(P2==0xfb){ P0=0xff;}}五、实验结果1、基本的流水灯基本流水灯仿真图2、简单键控的流水灯简单键控的流水灯仿真图3、键控的流水灯键控的流水灯仿真图六、思考题回答1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?答:电压的大小(包括它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它是否要加上拉电阻。
跑马灯实验报告
一、实验目的1. 熟悉嵌入式系统硬件电路的搭建与调试;2. 掌握C语言编程,实现跑马灯功能;3. 理解并掌握GPIO口操作,学习定时器中断的使用。
二、实验环境1. 开发板:STM32F103C8T6开发板2. 编译器:Keil uVision53. 软件库:STM32标准外设库三、实验原理跑马灯实验是通过控制LED灯的亮灭,实现LED灯依次点亮的效果。
实验原理如下:1. GPIO口控制:将LED灯连接到开发板的GPIO口,通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;2. 定时器中断:定时器产生中断,实现LED灯点亮与熄灭的时间间隔;3. 循环控制:通过循环控制LED灯的点亮顺序,实现跑马灯效果。
四、实验步骤1. 硬件电路搭建(1)将LED灯的正极连接到开发板的GPIO口,负极接地;(2)将开发板的电源和地线连接到电源模块。
2. 软件编程(1)在Keil uVision5中创建项目,并导入STM32标准外设库;(2)编写程序,实现以下功能:a. 初始化GPIO口,将LED灯连接的GPIO口配置为输出模式;b. 初始化定时器,设置定时器中断周期,使LED灯点亮与熄灭的时间间隔为1ms;c. 编写定时器中断服务程序,控制LED灯的点亮与熄灭;d. 编写主函数,实现LED灯依次点亮的效果。
3. 编译与下载(1)编译程序,生成可执行文件;(2)将开发板连接到计算机,通过串口下载程序到开发板。
4. 实验调试(1)打开串口调试助手,观察LED灯的点亮与熄灭效果;(2)调整程序参数,优化跑马灯效果。
五、实验结果与分析1. 实验结果(1)LED灯依次点亮,实现跑马灯效果;(2)LED灯点亮与熄灭的时间间隔可调。
2. 实验分析(1)通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;(2)定时器中断实现LED灯点亮与熄灭的时间间隔控制;(3)循环控制实现LED灯依次点亮的效果。
六、实验总结本次实验成功实现了跑马灯功能,加深了对嵌入式系统硬件电路、C语言编程和GPIO口操作的理解。
嵌入式02STM32实验04跑马灯
嵌⼊式02STM32实验04跑马灯开学STM32跑马灯的实验主要就是了解GPIO⼝的配置及使⽤,我这⾥是使⽤库函数进⾏编程,主要需要设置以下两⽅⾯: 1、使能需要使⽤的IO⼝的时钟,⼀共有A、B、C、D、E、F、G七组IO⼝ 2、初始化IO⼝(设置IO⼝的端⼝号(有GPIO_Pin_0 ~ GPIO_Pin_15,共16个IO端⼝)、设置IO⼝的输出速度、设置IO⼝的⼯作模式)代码如下1//端⼝初始化2 #include "led.h"3 #include "stm32f10x.h"45void LED_Init(void)6 {7 GPIO_InitTypeDef GPIO_KST;8910 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能端⼝B和E1112 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出13 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝514 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz15 GPIO_Init(GPIOB, &GPIO_KST); //初始化GPIOB.5161718 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出19 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝520 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz21 GPIO_Init(GPIOE, &GPIO_KST); //初始化GPIOE.522 }主程序1//主程序2 #include "sys.h"3 #include "delay.h"4 #include "led.h"56int main(void)7 {8 delay_init(); //延时初始化9 LED_Init(); //LED初始化10while(1)11 {12 GPIO_ResetBits(GPIOE, GPIO_Pin_5); //关闭PE5端⼝的LED13 GPIO_SetBits(GPIOB, GPIO_Pin_5); //关闭PB5端⼝的LED14 delay_ms(500); //延时100ms15 GPIO_SetBits(GPIOE, GPIO_Pin_5);16 GPIO_ResetBits(GPIOB, GPIO_Pin_5); //打开PB5端⼝的LED17 delay_ms(500); //延时100ms18 }1920 }。
单片机内部结构测试报告-跑马灯
单片机内部结构测试报告姓名:苏汉生班别:09机械1班学号:0915020045指导老师:庞志目录1.跑马灯实验12.跑马灯实验23.跑马灯实验34.按键实验、蜂鸣器5.定时器数码管显示6.看门狗实验7.AD数模转换实验程序运行分析一、跑马灯实验11.测试程序名称:跑马灯实验12.程序功能介绍:跑马灯1的程序功能主要是控制LED灯闪亮的顺序,使八个LED灯按照程序设定闪亮。
但对按键和其他元件不起任何控制作用。
3.程序相关的电路图:8位流水灯电路4.程序总体(主函数)流程图:5(1)(3)1ms延时函数:(4)N ms掩饰函数:6.程序涉及的技术解析:unsigned charLED_table[]={0xFE,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF ,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0 xFF,0x00,0xFF,0x7E,0xBD,0xDB,0xE7,0xFF,0x00,0xE7,0xDB,0xBD,0x7 E,0xFF,0x00};上述这个语句用到了一维数组,命名为LED_table,该数组一共有37个元素,每一个元素是一个十六进制的数,这些十六进制的数代表着开发板上的LED灯闪亮的规律(输出1为不亮,输出0为亮)。
PORTA = 0xFF;DDRA = 0xFF;DDRE=0XFF;PORTE=0XFF;上述语句是I/O口(端口A寄存器)的初始化,A口的8个脚控制开发板上的8个LED灯。
初始化A口设置为输出,8个引脚分别为1111 1111,LED等为全灭的状态。
单片机与LED灯之间连接了一个74HC573八进制3态非反转透明锁存器,E口2脚接在74HC573锁存器的使能端。
当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。
S3C2410 GPIO C语言跑马灯实验
实验2 S3C2410 GPIO C语言跑马灯实验一、实验目的掌握S3C2410 通用I/O口的特点,用法和C语言编程技巧,以及MDK GPIO的可视化配置方法,理解S3C2410启动代码中和GPIO有关的程序段。
二、实验预备知识熟悉UP-NETARM2410实验箱的结构,S3C2410的外设接口电路,熟悉MDK编程软件的使用方法,熟悉C语言程序设计的一般方法。
三、实验内容编写程序编译并下载到UP-NETARM2410实验箱S3C2410的Nand型Flash芯片K9F1208中,使得GPC5/GPC6/GPC7上所接的三个LED循环亮灭。
四、参考程序程序1(无S3C2410。
H)1 #define GPCDA T_ADDR (*(volatile unsigned int *)0x56000024)2 #define LED1_MASK 0x203 #define LED2_MASK 0x404 #define LED3_MASK 0x8056 void Delay(int n)7 {8 int i,j;9 for(i=0;i<n;i++)10 {11 for(j=0;j<n;j++)12 {13 }14 }15 }1617 int main()18 {19 int nLED;20 nLED = 0;21 while(1)22 {23 nLED = 0;24 nLED ^=(LED2_MASK | LED3_MASK);// LED1 light25 GPCDA T_ADDR = nLED;26 Delay(0x300);2728 nLED = 0;29nLED ^=(LED1_MASK | LED3_MASK);// LED2 light30 GPCDA T_ADDR = nLED;31 Delay(0x300);3233 nLED = 0;34 nLED ^=(LED1_MASK | LED2_MASK);// LED3 light35 GPCDA T_ADDR = nLED;36 Delay(0x300);3738 }3940 }建议用程序2程序2(有S3C2410。
实验二基于Proteus的跑马灯电路
实验二-基于Proteus的跑马灯电路实验二基于Proteus的跑马灯电路一、实验目的1、掌握Proteus系统的使用,能够建立、保存、打开和修改文件。
2、掌握使用各种元器件绘制电路原理图的方法,实现电路的仿真。
二、实验内容跑马灯电路,即完成P1口上的八个发光二极管循环闪亮。
三、实验步骤1、进入Keil C51软件的操作环境,编辑源程序并对源文件进行编译,在Keil中编辑汇编语言程序如下:ORG 0000H;给定起始地址为0000HAJMP MAIN ;绝对转移至MAINORG 30H ;程序源地址为30HMAIN: MOV R2,#16 ;循环次数送R2MOV A,#0FEH ;立即数0FEH送累加器LOOP: MOV P1,A ;累加器A中的值送P1口LCALL D1 ;对D1进行长调用RL A ;A的值循环左移一位DJNZ R2,LOOP ;R2-1不为零时转LOOPD1: MOV R4,#10 ;立即数10送R4D2: MOV R5,#100 ;立即数100送R5D3: MOV R6,#249 ;立即数249送R6DJNZ R6,$ ;R6-1不为零时暂停DJNZ R5,D3 ;R5-1不为零时转D3DJNZ R4,D2 ;R4-1不为零时转D2RETEND2、进入Proteus系统,画出实验电路图(1)元件拾取。
在桌面上选择【开始】→【程序】→“Proteus 7 Professional”ISIS 7 Professional的蓝色图标打开应用程序,进入编辑界面,如图2-1,鼠标左键单击界面左侧预览窗口下面的“P”按钮,弹出“元件拾取”对话框,如图2-2所示:图2-1 ISIS编辑界面图2-2元件拾取对话框在“元件拾取”对话框的Kewords处可以输入所要用到的原件英文全称或部元件名类数量3WATT10K Resistors 1At89C51 Microprocessor ICs 1BUTTON Switch&Relays 1CAP Capacitors 2CAP-ELEC Capacitors 1CRYSTAL Miscellaneous 1LED-BIBY Optoelectronics 8RESPACK-8 Resistors 1拾取元件后如图2-3所示,电源与接地器件选择左面工具条上的按钮,弹出界面,如图2-4所示:图2-3 拾取元件结果图2-4 电源、接地选择(2)、画出电路,如图2-5所示:图2-5 跑马灯电路原理图3、对Proteus 系统和Keil C51系统进行联机设置。
实验二 跑马灯综合性实验指导书
实验二跑马灯综合性实验指导书一、实验内容编写程序,应用片内定时器产生1s的定时中断,使用P0口控制8个指示灯,循环点亮(瞬间只有一个灯亮)。
二、实验目的及要求(一)实验目的通过该综合性实验,使学生进一步熟悉Keil_uVersion2和Protues环境软件的使用方法,掌握定时器及中断程序的编程及调试方法,能自己编写简单的程序,控制硬件。
(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。
2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。
三、实验条件及要求计算机,C51语言编辑、Keil_uVersion2和Protues仿真软件50台套。
四、实验相关知识点1.单片机内部结构。
2.C51编程、调试。
3.定时器结构及应用。
4.片内中断应用。
五、实验原理图六、实验参考流程图1.主程序流程图2.定时器中断服务程序流程图P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7XTAL220XTAL121ALE 33EA35PSEN 32RST10P0.0/AD043P0.1/AD142P0.2/AD241P0.3/AD340P0.4/AD439P0.5/AD538P0.6/AD637P0.7/AD736P1.02P1.13P1.24P1.35P1.46P1.57P1.68P1.79P3.0/RXD 11P3.1/TXD 13P3.2/INT014P3.3/INT115P3.4/T016P3.7/RD19P3.6/WR 18P3.5/T117P2.7/A1531P2.0/A824P2.1/A925P2.2/A1026P2.3/A1127P2.4/A1228P2.5/A1329P2.6/A1430U1AT89C51X111.0592MHzC122pFC222pFC310uFR1220R210kSWD1LED-BLUED2LED-BLUED3LED-GREEND4LED-GREEND5LED-REDD6LED-REDD7LED-YELLOWD8LED-YELLOWR3220R4220R5220R6220R7220R8220R9220R10220YN1->1秒到标志 0->50ms 计数器定时器0:方式一, 50ms 定时 开定时器中断 开中断总开关 开定时器0 0FEH->A1秒到标志=1开始0->1秒到标志 A->P1 RL A七实验程序#include<reg51.h> #include<intrins.h> unsigned char i,A; void main() { i=0; A=0xfe;TMOD = 0x01; TH0 = 0x3C; TL0 = 0x0B0; EA = 1; ET0 = 1; TR0 = 1; while(1) ; }void Timer0Interrupt(void) interrupt 1 {TH0 = 0x3C; TL0 = 0x0B0; i++; if(i==20) { P2=A; A=_crol_(A,1); i=0; } }八、实验实施步骤1.仔细阅读实验内容及要求,根据要求编写C51语言源程序。
跑马灯实验报告
跑马灯实验报告单片机跑马灯(流水灯)控制实验报告单片机实验报告姓名:学号:一、实验实现功能:1:计数器功能2:流水灯二、具体操作:1、计数器功能数码管的动态显示。
每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。
2、流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms。
三、程序流程图四、程序#include <reg50 ;//LED 开关void delay(uint16 i); //延时函数声明void refresh ();// 数码管刷新函数声明void liushuideng(); //流水灯函数声明uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管的真值表uint8 out[4] = {0}; // 数组变量uint16 counter=0; //用作计数器的变量uint16 Time_counter=0; //用作定时器的变量void main()//主函数{TMOD = 0x01;//定时器0,工作方式一TH0 = 0xFC;TL0 = 0x18;//定时器初值使每次循环为1msTR0 = 0;//定时器0开始作ET0 = 0; // 定时器中断关EA = 0;// 关中断while(1) //计数器模式{Ledk =1 ; //led开关关out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10];//十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000];//千位if (!Key2) //计数器加1{++counter; //自加out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000];//千位while(!Key2) //等待键盘抬起refresh(); //刷新数码管}refresh(); //刷新数码管if (!Key3) // 进入跑马灯模式liushuideng();}} //主函数结束/*******************延时*************/void delay(uint16 i){uint8 j;// 定义局部变量for(i;i>0;i--) //循环i*240 次for(j=240;j>0;j--);}/************数码管刷新******************/void refresh (){uint8 j;for (j=0;j<4;j++)//四次循环刷新数码管{switch(j){case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管default:break;}P0 = out[j]; // 位选,给数码管送值delay (20);//延时消抖}}/*************定时器的中断服务函数**************/ void Timer0_Overflow() interrupt 1//定时器0溢出中断,这个语句1ms执行一次{TH0 = 0xFC;TL0 = 0x18; //每1ms重新赋定时器初值Time_counter++; //计数,看经过了几个1ms}/***********************流水灯子函数****************************/ void liushuideng(){uint8 j = 0 ; //定义局部变量P0 = 0xff; // 小灯全关TR0 = 1; //定时器1开始计时EA = 1;//中断开放ET0 = 1; //定时器0中断开while(1){}}Ledk = 0 ; //打开LED开关P2 = P2|0x1E; //关掉数码管if(50 == Time_counter) //50个毫秒{ P0=~(1<<j++);//控制小灯Time_counter = 0; //清零开始下一次循环定时}if (8==j) //移完8次再重新移{ j=0;}。
STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本
STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本⼀、stm32跑马灯实验a.GPIOgeneral purpose input output通⽤输⼊输出端⼝,可以做输⼊也可做输出,GPIO端⼝可通过程序配置成输⼊或输出。
STM32FXXXIGT6⼀共9组IO:PA~ PI,其中PA~ PH每组16个IO,PI只有PI0~PI11。
16*8+12=140,⼀共140个IO⼝。
STM32⼤部分引脚除了当GPIO⽤,还可复⽤为外设功能引脚,⽐如串⼝。
节省引脚资源。
b.GPIO的8种⼯作模式4种输⼊模式:输⼊浮空、输⼊上拉、输⼊下拉、模拟输⼊4种输出模式带上下拉:开漏输出(带上拉或下拉)、开漏复⽤功能、推挽式输出、推挽式复⽤推挽输出可以输出强⾼低电平,连接数字器件开漏输出只可以输出强低电平,⾼电平得靠外部电阻拉⾼。
输出端相当于三级管的集电极c.GPIO寄存器4个32位配置寄存器GPIOx_MODER 模式GPIOx_OTYPER 输出类型GPIOx_OSPEEDR 输出速度GPIOx_PUPDR 上拉下拉2个32位数据寄存器GPIOx_IDR 输⼊数据GPIOx_ODR 输出数据1个32位置位/复位寄存器GPIOx_BSRR 置位/复位1个32位锁存寄存器GPIOx_LCKR 配置锁存2个32位复⽤功能寄存器GPIOx_AFRL&GPIOx_AFRH 复⽤功能每组IO⼝由10个寄存器组成如果配置⼀个IO⼝需要2个位,32位寄存器配置⼀组IO⼝,16个IO⼝如果配置⼀个IO⼝只需要1个位,⾼16位保留1.寄存器定义F767:stm32f767xx.h⽂件中查找GPIO得到:typedef struct{__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */} GPIO_TypeDef;再查找GPIO_TypeDef找到:#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE)#define GPIOJ ((GPIO_TypeDef *) GPIOJ_BASE)#define GPIOK ((GPIO_TypeDef *) GPIOK_BASE)可以看出GPIOA是⼀个结构体指针,它指向基地址。
跑马灯
学院: 电气工程学院 姓名 实验时间 实验项目名称 实 2,熟悉 protues 软件,搭建 51 单片机最小系统,并联合 keil 软件编写汇编程 验 序控制单片机 I/O 口。 目 的 内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是 12 个振荡 器周期。定时常数的设置可按以下方法计算: 机器周期=12÷ 晶振频率(1) (65536-定时常数)*机器周期=定时时间 (2) 由(1) 、 (2)式可计算出所需定时常数。由于各实验板的晶振频率不同,实验时 需根据所使用实验板计算定时常数。 子程序的调用遵循如下流程图的规则: 实 验 原 理 杨泽森 专业: 测控技术与仪器 学号 指导教师 跑马灯的设计 1108040035 陈湘萍 班级: 测控 111 实验组 成绩
指 导 教 师 意 见 签名: 年 月 日
编写并调试程序: ORG LJMP ORG LJMP ORG MAIN: 0000H MAIN 000BH TOISR 0030H MOV P0,#00H
MOV R0,#0 MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB ET0 实 SETB EA 验 SJMP $ 内 TOISR: CLR 容 MOV TH0 , #3CH MOV TL0, #0B0H SETB TR0 TR0
最终仿真电路如图所示:
实 验 数 据
在这次设计中我们收获了很多,首先最直接的收获就是我们巩固了这门课程所学过 实 验 总 结 的知识,总的来说,通过这次设计不仅锻炼了我们的动手和动脑能力。在我们的共同努 力和指导老师的指引下我们圆满的完成了设计,实现了设计目的。通过本次的实验的学 习,让我们更加熟悉了编程软件 Keil μVision4 的编程环境及 protues 软件的基本运用, 在实验中,通过 protues 软件的仿真跑马灯的实验,让我们更加熟悉程序的执行过程以 及在生活的实际运用,为今后我们对此门课程打下了基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 I/O接口实验
[实验目的]
1.熟悉ARM芯片I/O口配置方法
2.通过实验掌握ARM芯片I/O控制LED显示的方法
[实验仪器]
1.Proteus仿真的LPC2000系列的ARM处理器
2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境
[实验原理]
根据LPC2000系列ARM芯片的特点,可以将P0口的功能设置为GPIO,用来驱动LED等设备或者接受矩阵键盘的输入等。
[实验内容]
设计一个ARM驱动LED的电路,使用LPC2000的GPIO功能,编写一个LED跑马灯程序,并且在Proteus上仿真运行。
[预备知识]
LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。
通过引脚连接模块PINSELx控制引脚功能
[实验步骤]
一、参考实验一建立ARM的GPIO电路,图中使用P0口的低八位驱动八个发光二极管,元件参
元件元件参数
Res1~8 51欧
Cap1~4 22P(仿真时候没有影响)
晶振1,2 11.0592MHz和32768(仿真时候没有影响)
LED 红绿黄蓝颜色的各两个
二、使用Keil MDK软件和C语言编写LED的驱动程序:
按照实验一创建一个Keil项目,项目名称叫GPIO,不过在提示下图时候选择是,而不是否。
此处使用Keil提供的汇编启动文件来启动arm处理器,不再使用自己编写的汇编语言了。
创建项目后界面如下:
在项目配置的界面下,linker页按如下设置,不按照实验一的设置进行。
其余的设置按照实验一设定。
双击打开 Startup.s文件,见下图
这个文件有两种编辑方式,一种是使用文本方式,就是上图中的TextEditor。
另一种是菜单界面的配置方式Configuration Wizard,用来配置ARM处理器的运行时候的设置。
点击Configuration Wizard(上图的编辑区的下方)如下图
按照图上设置,取消锁相环的设置。
(同样的方式也可以设置其它选项,大家做实验的时候可以分别展开各个选项查看并熟悉一下,以后实验备用)。
新建一个文本文件,保存并且命名为gpio.c,并添加到该项目中。
按照如下操作进行:
弹出如下窗口
像该文本中添加代码
在文本编辑区中右击一下,选择Insert ‘#include <LPC2103.H>’然后添加C语言函数的框架,见下图
点击保存为gpio.c
然后将该文件添加到项目中,按下图顺序操作
点击Add按钮,点击Close按钮即可。
最后工程的界面如下:
如果和上图不一样,检查一下操作步骤。
接下来向main函数中添加代码,实现跑马灯功能。
/*主程序main.c*/
#define LEDCON 0x000000ff // P0.0~7引脚控制LED
/**************************************************************************** * 名称:DelayNS()
* 功能:长软件延时。
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/ void DelayNS(int dly)
{
int i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
int main()
{
int i;
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IODIR = LEDCON; // 设置I/O为输出
while(1) //此处设置跑马灯的各种闪烁动作,同学们可以自由修改
{
for(i=0;i<16;i++){
IOSET = LEDCON;
DelayNS(100);
IOCLR = LEDCON;
DelayNS(100);
}
for(i=0;i<256;i++){
IOCLR = ~i;
IOSET = i;
DelayNS(30);
}
for(i=0;i<10;i++){
IOCLR = ~(i|(i<<4));
IOSET = i|(i<<4);
DelayNS(100);
}
}
return 0;
}
将生成的Hex文件加载到Proteus中的ARM处理器中,运行。
观察LED的闪烁情况,找出与代码中对应的部分。
对LED的闪烁情况做记录。
[思考与分析]
1.将跑马灯的闪烁变成左右来回移动的方式,每次只有一个led亮。
试着修改代码完成对此功能。
2.查找上课笔记,采用数组的方式实现led的闪烁,闪烁规律自定义。
3.在P0.8引脚上添加一个琴键开关,并将P0.8设置为输入。
当琴键开关按下的时候,出现一种跑马灯的闪烁规律,当琴键开关没按下(抬起)的时候,跑马灯以另外一种形式在闪烁。
见下图。