单片机实验8LED循环控制灯

时间:2024.3.31

实验课程:单片机原理及应用                          

实验名称实验一—八个LED指示灯循环控制             

专业 10电气自动化技术 

学号2010010292

姓名曾利扬

实验日期 2012    12   17 ~28日     

一、    实验目的

熟悉μVision3编译软件、掌握C51编程与调试方法。

二、    实验内容

1、按照教材P227的图A.32,绘制实验三电路原理图;

2、根据功能要求,编写C51程序;

3、练习μVision3程序动态调试方法,并最终实现8个LED灯依次点亮的功能: P0.0→P0.1→P0.2→P0.3→ ┅ →P0.7→P0.6→P0.5→ ┅ →P0.0的顺序,无限循环,定时约50ms;中断20次。

4、观察仿真结果,完成实验报告。

三、    实验要求

1、采用proteus + Keil联合仿真法运行C51程序,并练习采用单步、断点以及监视窗等手段进行程序调试;

2、提交的实验报告中应包括:电路分析及原理图、编程思路及C51源程序、调试过程简述,仿真运行效果以及实验小结。

3、提交实验报告的电子邮件主题及存盘文件名格式如,2005041220马晓明实验三。

 

1、电路分析及原理图

   2、编程思路及C51源程序

                           源程序

C51源程序:

#include <REG51.H>

bit direct=1, speak=0,counter=0;//direct=1,left;direct=0,right;

int i=0,j=0,k=0,a;

sbit P13=P1^3;

main()

{

     TMOD=0x01;

     TH0=0x3c;

     TL0=0xb0;

     EA=1;

     ET0=1;

     TR0=1;

     while(1)

     {

           if(counter)

           {

                counter=0;

                TR0=1;

                if(direct&&!speak)

                {

                     

                      a=0x08&P1;

                      P1=P1&0x07;

                      P1=i|a;

                      i++;

                      if(i==8)

                      {

                           j++;

                           if(j==4)

                           {

                                 j=0;direct=0;speak=1;

                           }

                           else

                                 i=0;                          

                      }

                }

                else if(!direct&&!speak)

                {

                      i--;

                      a=0x08&P1;

                      P1=i|a;

                      if(i==0)

                      {

                           j++;

                           if(j==4)

                           {

                                 j=0;direct=1;speak=1;

                                

                           }

                           else

                                 i=8;

                      }

                }

           }

          

     }

}

void time0(void) interrupt 1

{

     TR0=0;

     ++k;

     TH0=0x3c;

     TL0=0xb0;

     if(speak)

     {

           P13=~P13;

     }

     if(k==20)

     {

           k=0;

           counter=1;

           if(speak)

                speak=0;

     }

     else

           TR0=1;    

}

3、调试过程简述

调试方法,在对工程成功进行汇编、连接之后,按ctrl+f5组合或使用菜单中debug中的“start/Stop debug session”进入调试状态,最方便的方法就是按界面上的一个红色的按钮,然后进入上图所示调试界面,在这个界面内可以进行连续运行,也可以进行不进入函数或进入函数的单步执行,不进入函数的单步运行可以使调试光标不进入子函数内部,而是全速执行完该子函数,然后直接指向紧接着主函数的下一行,通过灵活应用调试方法,可以大大提高查错的效率。

4、实验小结

这次我们的第三次实验----led灯的循环控制,原理图的绘制已经难不倒我们了,但是这次用一个新软件叫Keil,也叫μVision3来编写程序,编时候用的c语言,然后还得建工程,又是一个大难题摆在面前,好在在参考书和老师的指导下最终成功编出了程序。编好之后成功汇编和连接后再用Keil来调试,目标文件夹便会出现相对应的HEX文件,加载到Protues里便实现了对LED灯的循环控制。μVision3编程软件、C51编程与调试的方法是这节课接触的新东西,单片机散发着越来越迷人的魅力。


第二篇:基于单片机的循环灯控制


单片机课程设计

题 目:   循环灯控制    

班  级:           

姓  名:            

学  号:            

指导教师:           

设计时间:  


引言

本报告提出了一种基于单片机的CPU芯片8031的控灯方案,应用定时器溢出中断和位扫描的方法来实现了8个二级管从左到右,每一个闪烁10次,并依次循环的过程。以8031作为主控核心,再外扩一个程序存储器用作程序的存储。进一步熟悉单片机系统的结构和工作原理,以及8031的各个引脚功能。通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术,为今后从事相关工作打下基础。



目    录

一 设计方案及原理... 3

1.1 设计内容... 3

1.2 设计要求... 3

1.3设计方案及原理... 3

二 硬件设计... 3

2.1 设计思路... 3

2.2 原理电路图... 3

2.3 主要元件功能说明... 3

