实验七 LED跑马灯实验1
- 格式:doc
- 大小:1.13 MB
- 文档页数:7
跑马灯实验报告姓名:班级:跑马灯实验报告试验目的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溢出中断一次。
实验七LED跑马灯实验1 (点灯)一、实验目的1.掌握嵌入式ARM的I/O及其相关设置;2.继续熟悉ARM开发环境。
二、实验内容1.了解S3C6410实验板I/O接口原理。
2.利用ADS编译环境,用C语言编写点亮一盏灯主程序。
三、实验设备硬件:S3C6410实验板;PC机;串口通信线;软件:PC机操作系统(WINDOWS XP);ARM Developer Suite v1.2;超级终端四、实验步骤1.新建ARM工程:工程名字自拟启动ADS开发环境,选择File→New(Project)选项,使用ARM Executable Image工程模板创建一个工程。
2.新建C语言程序文件led.c(名字自拟),并将其添加到工程中选择File→New(File)选项,新建汇编源程序文件,并添加到工程中,定义被汇编程序调用的C函数g( )和全局变量sum添加到工程中,led.c源程序的参考代码如下:/*------------------------地址声明---------------------------*/#define GPQCON (*(volatile unsigned *)0x56000010)#define GPQDAT (*(volatile unsigned *)0x56000014)#define GPQUP (*(volatile unsigned *)0x56000018)#define uchar unsigned char#define uint unsigned int/*-----------------------定义全局变量------------------------*//*----------------------------------------------------------函数名称:ledMain功能描述:入口程序初始化后,进入跑马灯死循环传参:无返回值:int 0-------------------------------------------------------------*/int ledMain(void){GPQCON = ??????; //设置为输出GPQDAT =??????; //使LED全灭GPQUP = 0x00;while (1) // 死循环{GPQDAT = ?????; //LED0亮}return 0;}3.新建汇编程序文件Init.s,并将其添加到工程中选择File→New(File)选项,新建汇编源程序文件Init.s,并添加到工程中,参考代码如下:AREA DA TA,CODE,READONL YENTRYldr r13, =0x1000IMPORT ledMainb ledMainEND4.设置工程的编译和链接选项选择Edit→DebugRel Settings选项,打开DebugRel Settings对话框,设置工程编译和链接选项,在Target→Target Settings选项中,打开Post-linker选项,选择ARM fromELF,在Language Settings→ARM Assembler选项中,选择Target选项卡,修改处理器类型为ARM920T,在Linker→ARM Linker选项中,打开Output选项卡,在RO base里填写地址0x32000000,在Options选项卡中,填写Image entry point地址0x32000000,打开Lay Out选项卡,在Objec/symbol中填写你建立的汇编程序名.o。
跑马灯实验报告引言跑马灯是一种常见的公共场所宣传和广告工具。
它通过不断闪烁的灯光来吸引人们的注意,向他们传达信息和内容。
在这个报告中,我们将通过一系列实验来研究跑马灯的工作原理、效果和可能的应用领域。
实验一:跑马灯的基本构造实验目的通过拆解和分析跑马灯的结构,理解其基本构造和工作原理。
实验步骤1.拆解一台跑马灯,将其分解为基本组成部分,如灯管、控制电路和外壳等。
2.分析每个组成部分的作用和功能。
实验结果根据我们的拆解和分析,我们得出了以下结论:•灯管:灯管是跑马灯的核心部件,它通过发光来吸引人们的注意。
•控制电路:控制电路负责控制灯管的闪烁频率和模式。
•外壳:外壳起到保护和美化跑马灯的作用。
实验二:跑马灯的效果分析实验目的评估不同频率和模式的跑马灯对人眼的刺激程度和注意力吸引效果。
实验步骤1.准备三台不同频率的跑马灯(低频、中频和高频)。
2.让一组实验参与者观察每种频率的灯光,并记录他们的感受和注意力集中程度。
3.对比不同频率下的实验结果,并做出分析和总结。
实验结果我们的实验结果表明:•高频率的跑马灯更容易引起人们的注意,但也会让他们感到疲劳或不适。
•低频率的跑马灯对人眼的刺激相对较轻,但可能不足以引起足够的关注。
•中频率的跑马灯在刺激度和注意力吸引效果之间取得了一个平衡,被认为是比较理想的选择。
实验三:跑马灯的应用展望实验目的探索跑马灯在不同场景和领域的应用潜力,并分析其优势和限制。
实验步骤1.分析跑马灯目前的主要应用领域,如商业广告、警示通知和信息发布等。
2.探寻跑马灯在其他领域中的潜在应用,如教育、娱乐和医疗等。
3.分析跑马灯在不同应用领域中的优势和限制。
实验结果我们的分析结果表明:•跑马灯在商业广告和公共通知中具有广泛应用的潜力,因为它能够吸引人们的注意并传达信息。
•跑马灯在教育领域中可以用于展示学生作品、提醒学生重要事项等,但需注意不要过度刺激学生眼睛。
•跑马灯在医疗领域中可以用于显示患者信息、提醒医生注意事项等,但需确保灯光不会对患者或医生造成不适。
汇编语⾔实现led灯的跑马灯led实验1.看原理图看设备⼯作的原理(可能需要阅读芯⽚⼿册),看设备与cpu的连接关系GPIO具有输⼊输出功能。
输⼊:cpu想知道io引脚是⾼电平还是低电平那么就是输⼊⽅式输出:cpu想控制io引脚为⾼电平还是低电平那么就是输出⽅式跟电流的⽅向没有任何关系2. cpu的相关章节GPJ2CON control是配置这个引脚是什么功能GPJ2有8个引脚,每个引脚由con寄存器中的4个位进⾏配置GPJ2DAT 如果cpu要输出⾼电平或者低电平,就需要设置该寄存器,只有8位有效When the port is configured as input port, the correspondingbit is the pin state. When the port is configured as outputport, the pin state is the same as the corresponding bit.When the port is configured as functional pin, the undefinedvalue will be read.当配置为输⼊模式的时候,dat寄存器中的某⼀位的值由引脚设置,引脚是⾼电平是,对应的位为1,引脚为低电平时,对应的位为0当配置为输出模式的时候,dat寄存器中的某⼀位控制引脚的电平,对应的位为1时,对应的引脚输出⾼电平,对应的位为0时,对应的引脚输出为低电平其他功能模式时,读到的值是未定义的。
@gec210 light first led.globl _start_start:ldr r0,=0xe0200280mov r1,#1<<4str r1,[r0] @config pin0 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);arm-linux-gcc -c led.S -o led.o //编译不链接arm-linux-ld -Ttext 0x30008000 led.o -o led.elf //链接指定代码段起始位置arm-linux-objcopy -O binary led.elf led.bin //⽣成⼆进制执⾏⽂件arm-linux-objdump -D led.elf > led.dis //⽣成反汇编代码uboot的⼏个常⽤命令printenv 打印显⽰环境变量ipaddr=192.168.1.4 //开发板的ipserverip=192.168.1.2 //tftp服务器的ip设置为各⾃的ip,只是设置到内存,掉电就没有setenv ipaddr 192.168.1.xsetenv serverip 192.168.1.xsaveenv //保存到flash中,再次启动后为刚刚设置的值ping //单向的,只能从开发板ping电脑alive表⽰⽹络是通的,not alive表⽰⽹络不通tftp 30008000 led.bin //下载⼆进制⽂件到内存0x30008000地址go 30008000 //跳转到0x30008000运⾏程序@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);简单的makefileAPP=led$(APP).bin:$(APP).oarm-linux-ld -Ttext 0x30008000 $^ -o $(APP).elf arm-linux-objcopy -O binary $(APP).elf $@ arm-linux-objdump -D $(APP).elf > $(APP).dis cp $@ /home/gec/tftp/%.o:%.sarm-linux-gcc $^ -c -o $@%.o:%.Sarm-linux-gcc $^ -c -o $@%.o:%.carm-linux-gcc $^ -c -o $@clean:@rm -f $(APP).bin $(APP).elf $(APP).dis *.o四个灯同时点亮或者同时熄灭循环闪烁@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output mode loop:mov r1,#0str r1,[r0,#4] @output low levelbl delaymov r1,#0xfstr r1,[r0,#4]bl delayb loopb . @same as while(1);delay:mov r4,#0xff00000delay1:subs r4,r4,#1bne delay1mov pc,lr#define GPJ2CON (unsigned long *)0xe0200280unsigned long *p = (unsigned long *)0xe0200280;p练习:第1个灯到第4个灯依次点亮,第4个灯到第1个灯依次熄灭,循环。
跑马灯实验报告
实验目的,通过搭建一个简单的跑马灯电路,了解电子元件的基本原理和电路的工作方式。
实验器材,LED灯、电阻、导线、电池、开关、面包板。
实验步骤:
1. 将LED灯的正极与电池的正极通过导线连接起来,负极与电阻连接,然后再将电阻的另一端与电池的负极连接。
2. 将开关连接到电路中,使得可以通过开关控制电路的通断。
3. 将整个电路搭建在面包板上,确保连接牢固。
4. 打开开关,观察LED灯的亮灭情况。
实验结果:
经过搭建和观察,我们发现当开关闭合时,LED灯会亮起;当开关断开时,LED灯会熄灭。
通过不断地开合开关,我们可以看到LED灯会不断地亮灭,就像跑马灯一样在不同的位置闪烁。
实验分析:
跑马灯实验的原理是利用开关控制电路的通断,从而控制LED灯的亮灭。
当开关闭合时,电路闭合,电流可以流通,LED灯就会亮起;当开关断开时,电路断开,电流无法流通,LED灯就会熄灭。
通过不断地开合开关,就可以实现LED 灯的频繁闪烁,呈现出跑马灯的效果。
实验总结:
通过这个简单的跑马灯实验,我们了解了电子元件的基本原理和电路的工作方式。
同时,我们也体会到了实验中的观察和分析的重要性。
在今后的学习中,我们将进一步深入学习电子电路的知识,探索更多有趣的实验和应用。
以上就是本次跑马灯实验的实验报告,希望对大家有所帮助。
一、实训目的本次心形跑马灯实训旨在通过实际操作,让学生掌握心形跑马灯的设计原理、电路搭建、编程控制以及实际应用等方面的知识。
通过实训,提高学生的动手能力、创新能力和团队协作能力,同时加深对电子技术、嵌入式系统及编程的理解。
二、实训背景随着科技的发展,嵌入式系统在日常生活中得到了广泛应用。
心形跑马灯作为一种新颖的电子装饰品,具有较高的观赏性和实用性。
本实训项目以心形跑马灯为载体,让学生在实训过程中学习相关知识,培养创新意识。
三、实训内容1. 心形跑马灯设计原理心形跑马灯采用LED灯珠作为显示单元,通过单片机控制LED灯珠的亮灭,形成动态的心形图案。
设计原理主要包括以下几个方面:(1)心形图案设计:通过数学公式计算心形图案的坐标点,将坐标点映射到LED灯珠上。
(2)LED灯珠驱动电路:设计LED灯珠的驱动电路,确保LED灯珠正常工作。
(3)单片机控制电路:设计单片机控制电路,实现LED灯珠的亮灭控制。
2. 心形跑马灯电路搭建(1)电路元器件:主要包括单片机、LED灯珠、电阻、电容、面包板、导线等。
(2)电路搭建步骤:①根据设计原理,设计电路图。
②在面包板上搭建电路,连接单片机、LED灯珠、电阻、电容等元器件。
③检查电路连接是否正确,确保电路正常工作。
3. 心形跑马灯编程控制(1)编程环境:使用C语言进行编程。
(2)编程步骤:①初始化单片机端口,设置LED灯珠的亮灭模式。
②编写心形图案的生成函数,计算心形图案的坐标点。
③编写控制LED灯珠亮灭的函数,实现心形图案的动态显示。
4. 心形跑马灯实际应用(1)展示平台:将心形跑马灯应用于各类活动、展览等场合,展示其独特魅力。
(2)应用场景:如商场、酒店、旅游景点等。
四、实训过程1. 理论学习:首先,学生对心形跑马灯的设计原理、电路搭建、编程控制等方面进行理论学习,了解相关知识。
2. 电路搭建:在面包板上搭建心形跑马灯电路,连接元器件,确保电路正常工作。
3. 编程实践:使用C语言编写心形跑马灯的代码,实现心形图案的动态显示。
学号***********序号34单片机原理与接口技术实验报告实验项目序号实验一实验项目名称跑马灯实验姓名王海标专业电气工程及其自动化班级电气15-2BF 完成时间2017年3月18日实验一跑马灯实验一、实验目的1、熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法;2、掌握采用汇编语言与C语言开发单片机系统的程序结构;3、掌握51系列单片机通用I/O口的使用。
二、实验前准备1、完成作业3;2、根据实验内容编写好相关程序,并进行Proteus仿真。
三、实验内容1、基本的流水灯。
根据图3.1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3 (8)D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯。
上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
四、软件设计思想1、基本的流水灯软件延时采用程序void delay(unsigned int c),可调整延时时间。
2、简单键控的流水灯。
由于是按下键不松手,键值一直保留,所以判断if(K1==0),即是按下K1,采用如例题所示的if(K1==0)或if(K1==1),后接while(1)循环的模式。
3、键控的流水灯由于是按一下键后马上松手,所以要设置一个变量K保留按键键值,由于单片机本身原理图所致,K17、K18、K19、K20四个键已经固定为K17=P2^0、K18=P2^1、K19=P2^2、K20=P2^3所以直接运用,利用如if(K1==0)的条件判断语句来判断是否按下K1、K2、K3按键,实现键控流水灯。
五、实验原理图如图3.1所示。
实验报告跑马灯实验报告:跑马灯引言:跑马灯作为一种常见的室内装饰和广告展示工具,广泛应用于商场、剧院、车站等公共场所。
本实验旨在探究跑马灯的工作原理和设计过程,并通过实际搭建跑马灯模型进行验证。
一、跑马灯的工作原理跑马灯是通过一组灯泡或LED灯组成的,它们按照一定的顺序依次亮灭,从而形成连续的动态效果。
跑马灯的工作原理主要包括电路控制和程序设计两个方面。
1. 电路控制:跑马灯的电路控制是通过继电器或集成电路实现的。
继电器是一种电磁开关,通过控制电磁铁的通断来控制灯泡的亮灭。
而集成电路则是通过逻辑门和计时器等元件实现灯泡的顺序控制。
2. 程序设计:跑马灯的程序设计是通过编写一段简单的代码来实现的。
在代码中,通过控制灯泡或LED灯的亮灭时间和顺序来实现跑马灯效果。
常见的程序设计语言如C、Python等都可以用来编写跑马灯的代码。
二、跑马灯的设计过程跑马灯的设计过程包括灯泡或LED灯的选型、电路设计、程序编写和外壳制作等步骤。
1. 灯泡或LED灯的选型:在跑马灯的设计中,选择合适的灯泡或LED灯是非常重要的。
灯泡的亮度、寿命和能耗等指标需要进行综合考虑。
而LED灯则具有节能、寿命长和颜色丰富等优点,因此在现代跑马灯设计中更加常见。
2. 电路设计:电路设计是跑马灯设计中的关键环节。
在电路设计中,需要考虑灯泡或LED灯的亮灭顺序、时间间隔和电源供应等因素。
通过合理的电路设计,可以实现跑马灯的稳定运行和灯泡的长寿命。
3. 程序编写:程序编写是跑马灯设计中的另一个重要环节。
通过编写一段简单的代码,可以控制灯泡或LED灯的亮灭顺序和时间间隔。
程序编写需要考虑灯泡或LED灯的数量和控制方式等因素,以实现预期的跑马灯效果。
4. 外壳制作:外壳制作是跑马灯设计中的最后一步。
通过设计和制作合适的外壳,可以保护电路和灯泡或LED灯,同时也可以增加跑马灯的美观性。
外壳的材料可以选择塑料、金属或木材等,根据实际需要进行选择。
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容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、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
单片机内部结构测试报告姓名:苏汉生班别: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时,符合建立时间和保持时间的数据会被锁存。
单片机整套实验及程序(交通灯,跑马灯等)实验1 跑马灯实验一实验目的初步学会Proteus ISIS和 uVision2单片机集成开发环境的使用初步掌握采用汇编语言与C语言开发单片机系统的程序结构掌握80C51单片机通用IO口的使用掌握单片机内部定时计数器的使用及编程方法以及中断处理程序的编写方法二实验设备及器件硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序采用P1口作为控制端口使与P1口相接的四个发光二极管D1D2D3D4按照一定的方式点亮如点亮方式为先点亮D1延时一段时间再顺序点亮D2D4然后又是D4D1同时只能有一个灯亮然后每隔一段时间一次使相邻两个灯亮三个灯亮四个灯亮最后闪烁三次接着循环变化基于Proteus ISIS仿真环境完成上述功能的仿真基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行四实验原理图图31 跑马灯实验电路原理图电路原理图如上图31所示AT89S52的P10P13控制4个发光二极管发光二极管按照一定次序发光相邻发光二极管的发光时间间隔可以通过定时器控制还可以通过软件延时实现五软件流程图与参考程序主程序流程图如下参考程序includeincludedefine uchar unsigned chardefine uint unsigned intuchar aanumspeedflaguchar code table[] 0x0e0x0d0x0b0x07uchar code table1[] 0x0a0x050x090x06uchar codetable2[] 0x0c0x090x030x080x010x0e0x0c0x080x00void delay uint z 延时函数uint xuchar yfor x zx 0x--for y 200y 0y--void init 条件初始化函数flag 0speed 10控制跑马灯流水速度TMOD 0x01中断方式TH0 65535-50000 256TL0 65536-50000 256初值EA 1打开总中断ET0 1打开外中断0TR0 1void maininit 调用初始化函数while 1if flagdelay 2000 调用延时函数for num 0num 4num 从左至右间隔一个依次闪烁P1 table[num]delay 2000for num 3num 0num-- 从左至右间隔一个依次闪烁P1 table[num]delay 2000for num 0num 4num 从左至右间隔两个依次闪烁P1 table1[num]delay 2000for num 3num 0num-- 从左至右间隔两个依次闪烁P1 table1[num]delay 2000for num 0num 6num 两个三个四个跑马灯依次闪烁P1 table2[num]delay 2000for num 0num 5num 闪烁5次P1 0xff全暗delay 2000P1 0X00全亮delay 2000speed speed-3变速if speed 4speed 10void timer0 interrupt 1中断函数TH0 65535-50000 256TL0 65536-50000 256aaif aa speedaa 0flag 1六实验思考题请用汇编指令完成本实验内容深刻理解汇编语言程序设计结构在本实验中IO口作为输出口使用如果把IO口的某些口线作为输入口使用时如何获得输入引脚状态请举例说明在画软件流图时各种不同形式方框意义是否相同请举例示之请简要叙述中断服务程序功能并画出其流程图在采用IO口作为输出口时要考虑哪些因素如果负载变化如何设计单片机与负载之间的接口电路实验2 交通灯实验一实验目的进一步掌握Proteus ISIS和 uVision2单片机集成开发环境的使用进一步掌握单片机内部定时计数器的使用及编程方法以及中断处理程序的编写方法掌握单片机的IO口编程使用二实验设备及器件硬件PC机HNIST-1型单片机实验系统USB下载线一根连接线若干软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序实现用单片机的IO口控制12个发光二极管四组每组有红绿蓝三个发光二极管使发光二极管按照一定的规则模拟交通灯功能基于Proteus ISIS仿真环境完成上述功能的仿真基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行四实验原理图32 交通灯实验原理图用单片机的IO口控制4组红绿蓝共12个发光二极管使发光二极管按照一定规则与次序发光与闪亮以实现模拟交通灯的功能假设初始状态为南北通行状态南北绿灯东西红灯25s后转为过度状态南北黄灯东西红灯5s再转为东西通行状态东西绿灯南北红灯25s再转为过渡状态东西黄灯南北红灯 5s 然后循环往复硬件原理图如上图32所示由于发光二极管的导通电压为17V所以在电源与二极管之间加一个电阻目的是保护二极管实验中利用定时计数器实现1S的定时然后在此基础上实现所需要的定时时间五软件流程图与参考源程序软件设计思想在编程时我们一般把一个独立的功能设计成一个子程序或者说函数对于不同的设计者而言对软件功能的划分角度不同对应的函数功能也存在差异图33 软件结构图参考源程序如下include 头文件define uint unsigned intdefine uchar unsigned char定义下方便使用sbit kong P14位声明数码管锁存控制端uchar code table[] 0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf6 数字0-9编码uint tttemp 0延时函数void delay uint xuchar ikfor i 0i xifor k 0k 100k初始化函数void inittemp 0tt 0TMOD 0x01定时器工作方式TH0 65536-50000 256TL0 65536-50000 256装初值EA 1开总中断ET0 1开定时器中断TR0 1启动定时器中断数码管显示函数void display uint x1uchar icuint cod[4]cod[3] x11000cod[2] x11000100cod[1] x1100010010cod[0] x110 求个数码管的值c 0x01for i 0i 4iP1 c数码管的显示选择P0 table[cod[i]]送要显示的值kong 1打开锁存c c 1左移一位选择下一个数码管kong 0关闭锁存delay 10交通灯驱动函数void jiaotonguint t 0if temp 0temp 60给temp装值也即是交通灯循环一次要的时间if temp 30if temp 35display temp-30P2 0Xf5南北黄灯东西红灯5selsedisplay temp-30P2 0xdd 南北绿灯东西红灯25selseif temp 5display tempP2 0xee 东西黄灯南北红灯 5selsedisplay tempP2 0xeb 东西绿灯南北红灯25s if tt 20 判断时间是否过了1stt 0temp--倒计数主函数void maininit 初始化函数调用while 1 主循环jiaotong 交通灯函数调用中断函数void timer0 interrupt 1TH0 65536-50000 256TL0 65536-50000 256 重新装初值tt六实验思考题如何实现扩充功能实现救护车优先通过十字路口请叙述硬件设计与软件设计原理在利用单片机片内定时器实现精确定时时是否会产生误差如果存在误差请分析误差产生原因以及减小误差方法实验3 数码管动态显示实验一实验目的掌握数码管静态显示与动态显示原理以及数码管与单片机的接口原理学会利用单片机的IO口实现数码管的动态显示二实验仪器硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序采用P1口某些口线作为4位数码管的位控制端采用P0口输出段码实现4位数码管的测试让4位数码管同时输出0~F编写程序让4位数码管循环显示1234即让第一位显示1然后第一位熄灭第二位显示2四实验原理使用LED数码显示器时要注意区分数码管两种不同的接法共阴LED和共阳LED为了显示数字或字符必须对数字或字符进行编码七段数码管加上一个小数点共计8段因此为LED显示器提供的编码正好是一个字节八段LED数码管显示器原理与结构如下图34所示对于共阴接法要使某位LED显示相应数码则使LED的对应段点亮则对应控制电平为高如要显示数字0如果a~dp分别受P07~P00控制则LED的abcdef需点亮对应驱动电平为1其他为0则对应数码0的段码为FCH共阴极共阳极图34 八段LED数码管原理与结构图LED显示器工作方式有两种静态显示方式和动态显示方式静态显示的特点是每个数码管的段码必须需要一个数据锁存器锁存当送入字形码后显示字形可一直保持直到送入新字形码为止显示亮度较强而动态显示是多个LED轮流显示但由于人眼的视觉惰性使人感觉各LED同时显示不同字符表31 本实验硬件所采用共阴极数码管码表数字数码管代码数字数码管代码数字数码管代码0 0xfc6 0xbe C 0x9c 1 0x607 0xe0 d 0x7a 20xda 8 0xfe E 0x9e 3 0xf2 9 0xf6 F 0x8e4 0x66 A 0xee 无显示 0x005 0xb6 b 0x3e一般而言为了减少硬件开销降低成本单片机系统通常采用LED动态扫描显示方式本实验电路原理图如下图35所示图35 LED动态显示电路原理图五部分软件流程图与参考程序●流程图否是图36 软件流程图●源程序include 包含头文件define uchar unsigned chardefine uint unsigned int 宏定义sbit dula P14 端口定义uchar numyuint x 定义变量ucharcode table[] 0xfc0x600xda0xf20x660xb60xbe0xe00xfe 0xf60xee0x3e0x9c0x7a0x9e0x8e 0到F的数码管管码主函数void mainwhile 1 进入大循环P1 P1|0x1ffor num 0num 16num 判断是否到Fdula 1开启锁存器P0 table[num]送数码管管码dula 0关闭锁存器for x 2000x 0x--for y 220y 0y-- 延时六实验思考题●本实验源程序是让4位LED同时显示相同的内容完成其测试请编写程序让4位LED轮流显示从0~F的数码即让第一位数码管显示0后接着第二位数码管显示0一个轮回结束后让第一个显示1请设计一个单片机控制的4位数码管的静态显示电路解释其工作原理如何采用本实验电路以及单片机片内定时器实现一个简易时钟功能精度较低说明实现方式实验4 88 LED点阵实验一实验目的了解LED点阵显示原理掌握LED点阵显示器件与单片机的接口电路设计原理掌握LED显示器件显示驱动程序设计方法能编写LED显示驱动程序二实验设备及器件硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境根据给定实验设备选用相关模块完成LED点阵显示实验系统的硬件平台构建根据所构建硬件平台编程实现点阵循环显示数字09四实验原理芯片介绍174LS138 3 线-8 线译码器原理当一个选通端G1为高电平另两个选通端G2A和G2B为低电平时可将地址端ABC的二进制编码在一个对应的输出端以低电平译出Y0-Y7为输出端另外74LS138真值表请参看相关资料274LS595串入并出8位输出移位锁存器以下为其引脚功能说明QA--QH 八位并行输出端可以直接控制数码管的8个段或者点阵LED的列线QH 级联输出端我将它接下一个595的SI端SER 串行数据输入端SCLR 10脚低电平时将移位寄存器的数据清零通常我将它接Vcc SCK 11脚上升沿时数据寄存器的数据移位QA-- QB-- QC-- -- QH下降沿移位寄存器数据不变脉冲宽度5V时大于几十纳秒就行了通常都选微秒级RCK 12脚上升沿时移位寄存器的数据进入数据存储寄存器下降沿时存储寄存器数据不变通常我将RCK置为低点平当移位结束后在RCK端产生一个正脉冲5V时大于几十纳秒就行了通常都选微秒级更新显示数据G 13脚高电平时禁止输出高阻态另外74LS595操作时序请参考相关资料请根据操作时序叙述操作过程如下图37所示图37 点阵LED实验电路原理图五软件流程图与参考程序软件流程图首选确定所需要的子程序子程序主要包括一是74LS595芯片驱动程序完成串入并出控制LED点阵列的驱动一个是驱动74LS138芯片的实现LED点阵行的驱动还有一个是延时函数读者可以根据相应芯片工作原理完成其驱动流程图绘制对于要显示的字符09的循环显示显示间隔采用定时器实现此时涉及到定时器中断服务子程序的编写另外LED点阵列驱动采用的是动态显示原理也需要定时器定时对于主程序而言就很简单了主要是完成一些初始化工作源程序include 头文件includedefine uchar unsigned char 宏定义define uint unsigned intsbit SCK P00 芯片端口连线定义sbit RCK P01sbit SER P02sbit D138_A P05sbit D138_B P06sbit D138_C P07uchar code hang[8] 12345678 点阵行数组定义uchar code lie[10][8] 数字09列代码0x000x7c0x820x820x820x7c0x000x00 0 0x000x000x840xfe0x800x000x000x00 10x000xe40x920x920x920x8c0x000x00 20x000x440x920x920x920x6c0x000x00 30x000x100x180x140xfe0x100x100x00 40x000x4e0x8a0x8a0x8a0x720x000x00 50x000x7c0x920x920x920x640x000x00 60x000x020x020xfa0x060x020x000x00 70x000x6c0x920x920x920x6c0x000x00 80x000x4c0x920x920x920x7c0x000x00 9uint timecountuchar abvoid Delay uchar time 延时函数uchar ijfor i timei 0i--for j 320j 0j--void Set595 unsigned char Data 74LS595驱动函数unsigned char ifor i 0 i 8 iSCK 0 先置为低SER Data 0x80 取数据的最高位Data 1 将数据的次高位移到最高位为下一次取数据做准备SCK 1 再置为高产生移位时钟上升沿上升沿时数据寄存器的数据移位RCK 0_nop_RCK 1void Set138 unsigned char Data 138芯片二进制译码选择行输出switch Datacase 0D138_A 0D138_B 0D138_C 0Delay 1 break case 1D138_A 1D138_B 0D138_C 0Delay 1 break case 2D138_A 0D138_B 1D138_C 0Delay 1 break case 3D138_A 1D138_B 1D138_C 0Delay 1 break case 4D138_A 0D138_B 0D138_C 1Delay 1 breakcase 5D138_A 1D138_B 0D138_C 1Delay 1 breakcase 6D138_A 0D138_B 1D138_C 1Delay 1 breakcase 7D138_A 1D138_B 1D138_C 1Delay 1 breakvoid main voidTMOD 0x01 设置定时器的工作方式TH0 65536-3000 256TL0 65536-3000 256 设置初值每次定时中断3msEA 1 开启总中断ET0 1 开启定时器0中断TR0 1 启动定时器P0 0x00while 1void extern0 interrupt 1TH0 65536-3000 256TL0 65536-3000 256Set138 hang[a]Set595 lie[b][a]_nop__nop_aif a 8a 0timecountif timecount 330 每次到了330次中断后又重新开始计时每次差不多1s即每隔1s显示一个数字timecount 0bif b 10b 0六实验思考题可否不用这两个芯片直接用IO口来控制点阵的行与列来达到我们的目的并分析这样做的优缺点查阅资料比较74LS164与74LS595这两个串入并出芯片的特点若显示的数字出现左右倒相上下倒位请分析可能的原因以及解决的方法88 LED点阵显示器采用动态显示原理分析其驱动工作过程实验5 矩阵式键盘显示一实验目的掌握矩阵式键盘的工作原理以及与单片机的接口方法掌握矩阵式键盘的按键识别方法扫描法与线反转法并能够编写相应键盘处理程序实现按键的识别二实验仪器硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写程序读取矩阵式键盘按键键码并通过数码管显示显示要求四个数码管同时显示同一字符1按09号键显示数字092按AF号键显示字母AF四实验原理单片机的P2口作为矩阵式键盘扫描IO口对键盘进行逐行扫描若检测到按键则将得到的扫描结果返回给CPU转换成相应的数码管显示代码通过数码管显示子程序在数码管上显示按键实验原理如下图38所示图38 键盘扫描电路原理图五软件流程图与参考程序流程图图39 键盘扫描显示主程序流程图图310 键盘扫描程序流程图参考源程序includedefine uint unsigned int define uchar unsigned char uchar numtempiuchar code table[]0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf60xee0x3e0x9c0x7a0x9e0x8e0uchar code table1[]0xf70xfb0xfd0xfesbit ale P14void display uchar aa uchar keyscan延时子程序void delay uint zuint xyfor x zx 0x--for y 110y 0y--void mainnum 17while 1display keyscan数码管显示void display uchar aaale 1P0 table[aa-1]ale 0键盘扫描uchar keyscanfor i 1i 5iP2 table1[i-1]temp P2temp temp0xf0while temp 0xf0delay 5temp P2switch tempcase 0xe7num 1breakcase 0xd7num 2breakcase 0xb7num 3breakcase 0x77num 4breakcase 0xebnum 5breakcase 0xdbnum 6breakcase 0xbbnum 7 breakcase 0x7bnum 8breakcase 0xednum 9breakcase 0xddnum 10breakcase 0xbdnum 11breakcase 0x7dnum 12breakcase 0xeenum 13breakcase 0xdenum 14breakcase 0xbenum 15breakcase 0x7enum 16breakwhile temp 0xf0temp P2temp temp0xf0return num六实验思考题如何实现键盘信号的可靠采集请叙述原理并请简要说明如果系统软件采用前后台的程序结构采集按键信号安排在后台程序主程序和安排在定时中断服务程序中有什么差异请简要叙述如何处理按键连击实验6 马达调速控制一实验目的掌握步进电机的工作原理控制方式和调速方法以及其与单片机的接口和驱动编程方法掌握直流电机的开启控制与转动速度控制方法二实验仪器硬件PC机HNIST-1型单片机实验系统软件 uVision2单片机集成开发环境三实验内容与原理实验内容编写程序通过单片机的P1口控制步进电机的控制端使其按照一定的控制方式进行转动实验原理◆步进电机的控制单片机的P1口输出脉冲信号驱动步进电机旋转引入开关实现对步进电机马达的启停转向和速度控制旋转方向控制步进电机以四相四拍方式工作若按次序通电为正转按次序通电为反转旋转速度控制每改变1次节拍步进电机旋转18度调节脉冲的周期就可以控制步进电机的转速图311 步进电机控制原理图◆直流电机的控制直流电机的转动由DAC0800来控制当DAC0800的输出为高电平时直流电机开始转动当DAC0800的输出为低电平时直流电机停止转动图312 直流电机控制原理图四实验步骤1连线编程步进电机的插头接J3 BABD接89S52的P11P14开关K8接P17K1-K7接8051的P10-P16DAC0800的B0-B7口接P2DAC0800输出接直流电机的输入调试程序观察步进电机运行情况启停开关K1步进电机开始转动是正转2圈反转2圈的循环运行启停开关K8直流电机开启步进电机停止调速开关K7K2供6转速调速时开关打开-关闭实现一次调速K2K4K6调速时步进电机是正转K3K5K7调速时步进电机是反转五软件流程图与参考程序●流程图图313 软件流程图●参考源程序本步进电机步进角为 75度一圈 360 度需要 48 个脉冲完成程序名mainc功能步进电机正转反转单位湖南理工物电系创新基地All rights reserved开始时间com结束时间com版本信息备注AABB口分别接单片机的P11P12P13P14备注P0口接key1-key8八个开关并空制着八个转速备注控制直流电机的是DAC0800备注B0-B7接的是P2口输出接的是直流电机的输入includedefine uchar unsigned char 宏定义方便使用define uint unsigned intvoid motor_move uint 函数的声明void motor_back uintvoid delay uintuint keyscanvoid zhiliuuchar a 0key 0key1temp 变量定义正转次序 Aa组--aB组--Bb组--bA组即一个脉冲正转 75 度倒转次序 bA组--Aa组--aB组--Bb组即一个脉冲正转 75 度开启开关时步进电机停止工作关闭开关时步进电机调好转速转动const uchar time_move[] 0xe70xed0xf90xf3 正转时序 75度const uchar time_back[] 0xe70xf30xf90xed 倒转时序 75度const uchar time[] 051020406080100 定义不同的时速uint code table[]0x000xff 给直流电机的信号主程序void mainwhile 1P2 0x00key keyscan 接受开关信号if key 1motor_move 2 正转2圈可自行调转圈数delay 100motor_back 2 反转2圈可自行调转圈数delay 100key keyscan 接受开关信号else if key 8 当开关打开的是第八个时直流电机启动步进电机停止zhiliuelse if key 0 key 8 判断是否有开关信号key keyscan 再次判断开关信号key1 key0x11 判断是否为偶数if key1 0x00 如果是偶数就正转motor_move 1 正转2圈可自行调转圈数else 否则就反转motor_back 1 反转2圈可自行调转圈正转n圈每转一步75度void motor_move uint nuchar iuint jfor j 0j 12njfor i 0i 4iP1 0xe1 驱动ds75452n芯片 P1 time_move[i]delay time[key]倒转n圈每转一步75度void motor_back uint nuchar iuint jfor j 0j 12njfor i 0i 4iP1 0xe1 驱动ds75452n芯片P1 time_back[i]delay time[key]延时t毫秒110592MHz时钟延时约05msvoid delay uint tuint kwhile t--for k 0 k 60 kuint keyscan 接受开关信号并编码P0 0xfftemp P0temp temp0xffwhile temp 0x00 再次判断是否打开开关delay 1temp P0temp temp0xffswitch temp 判断开关信号并将转速变量赋值case 0x01 a 1 breakcase 0x02 a 2 breakcase 0x04 a 3 breakcase 0x08 a 4 breakcase 0x10 a 5 breakcase 0x20 a 6 breakcase 0x40 a 7 breakcase 0x80 a 8 breakwhile temp 0x00 判断开关是否关闭temp P0temp temp0xffreturn a 返回值可调转速void zhiliu 直流电机的开启与停止uchar ifor i 0i 2iP2 table[i]delay 1000P2 0x00 关闭直流电机六实验思考题●怎样克服步进电机及直流电机和负载的惯性●说明如何控制直流电机的正反转用程序实现之实验7 串行模数转换器实验一实验目的掌握串行模数转换器TLC549芯片性能以及AD转换器的选择准则利用芯片技术手册掌握TLC549与单片机的接口方法掌握串行ADC的驱动程序设计方法二实验仪器硬件PC机HNIST-1型单片机实验系统软件 uVision2单片机集成开发环境三实验内容搭建串行模数转换平台编写程序通过单片机的IO口控制串行AD转换芯片TLC549实现模拟电压信号的采集调节电位器调整TLC549的输入模拟参考电压调节模数转换模块中的电位器运行程序实现AD转换和模拟电压信号的采集编写液晶的程序使转换得到的数据送入液晶显示四实验原理TLC549介绍及其接口电路TLC549是一款高性能的8位串行AD转换器它以8位开关电容逐次逼近的方法实现AD转换本实验采用该芯片采集模拟电压量然后将采集到的模拟量转换为数字量后送至液晶显示其数值TLC549在该实验系统中的电路连接如下图314所示图314 TLC549与单片机接口电路图315 TLC549引脚示意图TLC549通过J5_1端口采集模拟量由于TLC549是采用三线串行接口方式与单片机连接的所以通过J5_3端口将CLKD0CS与单片机的IO口连接来控制AD转换然后将转换后的量经处理送液晶显示接口电路说明1.用连接线连接模拟量产生模块中的V0口和模数转换模块中的IN接口2.用连接线将模数转换模块的CLKD0CS分别接至单片机的P36P35P343.用连接线将液晶模块的ERWR分别接至单片机的P22P21P20并将D0D7端口对应接入单片机的P00P07口4.调节模数转换模块中的电位器使TLC549的输入参考电压为5V5.将编写好的程序烧入单片机运行调节模拟量产生模块中的W1旋钮便可以在液晶上看到对应的电压值大小五软件流程图与参考程序信号流图图316 信号流图参考源程序文件名tlc549驱动程序功能tlc549采集模拟电压并于液晶上显示大小作者刘烈报单位湖南理工物电系创新基地All rights reseverd开始时间comincludeincludedefine uchar unsigned char define uint unsigned int define ulong unsigned long uchar getdataPSBuchar code table0[] TLC549 uchar code table[] 输入电压TLC549配制sbit tlc_clk P36sbit tlc_data P35sbit tlc_cs P34液晶的配置define DATABUS P0sbit RS_LCD P20sbit RW_LCD P21sbit E_LCD P22函数初始化void delay uint zvoid Delay1us ucharvoid initvoid write_com ucharvoid write_data ucharvoid setPosition uchar ucharvoid writeString uchar strvoid Tlc_549 voiduchar read_tlc voidvoid maininitsetPosition 0 0 设置第一行显示地址writeString table0while 1setPosition 1 0 设置输入电压显示地址 writeString tableTlc_549void delay uint zuint xyfor x zx 0x--for y 110y 0y--void Delay1us uchar iwhile --i_nop_ _nop_void initPSB 1write_com 0x30 基本指令扩充指令为34Hdelay 5write_com 0x0c 光标是否显示语句delay 5write_com 0x01 清屏delay 5写命令void write_com uchar comRS_LCD 0RW_LCD 0E_LCD 0delay 1DATABUS comdelay 1E_LCD 1delay 1E_LCD 0写数据void write_data uchar dateRS_LCD 1RW_LCD 0E_LCD 1delay 1DATABUS datedelay 1E_LCD 1delay 1E_LCD 0设置显示开始地址void setPosition uchar x uchar yuchar pswitch x4case 0 p 0x80 break 第一行开始地址 case 1 p 0x90 break 第二行case 2 p 0x88 break 第三行case 3 p 0x98 break 第四行p ywrite_com p写入字符串数据void writeString uchar struchar i 0while str[i] \0write_data str[i]delay 400uchar read_tlc voiduchar ijktlc_clk 0tlc_cs 0for i 0i 8ij j 1k tlc_data 共移出8位数据 tlc_clk 1tlc_clk 0j jktlc_cs 1return j 返回转换结果void Tlc_549 voidulong tempgetdatagex1x2uchar iwhile 1读20次取平均值getdata 0for i 0i 20igetdata read_tlc getdata 20电压显示处理temp ulong getdata500 256 将十六进制转换为十进制ge temp 100 个位x1 temp 100 10 第一位小数x2 temp 100 10 第二位小数write_com 0x95 显示数据的地址地write_data 0x30gewrite_data 0x2e 显示小数点write_data 0x30x1write_data 0x30x2write_data 0x56 显示单位50ms更新一次数据delay 500六实验思考题查看TLC549技术手册说明TLC549操作过程在采集模拟信号时一般不可避免会受到噪声干扰我们一般要做什么处理根据本实验编写处理相关程序。
单片机跑马灯实验报告单片机跑马灯实验报告引言:单片机是一种集成电路,具有微处理器核心、存储器、输入输出接口和定时计数器等功能,广泛应用于各个领域。
而跑马灯实验是单片机学习中的基础实验之一,通过控制LED灯的亮灭顺序,实现类似跑马灯效果。
本报告将详细介绍单片机跑马灯实验的设计原理、实验步骤以及实验结果。
一、设计原理:单片机跑马灯实验的设计原理基于单片机的IO口控制和定时器的应用。
在单片机中,IO口可以通过设置高低电平来控制外部设备的工作状态,而定时器可以实现对时间的精确控制。
通过将多个LED灯连接到单片机的不同IO口上,并利用定时器控制LED灯的亮灭顺序和时间间隔,就可以实现跑马灯效果。
二、实验步骤:1. 准备工作:a. 准备单片机开发板、杜邦线、LED灯等实验器材;b. 连接电路:将多个LED灯通过杜邦线连接到单片机的不同IO口上;c. 上电测试:将开发板连接到电源,确认电路连接无误。
2. 编写程序:a. 打开单片机开发环境,选择合适的单片机型号;b. 编写程序代码:根据实验要求,编写控制LED灯亮灭顺序的程序代码;c. 调试程序:通过编译、下载和运行,检查程序是否可以正常工作。
3. 实验操作:a. 将已编写好的程序下载到单片机开发板中;b. 上电运行:通过上电启动单片机,程序开始运行;c. 观察实验现象:观察LED灯的亮灭顺序和时间间隔,验证跑马灯效果。
三、实验结果:经过实验操作,我们成功实现了单片机跑马灯效果。
LED灯按照预先设定的顺序依次亮起,并在一定时间后熄灭,随后下一个LED灯亮起,如此循环往复,形成了跑马灯效果。
通过调整程序代码中的参数,我们还可以改变跑马灯的亮灭顺序和时间间隔,实现不同的效果。
四、实验总结:通过这次单片机跑马灯实验,我们深入了解了单片机的IO口控制和定时器的应用。
通过编写程序代码,我们成功实现了跑马灯效果,并通过调试参数,改变了跑马灯的亮灭顺序和时间间隔。
这次实验不仅巩固了我们对单片机的基础知识的理解,还培养了我们的实际操作能力。
跑马灯实验报告单片机跑马灯(流水灯)控制实验报告单片机实验报告姓名:学号:一、实验实现功能: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;}。
跑马灯实验报告跑马灯实验报告摘要:本文通过跑马灯实验,研究了不同颜色、不同速度和不同方向的跑马灯对人眼的视觉效应。
实验结果表明,不同颜色和速度的跑马灯会对人眼产生不同的影响,而方向对视觉效应的影响并不明显。
关键词:跑马灯,颜色,速度,方向,视觉效应引言跑马灯是一种常见的视觉刺激,其通过快速闪烁的光源产生视觉效应。
在日常生活中,跑马灯可以用于广告宣传、娱乐等多种场合。
在科学研究中,跑马灯也被广泛应用于心理学、神经科学等领域。
本实验旨在研究不同颜色、不同速度和不同方向的跑马灯对人眼的视觉效应,并探讨其可能的机制。
材料与方法实验对象:20名年龄在20岁至30岁之间、无色盲和视力问题的大学生。
实验设备:跑马灯装置、计算机、眼动仪、屏幕。
实验流程:1. 让实验对象坐在距离屏幕50厘米处的沙发上,调整好眼睛的位置。
2. 通过计算机控制跑马灯装置,在屏幕上显示跑马灯,并记录下显示的颜色、速度和方向。
3. 让实验对象注视跑马灯,并使用眼动仪记录下注视的位置和时间。
4. 完成实验后,让实验对象填写调查问卷,以了解他们对跑马灯的视觉效应的感受和体验。
实验设计本实验采用单因素设计,即分别研究跑马灯的颜色、速度和方向对人眼的视觉效应的影响。
每个因素分为两个水平进行实验,具体如下:颜色:红色、绿色速度:慢速(1圈/秒)、快速(3圈/秒)方向:顺时针、逆时针结果颜色对视觉效应的影响在红色和绿色跑马灯实验中,实验对象对红色跑马灯的反应时间比绿色跑马灯短,视觉效应更为显著。
具体而言,实验对象在注视红色跑马灯时眼动速度更快,注视时长更短,说明红色跑马灯对视觉注意力的吸引力更大。
速度对视觉效应的影响在慢速和快速跑马灯实验中,实验对象在注视快速跑马灯时反应时间更短,视觉效应更为显著。
具体而言,实验对象在注视快速跑马灯时眼动速度更快,注视时长更短,说明快速跑马灯对视觉注意力的吸引力更大。
方向对视觉效应的影响在顺时针和逆时针跑马灯实验中,实验对象在注视两种方向的跑马灯时没有显著的差异,说明方向对视觉效应的影响不明显。
跑马灯实验报告实验目的,通过搭建一个简易的跑马灯电路,了解电路的基本原理和运作方式,加深对电子电路的理解。
实验器材,LED灯、电阻、导线、电池、开关、面包板。
实验步骤:1. 将面包板上的LED灯、电阻、开关、电池依次连接起来,注意连接的顺序和方向。
2. 确保连接无误后,打开开关,观察LED灯的亮灭情况。
3. 如果LED灯正常亮起,可以尝试将多个LED灯连接在一起,形成跑马灯效果。
4. 通过调整电阻的阻值,观察LED灯的亮度变化,体会电阻在电路中的作用。
实验结果:经过实验,我们成功搭建了一个简易的跑马灯电路。
当打开开关时,LED灯依次亮起,形成了跑马灯效果。
通过调整电阻的阻值,我们发现LED灯的亮度会有所变化,这说明电阻在电路中起到了调节电流的作用。
实验结果符合我们的预期,并且加深了我们对电子电路原理的理解。
实验分析:跑马灯电路是一种简单的序列灯光控制电路,通过合理连接LED灯和电阻,可以实现灯光的顺序亮起和熄灭。
在实验过程中,我们需要注意LED灯的正负极连接方向,以及电阻的阻值选择,这些都会影响到电路的正常运作。
同时,电池的电压也会对LED灯的亮度产生影响,需要合理选择电池的电压等级。
实验总结:通过本次实验,我们对跑马灯电路有了更深入的了解,同时也加深了对电子电路原理的理解。
在今后的学习和实践中,我们将更加注重电路的搭建和调试,不断提高自己的实验操作能力和电子电路设计水平。
希望通过不断的实践和学习,我们能够掌握更多的电子电路知识,为将来的创新和发明打下坚实的基础。
实验感想:本次实验让我更加深入地了解了电子电路的原理和运作方式,也增强了我对电子学科的兴趣。
通过动手搭建电路,我不仅学到了知识,还培养了实践能力和动手能力。
希望在今后的学习中,能够继续保持对电子学科的热爱,不断提高自己的技能和能力。
led跑马灯实验报告
LED跑马灯实验报告
引言
LED跑马灯是一种常见的电子产品,它能够以特定的频率闪烁,产生视觉上的连续移动效果。
在本次实验中,我们将利用LED灯和一些基本的电子元件,设计并搭建一个LED跑马灯,并通过实验验证其工作原理和效果。
实验目的
1.了解LED跑马灯的工作原理
2.掌握LED跑马灯的搭建方法
3.观察LED跑马灯的闪烁效果
实验材料
1. LED灯
2. 电阻
3. 电容
4. 电路连接线
5. 电源
实验步骤
1. 按照电路图连接LED灯、电阻和电容
2. 将电路连接至电源
3. 观察LED跑马灯的闪烁效果
实验结果
通过实验我们成功搭建了一个LED跑马灯,并观察到了其连续移动的效果。
LED灯以一定的频率闪烁,产生了视觉上的连续移动效果,符合LED跑马灯的工作原理。
实验结论
LED跑马灯是一种基于LED灯的电子产品,通过LED灯的频繁闪烁,产生了视觉上的连续移动效果。
通过本次实验,我们了解了LED跑马灯的工作原理,掌握了LED跑马灯的搭建方法,并观察到了LED跑马灯的闪烁效果。
这些都为我们进一步了解和应用LED跑马灯提供了基础。
总结
LED跑马灯作为一种常见的电子产品,在日常生活中有着广泛的应用。
通过本次实验,我们对LED跑马灯有了更深入的了解,也为我们今后的学习和实践提供了基础。
希望通过今后的学习和实践,我们能够更好地掌握LED跑马灯的原理和应用,为我们的日常生活和工作带来更多的便利。
一、实训目的1. 熟悉单片机的硬件结构和基本工作原理;2. 掌握单片机编程方法,实现跑马灯功能;3. 提高实际操作能力和问题解决能力。
二、实训内容1. 跑马灯电路设计;2. 单片机编程实现跑马灯功能;3. 跑马灯功能测试与调试。
三、实训原理跑马灯是一种常见的电子玩具,主要由单片机、LED灯、按键等组成。
通过单片机控制LED灯的亮灭,实现跑马灯效果。
本实训采用AT89C51单片机作为核心控制单元,通过编程实现跑马灯功能。
四、实训步骤1. 跑马灯电路设计(1)硬件选型:选用AT89C51单片机作为核心控制单元,8个LED灯作为显示单元,2个按键作为控制单元。
(2)电路连接:将AT89C51单片机的P1口与LED灯的正极相连,LED灯的负极通过限流电阻连接到地。
将两个按键分别连接到单片机的P3.0和P3.1口。
2. 单片机编程实现跑马灯功能(1)初始化:设置P1口为输出端口,P3.0和P3.1口为输入端口。
(2)跑马灯程序编写:```c#include <reg51.h>#define LED P1void delay(unsigned int t) {unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 1275; j++); }void main() {unsigned char i = 0;while (1) {LED = 0x01; // 点亮LED1delay(500);LED = 0x02; // 点亮LED2delay(500);LED = 0x04; // 点亮LED3delay(500);LED = 0x08; // 点亮LED4delay(500);LED = 0x10; // 点亮LED5delay(500);LED = 0x20; // 点亮LED6delay(500);LED = 0x40; // 点亮LED7delay(500);LED = 0x80; // 点亮LED8delay(500);for (i = 0; i < 8; i++) {LED = ~(0x01 << i); // 倒序点亮LEDdelay(500);}}}```3. 跑马灯功能测试与调试(1)测试:将编写好的程序烧录到AT89C51单片机中,观察LED灯的跑马灯效果。
目录实验一跑马灯实验 (1)实验二按键输入实验 (3)实验三串口实验 (5)实验四外部中断实验 (8)实验五独立看门狗实验 (11)实验七定时器中断实验 (13)实验十三 ADC实验 (15)实验十五 DMA实验 (17)实验十六 I2C实验 (21)实验十七 SPI实验 (24)实验二十一红外遥控实验 (27)实验二十二 DS18B20实验 (30)实验一跑马灯实验一.实验简介我的第一个实验,跑马灯实验。
二.实验目的掌握STM32开发环境,掌握从无到有的构建工程。
三.实验内容熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。
通过ISP 下载代码到实验板,查看运行结果。
使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
四.实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1.熟悉MDK KEIL开发环境2.熟悉串口编程软件ISP3.查看固件库结构和文件4.建立工程目录,复制库文件5.建立和配置工程6.编写代码7.编译代码8.使用ISP下载到实验板9.测试运行结果10.使用JLINK下载到实验板11.单步调试12.记录实验过程,撰写实验报告六.实验结果及测试源代码:两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。
七.实验总结通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。
作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。
实验二按键输入实验一.实验简介在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。
学号序号 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。
二、电路原理图+5VD0D1D2D3D4D5D6D7U119XTAL1P0.0/AD039 38P0.1/AD137P0.2/AD21836 XTAL2P0.3/AD335P0.4/AD434P0.5/AD533P0.6/AD6932 RST P0.7/AD7P2.0/A821 22P2.1/A923P2.2/A102924 PSEN P2.3/A113025 ALE P2.4/A123126 EA P2.5/A1327P2.6/A1428P2.7/A151P1.0P3.0/RXD 10211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WR817P1.7P3.7/RDAT89C51图 1赛马灯实验电路原理图三、程序流程图开始检测 P2 键值达成对应键值的功能判断 P2 键值能否改变K1 K2 K3 K4图 2简单键控的流水灯程序流程图四、源程序1、基本的流水灯#include<>#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;if(a==0)a=1;delay(2250);}// 主函数// 保证只有一个点亮// 不停循环// 低电平点亮// 左移一位,右补 0// 全 0// 流动点亮延时}2、简单键控的流水灯#include<>#define uchar unsigned char #define uint unsigned int void 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<>#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 要串连一个电阻答:电压的大小(包含它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它能否要加上拉电阻。
实验七LED跑马灯实验1 (点灯)
一、实验目的
1.掌握嵌入式ARM的I/O及其相关设置;
2.继续熟悉ARM开发环境。
二、实验内容
1.了解S3C6410实验板I/O接口原理。
2.利用ADS编译环境,用C语言编写点亮一盏灯主程序。
三、实验设备
硬件:
S3C6410实验板;
PC机;
串口通信线;
软件:
PC机操作系统(WINDOWS XP);
ARM Developer Suite v1.2;
超级终端
四、实验步骤
1.新建ARM工程:工程名字自拟
启动ADS开发环境,选择File→New(Project)选项,使用ARM Executable Image工程模板创建一个工程。
2.新建C语言程序文件led.c(名字自拟),并将其添加到工程中
选择File→New(File)选项,新建汇编源程序文件,并添加到工程中,定义被汇编程序调用的C函数g( )和全局变量sum添加到工程中,led.c源程序的参考代码如下:
/*------------------------地址声明---------------------------*/
#define GPQCON (*(volatile unsigned *)0x56000010)
#define GPQDAT (*(volatile unsigned *)0x56000014)
#define GPQUP (*(volatile unsigned *)0x56000018)
#define uchar unsigned char
#define uint unsigned int
/*-----------------------定义全局变量------------------------*/
/*----------------------------------------------------------
函数名称:ledMain
功能描述:入口程序
初始化后,进入跑马灯死循环
传参:无
返回值:int 0
-------------------------------------------------------------*/
int ledMain(void)
{
GPQCON = ??????; //设置为输出
GPQDAT =??????; //使LED全灭
GPQUP = 0x00;
while (1) // 死循环
{
GPQDAT = ?????; //LED0亮
}
return 0;
}
3.新建汇编程序文件Init.s,并将其添加到工程中
选择File→New(File)选项,新建汇编源程序文件Init.s,并添加到工程中,参考代码如下:
AREA DA TA,CODE,READONL Y
ENTRY
ldr r13, =0x1000
IMPORT ledMain
b ledMain
END
4.设置工程的编译和链接选项
选择Edit→DebugRel Settings选项,打开DebugRel Settings对话框,设置工程编译和链接选项,在Target→Target Settings选项中,打开Post-linker选项,选择ARM fromELF,在Language Settings→ARM Assembler选项中,选择Target选项卡,修改处理器类型为ARM920T,在Linker→ARM Linker选项中,打开Output选项卡,在RO base里填写地址0x32000000,在Options选项卡中,填写Image entry point地址0x32000000,打开Lay Out选项卡,在Objec/symbol中填写你建立的汇编程序名.o。
如图
需要注意的是,这里不可以用符号main 作为入口点地址符号,否则会出现类似“Image does not have an entry point (Not specified or not set due to multiple choice)”的错误信息。
所以需要用汇编程序的标号来做入口地址。
5.编译和链接工程
在工程窗口中,选择Make工具按钮,编译和链接工程,如果有错误提示,请检查修改程序中的语法错误,直到编译和链接通过,最终生成.bin文件。
超级终端配置:
1.开始→附件→通讯→超级终端
2.
输入名称,自拟,图标自定,点击确定
3.
配置端口,选择连接时使用选项,在右键“我的电脑”中选择“管理”→“设备管理器”中
查看串口所在位置,本机在COM1口,如图所示
4.端口设置中,每秒位数选择115200,数据流控制选择无,其他默认,如图。