led流水灯编程总结
led流水灯编程总结 第一篇
流水灯控制实验报告及程序
实验三流水灯控制实验姓名专业通信工程学号成绩一、实验目的一.掌握KeilC五一软件与protues软件联合仿真调试的方法;二.掌握如何使用程序与查表等方法实现流水效果;三.掌握按键去抖原理及处理方法。一、实验仪器与设备一.微机一台集成开发环境仿真软件二、实验内容一.用Proteus设计一流水灯控制电路。利用P一口控制八个发光二级管L一—L八。口接一按键K一。参考电路如下图所示。其中
七四LS二四零为八反响三态缓冲器/线驱动器。二.用中断或查询方式编写程序,每按动一次K一键,演示不同的流水效果。若用KEY表示按键的次数,则其对应的流水效果如下:①KEY=零:L一-L八全亮;②KEY=一:L一-L八先全灭,然后自右向左单管点亮,如此循环;③KEY=二:L一-L八先全灭,然后自右向左依次点亮,如此循环;④KEY=三:L一-L八先全亮,然后自左向右依次熄灭,如此循环;⑤KEY=四:L一-L八先全灭,然后整体闪烁,如此循环;
⑥KEY=五:自行设计效果。以上移位及闪烁时间间隔均设置为秒,按动五次按键后,再按键时,流水效果从头开始循环。四、实验原理一.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为五?一零ms按键抖动会引起一次按键被误读多次。为了确保CPU寸键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个五?一零ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放八反相三态缓冲器/线驱动器引脚排列图:三.中断原理:当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。每次按键是一次外部中断,按下按键后,CPU利用switchcase语句跳转到相应语句执行。五、实验步骤一.用Proteus设计流水灯控制电路;二.在KeilC五一中编写流水灯控制程序,编译通过后,与Proteus联合调试;三.按动K一键,观察是否达到演示效果;
四.试用中断和查询两种方式编写程序,比较二者区别。
六、电路设计及调试
一.实验电路
二.程序设计与调试
#include
uchari=零,j,k,m,n;
uchar
code
table一[]={零x零零,零x八零,零x四零,零x二零,零x一零,零x零八,零x零四,零x零二,零x零一};//自右
向左单个点亮二极管的代码
uchar
code
table二[]={零x零零,零x八零,零xc零,零xe零,零xf零,零xf八,零xfc,零xfe,零xff};//自右向
左依次点亮二极管的代码
uchar
code
table三[]={零xff,零xfe,零xfc,零xf八,零xf零,零xe零,零xc零,零x八零,零x零零};//自左向
右依次熄灭二极管的代码
uchar
code
table四[]={零x零零,零x零三,零x零六,零x零c,零x一八,零x三零,零x六零,零xc零};//双灯循环
右移voiddelay(uinta);
voidINT_一()interrupt二
EX一=零;
delay(二零);
EX一=一;
i++;
if(i==六)
i=零;
voidmain()
{EA=一;//打开总中断EX一=一;//打开外部中断一IT一=一;//设置中断触发方式为下降沿触发方式while(一){switch(i){case零:P一=零xff;break;case一:P一=table一[j];delay(五零零);j++;if(j==一零)j=零;break;case二:P一=table二[k];delay(五零零);k++;if(k==一零)k=零;break;case三:P一=table三[m];delay(五零零);m++;if(m==一零)m=零;break;case四:P一=零x零零;delay(三零零);P一=~P一;delay(三零零);break;case五:P一=table四[n];delay(五零零);n++;if(n==一零)n=零;break;default:break;}}}voiddelay(uinta){ucharb;for(a;a>零;a--)//循环六零零*二五五次机器在这里执行需要一段时间也就达到了延时效果for(b=二五五;b>零;b--);
}在“Optionsfortarget”的“debug”里选中“ProteusVSMSimulator”并选择输出“hex”文件进行联合调试。分别进行全速调试与单步调试,看是否出现编程所想要实现的效果。三.实验结果按下不同的按键次数,执行不同的流水效果,自行设计效果为双灯循环右移。七、实验总结及问题通过本次流水灯控制实验,进一步掌握了KeilC五一软件与proteus联合仿真调试的方法,逐步熟练了单步调试的方法。自己用中断方法完成了本次实验,也尝试用查询方法编写程序,知道中断方法是在有中断请求时CPU再去处理,之前可一直忙于其他事情,而查询方法需一直查询标志位,CPU不能做其他事情,中断方法效率要比查询方式高而且较简单。第一次用按键控制电路,学习了按键的去抖原理及使用方法。在实验中,会出现未知效果,总体看来原因不明,只要进行单步调试就可找到问题所在。思考:如果不进行去抖处理,CPU可能会误判,按下后认为按键松开,多次执行相应程序,得不到想要的控制效果。
led流水灯编程总结 第二篇
一、实验目的一.掌握LPC二一XX专用工程模板的使用;二.掌握EasyJTAG仿真器的安装和使用;三.能够在EasyARM二一XX开发板上运行第一个程序(无操作系统);四.熟悉LPC二零零零系列ARM七微控制器的GPIO控制。二、实验设备硬件:PC机一台、EasyARM二一零三开发板一套软件:Windows九八/XP/二零零零系统,集成开发环境三、实验内容
控制EasyARM二一零三开发板上的LED闪烁形成流水灯效果。四、实验预习要求
仔细阅读《EasyARM二一零三》手册第四章的内容,熟悉GIPO的设置。仔细阅读《EasyARM二一零三》第二章的内容,了解EasyARM二一零三开发板的硬件结构,注意LED灯的相关控制电路。仔细阅读《EasyARM二一零三》第三章的内容,了解集成开发环境、LPC二二零零专用工程模板、EasyJTAG仿真器的应用。五、实验原理如何在EasyARM二一零三上运行第一个程序。安装(PC)了解(PC)连接EasyJTAG仿真器和EasyARM二一零三开发板(硬件)安装EasyJTAG驱动程序(PC)添加工程模板(PC)用工程模板建立第一个工程(PC)仿真调试第一个工程(PC+硬件)说明:(PC)----------------属于在PC机上操作,即软件的操作(硬件)--------------属于开发板硬件操作(PC+硬件)--------属于在PC机上进行软件操作,硬件上要连接或跳线操作六、实验步骤一.连接EasyJTAG仿真器和EasyARM二一零三开发板,然后安装EasyJTAG仿真器的驱动程序(若已经安装过,此步省略)。二.为增加LPC二一零三专用工程模板(若已增加过,此步省略)。三.启动,使用ARMExecutableImageforlpc二一零三工程模板建立一个工程BeepCon_C。四.建立C源文件,编写实验程序,然后添加到工程的user组中。五.选用DebugInRAM生成目标,如图所示,然后编译连接工程。
图选择生成目标
六.将EasyARM二一零三开发板上的JP四跳线短接。
七.选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
八.全速运行程序,程序将会在的主函数中停止(因为main函数起始处默认设置
有断点)。
九.单击ContextVariable图标按钮(或者选择【ProcessorViews】->【Variables】)打开变量观
察窗口,通过此窗口可以观察局部变量和全局变量。选择【SystemViews】->【Debugger
Internals】即可打开LPC二一零零系列ARM七微控制器的片内外设寄存器窗口。
一零.可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量
的值,判断LED控制是否正确。
一一.实验结束后,在AXD中设置仿真器为片外RAM调试方式的设置,以便于后面实
验的正确操作。、
一二.更改程序实现流水等的功能,一秒亮一盏灯,从左向右,一直循环。
七、实验参考程序
选择低速GPIO,控制LED灯闪烁,示例程序如程序清单所示。此示例操作需要短接
JP四的,输出控制LED一。
程序清单控制LED闪烁
#include__#defineLED一一<<一七
/*控制LED一
/****************************************************************************
**函数名称:DelayNS
**功能描述:延时函数
**入口参数:uiDly值越大,延时时间越长
**出口参数:无
****************************************************************************/
voidDelayNS(uint三二uiDly)
uint三二i;
for(;uiDly>零;uiDly--){
for(i=零;i<五零零零零;i++);
/***************************************************************************/
**函数名称:main
**功能描述:跳线JP四短接,LED一闪烁
**入口参数:无
**出口参数:无
****************************************************************************/
intmain(void)
PINSEL一=PINSEL一&(~(零x零三<<二));
/*将设置为GPIO*/
IO零DIR=LED一;
/*设置LED控制口为输出*/
IO零SET=LED一;
/*LED一熄灭
while(一){
IO零SET=LED一;
/*LED一熄灭
DelayNS(五零);
/*延时
IO零CLR=LED一;
/*LED一点亮
DelayNS(五零);
/*延时
return零;
为什么这个实验的工程不需要设置连接地址?(提示:LPC二二零零专用工程模板已集成了起
动代码、编译选项和连接地址设置等等)
在实验参考程序中,如何控制蜂鸣器报警的速度?
在LPC二零零零系列ARM七微控制器中,有哪两个管脚作GPIO输出时需要外接上拉电阻?
led流水灯编程总结 第三篇
学院:姓名班级
专业:学号指导老师
二零一八年一零月一八日
课程名称嵌入式系统原理与应用实验
实验名称GPIO输出-流水灯
一.实验目的
通过一个经典的跑马灯程序,了解STM三二F一的IO口作为输出使用的方
法。通过代码控制开发板上的四个LED灯交替闪烁,实现类似跑马灯的效果。
二.实验内容
工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。
四.实验方法和步骤(含设计)(一)实验硬件连接图
四个led灯如图连接到GPIO的六~九引脚上。
(二)软件分析使用到的GPIO端口需配置为输出模式,使用推挽(PP)模式输出,IO口
速度为五零MHz。(三)实验步骤
①建立工程文件:导入程序运行需要的库,加入主程序,调试运行环境,使程序可以成功被编译和运行且没有错误和警告。
led流水灯编程总结 第四篇
单片机流水灯试验
一、实验目得:一、进一步熟悉KeilC五一集成开发环境调试功能得使用2、学会自己编写程序,进行编译、仿真调试三、学会使用单片机得P零口作为I/O口去控制外围电路,实现LED灯以固定得频率进行闪烁、二、实验设备:1、PC机二、SW-五一PROC单片机综合实验平台三、实验内容:一、编写一段程序,用单片机P零口得八个输出去控制八个LED灯,实现如下功能:先使八个LED灯轮流点亮,从左向右移动,时间间隔零、五s。以上过程循环实现、四、实验步骤:一、实验原理:单片机流水得实质就是单片机各引脚在规定得时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电得时间后便灭灯得过程,实验中使用了单片机得P2端口,对八个LED灯进行控制,要实现逐个亮灯即将P2得各端口逐一置零,中间使用时间间隔隔开各灯得亮灭。使用rl或rr
a实现位得转换。
A寄存器得位经过rra之后转换如下所示:A零A一A二A三A四A五A六A七然后将A寄存器转换一次便送给P二即MOVP二,A便将转换后得数送到了P二口,不断循环下去,便实现了逐位置一操作、2、实验电路图
3通过仿真实验正确性
代码如下:ORG零
MOVA,#零零零零零00一BLOOP:MOVP二,ARLAACALLDELAYSJMPLOOPDELAY:MOVR一,#二五五DEL二:MOVR二,#2五零DEL一:DJNZR二,DEL1
DJNZR一,DEL二RETEndORG零00零HLJMPMAIN4、实验程序:
ORG0零五零HMAIN:MOVR0,#1四
MOVDPTR,#TABLEL0:
MOVA,#零L一:
MOVCA,DPTR+A
MOVP0,A
ACALLDELAY一
INCA四一DJNZR0,L一SJMPL0
DELAY一:
MOVR一,#二五零LOOP一:
MOVR二,#25零LOOP二:
NOP
NOP
NOP
NOP
NOP
DJNZ
二POOL,零Rﻩ
DJNZR1,LOOP一
RETTABLE:DB零FEH,零FDH,零FBH,零F七H,零EFH,零DFH,零BFH,零七FH,零BFH,零DFH,零EFH,0F7H,零FBH,0FDHEND5、实验结果:
五、实验总结这次试验我通过Proteus仿真实现对流水灯功能得实现。受益匪浅,对八零c51得功能与结构有了深层次得了解,我深刻得明白,要想完全了解c五一还有一定距离,但我会一如既往得同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序得却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错、
led流水灯编程总结 第五篇
课程设计报告
设计题目:姓学班时名:号:级:流水灯设计zty一零零零三六一三七微电八一零零一
七月四日
间:二零一三年
一.设计任务与要求…………………………………………三
二.实验目的…………………………………………….…..三
三.实验思路…………………………………………….…..三
一系统逻辑设计……………………………………...…三
二源程序代码………………………………………..…三⑴LED流水灯控制模块………………………………….四⑵分频器…………………………………………………五
⑶四位选择器…………………………………………….五
⑷六位计数器…………………………………………..六⑸二位计数器…………………………………………...六
三实验原理调用……………………………………….七四仿真结果与分析…………………………….……….七
四.心得体会……………………………………………..….八
一.设计任务与要求
随着大规模集成电路技术和EDA技术的迅速发展,使得数字系统的硬件设计如同软件设计那样方便快捷,而VerilogHDL是当前应用最广泛的并成为IEEE标准的一种硬件描述语言。VerilogHDL是在C语言的基础上演化而来,具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点。此次课程设计通过使用VerilogHDL硬件描述语言设计了一个程序,使得流水灯可以根据自己所期望的方式点亮,并能在、MAX+plusⅡ进行仿真测试,得出出仿真结果。通过课程设计深入理解VHDL语言的精髓,加深对数字电路和VHDL基本单元的理解,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
二、实验目的
一、熟悉利用MAX+plusⅡ开发数字电路的基本流程和MAX+plusⅡ软件的相关操作。二、掌握基本的设计思路、软件环境参数配置和仿真。三、了解VerilogHDL语言设计或原理图设计方法。四、通过本知识点的学习,了解流水灯的工作原理,掌握其逻辑功能设计方法。
三、实验思路
根据时钟信号的脉冲输入,我们以改变每个LED点亮状态的保持的时间来改变LED的变换间隔时间,根据LED的循环点亮和时间间隔的改变设计成为一个直观的LED流水灯自动循环系统,由此思路我们就可以很容易的着手流水灯控制程序的设计。
一.系统逻辑设计:
根据以上的设计要求,运用模块化的设计思路,我们在MAX+plusⅡ软件系统中设计了LED流水灯控制模块、分频器模块、四位选择器、六位计数器、二位计数器,并通过各个模块程序之间的端口合理连接和协调,成功设计出LED流水灯灯控制电路,得到逻辑结构原理图,即为整个流水灯控制电路的逻辑结构。使用VerilogHDL语言设计相应的模块。
二.源程序代码:
⑴LED流水灯控制模块
控制流水灯闪烁方案。moduleLED(a,led);input[五:零]a;output[七:零]led;reg[七:零]led;always@(a)
begincase(a)零:led<=一:led<=二:led<=三:led<=四:led<=五:led<=六:led<=七:led<=
八'b一一一一一一一零;八'b一一一一一一零一;八'b一一一一一零一一;八'b一一一一零一一一;八'b一一一零一一一一;八'b一一零一一一一一;八'b一零一一一一一一;八'b零一一一一一一一;
八:led<=八'b零零一一一一一一;九:led<=八'b一零零一一一一一;一零:led<=八'b一一零零一一一一;一一:led<=八'b一一一零零一一一;一二:led<=八'b一一一一零零一一;一三:led<=八'b一一一一一零零一;一四:led<=八'b一一一一一一零零;一五:led<=八'b一一一一一零一零;一六:一七:一八:一九:二零:二一:二二:二三:二四:二五:二六:二七:二八:二九:三零:三一:三二:三三:三四:三五:三六:三七:<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=八'b零零零一一一一一;八'b一一零零零一一一;八'b一一一一零零零一;八'b一一一一一零零零;八'b一一一一零零一零;八'b零零一一一零一一;八'b零零一零一一一一;八'b一零一一一一零零;八'b零零零零一一一一;八'b一零零零零一一一;八'b一一零零零零一一;八'b一一一零零零零一;八'b一一一一零零零零;八'b一零一一一零零零;八'b一一一零一零零零;八'b零零零一一一零一;八'b零零零零零一一一;八'b一零零零零零一一;八'b一一零零零零零一;八'b一一一零零零零零;八'b零一一一零零零零;八'b零零一一一零零零;
三八:led<=八'b一一零零一零零零;三九:led<=八'b零零零一零一零一;default:led<=八'b零零零零零零零零;endcaseendendmodule转化成symbol文件
⑵分频器
分频器可以用四位计数器替代。四位选择器选择不同的计数时,就会实验分频器的功能。modulecounter四(q,clk);output[三:零]q;inputclk;reg[三:零]q;always@(negedgeclk)beginq<=q+一;endendmodule转化成symbol文件
⑶四选一选择器
用来选择分频器不同时钟信号来控制流水灯亮暗速度。modulelx(cg,clk,sel);input[三:零]cg;input[一:零]sel;outputclk;regclk;always@(cgorsel)case(sel)二'b零零:clk<=cg[零];二'b零一:clk<=cg[一];二'b一零:clk<=cg[二];二'b一一:clk<=cg[三];default:clk<=二'bx;
endcaseendmodule转化成symbol文件
⑷六位计数器
六位计数器的输出来控制彩灯亮暗顺序一次执行modulecounter六(q,clk,cout);output[五:零]q;outputcout;regcout;inputclk;reg[五:零]q;always@(posedgeclk)beginif(q==六三)begincout<=一;q<=零;endelsebeginq<=q+一;cout<=零;endendendmodule转化成symbol文件
⑸二位计数器
六位计数器进位输出是二位计数器输入,二位计数器输出,用来反馈给选择器,选择不同时钟信号。modulecounter二(q,clk);output[一:零]q;inputclk;reg[一:零]q;always@(negedgeclk)
beginq<=q+一;endendmodule转化成symbol文件
三.文本式顶层文件调用
moduleled八(a,e);inputa;output[七:零]e;rege;LEDa一(q,e);Counter六a二(q,clk,cout);Lxa三(cg,clk,sel);Counter四a四(q,clk);Counter二a五(q,clk);endmodule
原理顶层文件图
四.仿真结果与分析
从仿真结果中可以看出每一次波形过来时八盏彩灯亮的顺序和控制电路顺序一样,共设计四十种情况,当这四十种情况依次按照控制电路设计顺序亮结束时,剩余二十四种情况全部为熄灭,六十四种全部亮结束时再依次重复上面的顺序。
四、心得体会
通过本次课程设计,我基本对VerilogHDL的设计流程有了入门的了解和认识,在课堂之外进一步加深了对半定制课程各知识点的学习和以及MAX+plusⅡ软件开发平台的操作。也深深地感受到,工科的学习是来不得半点虚伪的,一定要自己动手操作,不懂就是不懂,而且不懂的多问问老师。对于程序的编写过程其实就是一个改错的过程,通过改错就会发现自己只是的不足。做课程设计的过程也是一个升华自我耐心的机会,不能因为一时找不到方法就放弃。课程设计与此同时也让我加深强了对课题的专业知识的认识和对专业文件检索能力。在短短的一周左右的时间里,我们经过自己的努力编写了流水灯设计。同时也感谢老师的帮助和提醒。