2.4 硬件工作原理阐述... 3

三 软件设计... 3

3.1 分析论证... 3

3.2 程序流程图... 6

3.3 程序清单... 3

四 调试过程及结果分析... 3

五 设计总结... 3

参 考 文 献... 3

附录 运行结果图... 3


一 设计方案及原理

1.1 设计内容

在单片机的P1口接8个发光二极管,通过外部中断、定时器中断和位扫描等程序控制实现每个发光二极管指示灯闪烁10次,并依次循环。正常状态下,这8个灯(发光二极管)按一定流速从左向右流动(假设这8个灯依次从左向右接在P1.0—P1.7上)

1.2 设计要求

(1)在系统设计中,要求使用中断方式完成其功能;

(2)设计给出系统硬件原理图和程序清单;

(3)单片机系统采用8031机型;

(4)以论文格式给出设计报告。

1.3设计方案及原理

单片机CPU芯片8031,工作环境为常温。

发光二极管,工作环境常温。

74LS373,工作环境常温。

EPROM2764程序存储器,工作环境常温

通过对单片机8031系统的学习,如果要让接在8031芯片P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反, 如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

  单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。下面以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的软件编程方法。

二 硬件设计

2.1 设计思路

(1)方案一:硬件采用单片机系统8031,因8031CPU内部没用程序存储器ROM,因此需外扩一个程序存储器(可采用芯片2764来实现),为保持输出常通采用一个带三态输出的8—D锁存器74LS373。

软件设计可通过定时器/计数器的溢出中断实现对灯亮与灭、灭与亮之间的定时延时,采用CPL对位取反,来实现每一个灯的亮与灭的控制,确立堆栈区对中断服务程序的现场保护。

(2)方案二:硬件设计同方案一样,接线方式也相同,只是在软件设计中采用查询方式,设定循环次数和延时程序,通过调用延时子程序来实现对灯的亮与灭的循环控制。

2.2 原理电路图

图2-1 原理电路图

2.3 主要元件功能说明

(1)8031芯片

1·8位的的单片机系统微处理器和控制器,内涵一个一位布尔运算器,可直接对数据的位进行操作和运算,特别使用与逻辑控制。

2·内部无程序存储器ROM,需扩展外部程序存储器,且内外ROM是统一编址。

3·两个16位的定时器/计时器,每个定时器/计数器都可以设置成计数方式或定时方式,并可以根据计数或定时的结果实现计算机控制。

4·内部有时钟电路,可产生时钟脉冲序列,系统允许的最高晶振频率为12HZ。

5·全双工URAT(通用异步接受发送器)的串行I/O口,用以实现单片机之间或单片机与其它设备之间的串行通信。

6·两极中断优先权的6个中断源/5个中断矢量逻辑。

7·哈佛结构的存储组织支持6种寻址方式。

8·采用40脚双列直插封装(DIP)方式,其最基本的引脚如下:

ALE(30脚)  地址锁存信号

在系统扩展时,ALE用于控制把输出口的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。

PSEN (29脚)  程序存储允许输出信号

在访问片外存储器时,此端定时输出负脉冲作为读片外存储器的选通信号,此引脚接EPROM/ROM的OE端,即允许读出EPROM/ROM的指令码。

RST (9) 复位信号

当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。

XTAL1和XTAL2外接晶体引线端

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

VSS地线VCC+5V电源

(2)74LS373

三态输出的8—D 透明锁存器, 当三态允许控制端 OE 为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。

引出端符号:D0~D7 数据输入端

OE 三态允许控制端(低电平有效)

LE 锁存允许端O0~O7 输出端

(3)EPROM2764

紫外线可擦除存储器,作为8031CPU芯片的外扩程序存储器,存储量为8位*8K。通过电写入程序,并固化。外围28芯双列式直插。A0-A12为13根地址线,可寻址8K字节;O0-O7为数据输出线;CE为片选线;OE为数据输出选通线;PGM为编程脉冲输入端;Vpp是编程电源;Vcc是主电源。

2.4 硬件工作原理阐述

8031地址线直接外扩8KBEPROM2764构成单片机最小系统。其中,74LS373是带三态输出的8—D锁存器,三态控制端接地,以保持输出常通;其三态输出还有一定的的驱动能力。G端与8031的ALE连接,每当ALE端的电平产生下跳变时,74LS373锁存低8位地址线A7~A0,并输出供2764使用。又因8031的P1口是一个带内部上拉电阻的8位准双向I/O端口,且P1口的每一位能驱动4个LS型TTL负载,在这里P1口作为输出口使用,外接8个发光二极管,在程序设计时已向P1口锁存器写入全1,此时P1口引脚由内部上拉电阻拉成高电平,因此8个发光二极管是共阳极接法,每当有低电平输入时就会使发光二极管发光。

三 软件设计

3.1 分析论证

软件设计可用两种方法来实现题目要求,第一种方法是利用定时器/计数器溢出中断来对对灯的亮与灭进行延时,定时器内部有两种工作方式,计定时器T0和定时器T1,并且每一个定时器有4种工作方式,方式0、1、2、3,因此可采用其中任意定时器的任意方式,但因方式1是16位的计数结构,定时时间可由2us~131ms,因此选用定时器T0,工作方式1进行对每一个灯的亮与灭、灭与亮定时延时。第二种方法是利用查询方式来设计,通过调用延时程序来进行对等的亮灭延时,然后循环点亮与熄灭每一个灯。方案一程序繁多,需对每一个灯进行循环中断延时,此方式可用于比较复杂的控制系统,而本次设计比较简单,用中断延时比较困难,但因题目要求采用中断,并且可从设计中学会使用中断方式,因此此方案符合本次课程设计的目的,同样可实现控制。方案二采用查询方式,程序简单,容易实现,但不符合题目要求,因此可用此程序来对题目的理解,以便于用中断方式来实现控制。

单片机中的定时器有四种工作方式,由于工作方式0和工作方式1计数溢出后,计数器都全为0,因此,循环定时或循环计数应用时就存在反复设置计数初值的问题。这不但影响精度,而且也给程序设计带来了不便。于是,选择工作方式2,它具有自动更新重新加载功能,即自动加载计数初值。在这种方式下,把16位计数器分为两部分,即TL作计数器,TH作预置寄存器,初始化时把初值分别装入TL和TH中。为了能够清晰的看见二极管闪烁,选择定时器定时500us,再通过配合DJNZ指令来实现延时1s的定时。由于,DJNZ中操作数的范围不能达到2000,所以选择两条DJNZ指令,一次置200,一次置10,依次循环就可达到要求。

3.2 程序流程图

流程图的绘制为编程提供了便利,通过对控制要求的理解而绘制的流程图可以让我们对控制过程更加熟悉并且编程的进行也变得有据可寻。循环灯控制设计的流程图如图3-1和3-2所示


3.3 程序清单

ORG    0000H         ;复位入口地址

       LJMP   START         ;到主程序

       ORG    0100H

START:

       MOV    R2,#0AH       ;计数10次

       MOV    P3,#OOH

       JNB    P3.0,START

       MOV    A,#0FFH       ;P1口置高电平,灯全灭

       MOV    R0,#8

       CLR    C             ;进位清0

L1:    RLC    A             ;累加器连同带进位位循环左移

LOOP:  MOV    P1,A          ;灯亮

       ACALL  DELAY         ;延时

       MOV    P1,#0FFH      ;灯灭

       ACALL  DELAY         ;延时

       DJNZ   R2,LOOP       ;R2-1不等于0时跳转至LOOP

       MOV    R2,#0AH       ;重新赋值10次

       DJNZ   R0,L2         ;R0-1不等于0时转到L1

       MOV    R0,#7         ;R0赋值7       

L2:    RRC    A             ;累加器连同带进位位循环右移

       MOV    R2,#0AH       ;计数10次

LOOP1: MOV    P1,A          ;灯亮

       ACALL  DELAY         ;延时

       MOV    P1,#0FFH      ;灯灭

       ACALL  DELAY         ;延时

       DJNZ   R2,LOOP1      ;R2-1不等于0时跳转至LOOP1

       MOV    R2,#0AH       ;重新赋值10次

       DJNZ   R0,L2         ;R0-1不等于0时转到L2

       AJMP   START            ;循环结束再跳转到START

DELAY: MOV    R5,#4         ;16ms延时程序

D1:    MOV    R6,#100

D2:    MOV    R7,#18

       NOP

       DJNZ   R7,$

       DJNZ   R6,D2

       DJNZ   R5,D1

       RET

       END

四 调试过程及结果分析

依照电路图在单片机系统8031机型上连接电路,只需用导线将P1口与8位灯相连接,因系统中已将外扩程序存储器在内部连接好,不需再连线。然后在PC机上打开51图标,输入程序编译、链接,再装入系统,输入GB=0000回车,系统开始运行程序,输出结果。如果没有达到预期的结果,在程序装入后复位,输入U1000回车命令进行反汇编,查看程序是否正确装入。当程序输入错误或需调整时,使用A命令完成。这样做了还未达到预期结果,可用T命令来进行单步方式运行程序(将运行状态开关拨至STEP)查看程序的运行状况,来分析错误出在哪里,也可以在系统运行的时候按复位键,再用R07XX格式命令检查程序运行到哪一步再没有执行,即可找出错误。

在方案一汇编链接中出现了多个错误,根据提示查看分析是因在程序注释时使用的是在中文输入环境下的分号,然后修改,链接无误,装入程序。结果没有一个灯在闪,于是我将程序中MAIN主程序中MOV  P1,#0FFH改为MOV  P1,#00H,然后运行灯全亮,证明主程序已运行了,然后键入了R07XX命令查看是现在运行到哪一步,然后记住其地址,在键入U命令查看,找出错误地址所在,看看是那条语句,经分析是在终端服务程序PIT0中未加入CLR  TF0让溢出清0。添加之后在运行程序,结果灯开始闪了,但闪的很慢,每一个灯只闪烁5次,然后我把定时时间的循环次数由8改为4,也就是把定时时间有1秒改为0.5秒,再把计数次数由0AH改为14H,然后重新装入程序运行,灯开始闪了,并且间隔刚刚好,每个灯闪烁10次然后跳到下一个灯,下一个灯也闪10次,再到下一个依次循环,8个灯全部循环完了后又跳到第一个灯又循环。运行结果参考附录。

在方案二的调试中因程序简单,错误比较少,只出现了几个书写错误和延时时间太短,经过修改和加大延时时间,同样出现了和方案一一样的预期结果结果。

五 设计总结

单片机课程设计是单片机原理及应用的实践性环节,是对所学的单片机系统技术基本理论知识的综合运用。课程设计是根据某一课题技术指标或逻辑功能的要求,进行电路的独立设计,硬件连接和调试,在TDN86/51单片机教学试验系统上进行芯片的连接和实践报告的设计。
根据这次课程设计的内容和要求,我首先进行了整体方案的构思,通过在图书馆查阅资料和上网查找相关资料,并分析和比较,选取了一种简单而且可行性高的设计方案。
    通过查阅有关书籍和相关网页再综合已学的单片机技术的知识,并考虑到电路的工作稳定性,以及考虑到实验系统是否可实现,设计成电路简单,功耗低,元器件容易连接等的电路,同时还留有余地用于电路的功能扩展(如紧急情况的处理),鉴于此选用了比较常见的元器件来构成各单元电路,选取所须的元件后,对各电路元件的参数进行了计算,然后进实验室进行电路的连接和调试。经过几天紧张的电路安装和调试,期间还进行了部分方案的修改和改进,实现了课程设计的主要任务和具体要求。

通过本次单片机课程设计获益颇多,首先通过翻阅书籍和浏览相关网页,与同学交流以及向老师请教等方式,使自己对以前所学的单片机知识有了更深层次的理解,掌握了以前未理解的知识点,也培养了我独立思考的能力;其次,通过设计我真正做到了由理论上升到实践的过程,也由此懂得理论知识必须通过应用才能实现其价值,这次设计使我运用理论进行分析和解决实际问题有了很大的进步,同时提高了我的综合应用能力和实践能力。相信这次的课程设计对我今后的学习和工作用很大的帮助,从中获得的财富将使我终身受益。


参 考 文 献

[1] 李华,单片机原理及应用,兰州大学出版社,2004

 [2] 杨振江,单片机原理与实践指导,中国电力出版社,


附录 运行结果图

更多相关推荐:
单片机实验报告

单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实验目的熟悉MCS51指令系统掌握程序设计方法加深对内部存储器读写的认识熟悉仿真开...

单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机实验报告

单片机实验报告实验二并行口输入输出实验循环彩灯控制任务一1实现的功能P1口接8个开关P0口接8个灯每个开关对应一个灯实时读取开关状态开关闭合时灯亮开关断开时灯灭2硬件原理图3流程图4程序ORG0000H程序入口...

单片机实验报告

一实验目的1熟练单片机的结构组成及原理2软硬兼施采用硬件电路的焊接搭建和软件的设计调试下载亲自动手对硬件系统加深了解的同时软件编程也能得心应手3了解如何从硬件和软件上分析问题排除故障二实验内容MCS51MCS5...

单片机最小系统实验报告

单片机原理及应用技术设计课题系别专业学号姓名指导老师课程设计报告20xx年6月单片机最小系统流水灯的设计一单片机简介由于单片机技术在各个领域正得到越来越广泛的应用世界上许多记成电路生产家相继推出各种类型的单片机...

单片机实验报告

单片机原理及应用一实验目的实验报告实验要求二实验电路及汇编源程序程序要加注释三仿真结果或硬件调试结果分析实验一存储器读写一实验目的1掌握寄存器存储器读写等汇编指令2掌握编程软件编辑编译调试等基本操作二实验内容1...

单片机实验报告

单片机实验报告四姓名学号时间周一11-13地点计708指导老师:实验题目C51单片机片上资源开发实验一.实验目的与要求?学习单片机片上资源开发技术?研究用片上资源实现自动控制的方案二:实验环境在KeiluVis…

单片机实验报告(42篇)