找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13379|回复: 0
打印 上一主题 下一主题
收起左侧

单片机+74LS138译码器+跑马灯+8255A+8253方波实验详解

[复制链接]
跳转到指定楼层
楼主
ID:512178 发表于 2019-4-14 21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目录
一、构建单片机最小系统版和实验环境熟悉
1.1实验要求
1.2实验过程
1,21.单片机最小系统实验
1.22编译环境的熟悉
二、跑马灯实验及74LS138译码
2.1.实验要求
2.2.实验过程
2.21单片机直接实现跑马灯
2.22通过74LS138译码器实现跑马灯
三、8255A控制交通灯实验
3.1实验要求
3.2实验过程
四、8253方波实验
4.1实验要求
4.2实验过程
五、继电器控制实验
5.1实验要求
单片机设计总结:
附录:

摘要:
单片机应用技术为一门理论与实践相结合的课,本课安排的实验旨在培养学生软硬件开发能力,用编程语言及硬件设备实现串、并行通讯、计数/定时、A/D、D/A等硬件接口的功能,进一步加深对常用硬件芯片的了解和应用,以及学习用单片机解决实际问题。实验要求学生利用编程语言及硬件设备实现单片机的方案设计、程序编写、硬件连接、调试,从中体会具体硬件接口的应用技巧,进一步理解硬件接口芯片,逐步掌握单片机系统的开发和应用方法。

使用Protues能使我们在没有用实物连接的情况下允许学生在Windows操作系统下编写、编译、连接、错误定位、调试、观察、修改系统。通过本实验的学习,学生可以熟悉各种类型的接口芯片,汇编语言程序的编写、调试,充分锻炼动手及编程能力。
关键词:编程语言    硬件芯片    单片机系统    接口芯片

一、构建单片机最小系统版和实验环境熟悉

1.1实验要求

一、预习要求

1.构建单片机最小系统,熟悉51单片机的结构及编程方法
2.按照程序流程图编写出程序

二、实验目的

1.熟悉星单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的使用方法。
2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。

三、实验内容

单片机最小系统实验:
1、熟悉单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的安装和使用方法。
2、作出单片机最小系统的组成原理图,分析其各构成单元的工作原理。
存储单元数据传输实验:
1、熟悉MCS51汇编指令。
2、进行存储单元数据传输实验,编写程序。
3、运行程序,验证译码的正确性。
1.2实验过程
1,21.单片机最小系统实验
1.单片机最小系统板的组成
时钟电路复位电路,电源电路,这几个部分构成,复位电路是用来使电路的运行状态归零,电源电路是用来提供+5v的电源电压,对单片机进行供电(由于器材等原因本次设计我们用的是开发板供电)。下面的单片机最小系统板,我们晶振选择的是12MHz的,其他的各种元器件来构成单片机的最小系统板。

2、使用Protues绘制单片机最小系统原理图

3、单片机最小系统的工作原理

(1)51单片机最小系统复位电路的极性电容C3的大小直接影响单片机的复位时间,一般采用10-30uF,51单片机最小系统容值越大需要的复位时间越短。

(2)51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。

(3)51单片机最小系统起振电容C2、C3一般采用15-33pF,并且电容离晶振越近越好,晶振离单片机越近越好。

(4)P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。

A、设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。

B、设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。

1.22编译环境的熟悉
实验中我们使用keil 4环境编译程序。其窗口界面如下:

思考题

1、在单片机最小系统的构建中,应注意哪些因素。

答:(1)51单片机现在多用AT89S51,不用晶振,晶体加两个电容就可以了。
(2)复位电路中的电容是虑波稳定作用,并联在一个电阻上,一端接地,一端通过开关接高电位就可以了。
(3)晶振:一般选用 12MHz ,因为可以准确地得到 9600 波特率和 19200 波特率。

实验总结

单片机最小系统的构建,让我对单片机的知识有了更深的了解。单片机最小系统的焊接,也锻炼了我的自己动手的能力。在焊接的过程中由于粗心,出了不少的错误,最后还是在同学的帮助下顺利完成了。
二、跑马灯实验及74LS138译码
2.1.实验要求

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照程序流程图编写出程序

二、实验目的

1.熟悉集成环境软件或熟悉Keil C51集成环境软件的使用方法。

2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。

三、实验内容

(一)跑马灯实验:

1、熟悉集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。

2、照接线图编写程序:使用P1口控制G6区的8个指示灯,循环点亮,瞬间只有一个灯亮。

3、观察实验结果,验证程序是否正确。

(二)74LS138译码器实验:

1、设计74LS138接口电路,编写程序:使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。

2、运行程序,验证译码的正确性。

2.2.实验过程
2.21单片机直接实现跑马灯

                        跑马灯原理图

                              仿真图

1、跑马灯对应程序的流程图




2.22通过74LS138译码器实现跑马灯

1、74LS138译码器工作原理

(1)、74LS138译码器工作原理

74LS138原理图

从原理图可看出,74138有三个输入端:A0、A1、A2和八个输出端Q0~Q7。当输入端A0、A1、A2的编码为000时,译码器输出为Q0=0,而Q1~Q7=1。即Q0对应于A0、A1、A2为000状态,低电平有效。A0、A1、A2的另外7种组合见后面的真值表。

图中S1、S2、S3为使能控制端,起到控制译码器是否能进行译码的作用。只有S1为高电平,S2、S3均为低电平时,才能进行译码,否则不论输入输入为何值,每个输出端均为1。

(2)、74LS138译码器真值表

2、通过74LS138跑马灯仿真图

3.对应程序流程图




思考题            

1、在单片机系统中,74LS138通常用来产生片选信号,应如何处理?
答:取三根底地址线,接到74LS138译码器的输入端,译码产生,8个使能控制信号。

实验心得

第一个实验单片机直接控制跑马灯,比较容易实现,只需要从单片机的p1.0到p1.7接到跑马灯上,利用这些接口控制。138控制流水灯的实验有些麻烦,实验过程中也出现了不少的问题,但到最后都解决了。这次的实验让我对138的功能有了更深的了解与熟悉。
三、8255A控制交通灯实验
3.1实验要求

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照要求画出流程图及程序

二、实验目的

1、了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。

2、熟悉8255内部结构和与单片机的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。

3、尝试自行编写程序,填写实验报告。

三、实验内容

1、设计8255接口电路,编写程序:使用8255的PA0..2、PA5..7控制LED指示灯,实现交通灯功能。

2、连接线路验证8255的功能,熟悉它的使用方法。

3.2实验过程

1、8255引脚图

2、8255工作原理

8255共有三种工作方式:

(1)工作方式0:这是 8255A 中各端口的基本输入/输出方式。它只完成简单的并行输入/输出操作,CPU 可从指定端口输入信息,也可向指定端口输出信息,如果三个端口均处于工作方式0,则可由工作方式控制字定义16种工作方式的组合。

(2)工作方式1:被称作选通输入/输出方式。在这种工作方式下,数据输入/输出操作要在选通信号控制下完成。

(3)工作方式2:被称作带选通的双向传送方式。8255A中只允许端口A 处于工作方式2,可用来在两台处理机之间实现双向并行通信。其有关的控制信号由端口 C 提供,并可向 CPU发出中断请求信号。

3、主程序流程图


4、8255A交通灯仿真图



思考题
1.如何对8255的PC口进行位操作?
8255控制字D7=1时,D6~D0为口模式控制,D7=0时控制字为PC口的位操作模式,如控制字=00H,PC0复位;控制字=01H,PC0置位;控制字=0EH,PC7复位;控制字=0FH,PC7置位;其中D6~D4没定义,D3~D1从000B~111B分别指定PC0~PC7脚,D0位为相应的电平高低,0为低电平,1为高电平。

实验总结

所有的实验中最难得还是这个家同等的实验。在做交通灯的实验时我们遇到了很大的问题,不管我们怎么连线就是不能点亮灯或者点亮了等也不能实现要求,就是灯一直亮而不闪。即使使用万用表也很难找到问题的所在,最后还是通过退队之间的讨论以及在别的同学的帮助下。
四、8253方波实验4.1实验要求

一、预习要求

1.熟悉51单片机的结构及编程方法

2.按照要求画出流程图及程序

二、实验目的

了解8253的内部结构、工作原理;了解8253与单片机的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。

三、实验内容

1、设计接口电路,编写程序:使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。

2、连接线路,验证8253的功能,熟悉它的使用方法。

4.2实验过程
1、8253引脚图


2、8253工作原理
 8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。8253工作方式如下:

(1)工作方式0:称为计数结束中断方式,当任一通道被定义为工作方式0时, OUTi输出为低电平;若门控信号GATE为高电平,当CPU利用输出指令向该通道写入计数值WR#有效时,OUTi仍保持低电平,然后计数器开始减“1”计数, 直到计数值为“0”,此刻OUTi将输出由低电平向高电平跳变,可用它向CPU发出中断请求,OUTi端输出的高电平一直维持到下次再写入计数值为止。

(2)工作方式1:称作可编程单脉冲发生器,进入这种工作方式, CPU装入计数值n后OUTi输出高电平, 不管此时的GATE输入是高电平还是低电平, 都不开始减“1”计数,必须等到GATE由低电平向高电平跳变形成一个上升沿后,计数过程才会开始。

(3)工作方式2:称作速率波发生器,进入这种工作方式, OUTi输出高电平,装入计数值n后如果GATE为高电平,则立即开始计数,OUTi保持为高电平不变; 待计数值减到“1”和“0”之间, OUTi将输出宽度为一个CLKi周期的负脉冲,计数值为“0”时,自动重新装入计数初值n,实现循环计数。

(4)工作方式3:称作方波发生器,任一通道工作在方式3, 只在计数值n为偶数,则可输出重复周期为n、占空比为1:1的方波。进入工作方式3,OUTi输出低电平, 装入计数值后,OUTi立即跳变为高电平。

(5)工作方式4:称作软件触发方式,进入工作方式4,OUTi输出高电平。装入计数值n后, 如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。

(6)工作方式5:称为硬件触发方式,进入工作方式5, OUTi输出高电平, 硬件触发信号由GATE端引入。开始时GATE应输入为0, 装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”, OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。

(7)工作方式6:⑴直接读计数器:输出锁存器在非锁存状态会跟随计数器计数的变化而变化,直接读计数器是从锁存器得到计数器的当前值。⑵先锁存再读取:①通过方式选择控制字对指定通道(SC1、SC0)的计数值锁入锁存器(RL1RL0=00), 锁存器一旦锁存了当前计数值,就不再随计数器变化直到被读取。②读计数器通道(有锁存器)。

3、主程序流程图

4、中断程序流程图

5、8253方波仿真图

思考题

1、8253还有其它五种工作方式,其它工作模式下,硬件如何设计?程序如何编写?
答:(1)计数初值何时起作用:计数初值写入计数初值寄存器(CR)后,要经过一个CLK输入后,计数执行部件(CE)才开始计数。
(2)门控信号的影响:门控信号是计数允许信号。高电平允许,即GATE=1,允许对CLK计数。上升沿允许这种情况需使用计数器内部的一个边沿触发器。只要当初边沿触发器置1后,计数器才对CLK计数。GATE上升沿使边沿触发器置1,GATE下降沿使边沿触发器自动清0.模式0,2,3,4,高电平允许,模式1、5,上升沿允许。
(3)OUT信号的状态:写入控制字后,OUT的状态。计数过程中,OUT的状态。计数终了,OUT的状态。
(4)技术操作是否可以重复,或称计数初值是否可以自动装入:a.不可重复b自动重复c条件重复。
(5)计数器的工作模式:计数器在CLK的下降沿使计数值减1,计数值减至0时,“计数到”。写入初值0时,代表最大初值65536。模式0:计数结束产生中断。模式1:可重复触发的单稳态触发器。模式2:分频器模式。3:方波发生器模式4:软件触发的选通信号发生器。模式5:硬件触发的选通信号发生器。

实验总结

在该实验中我们要注意对8253的使用,掌握8253的使用方法,明白其工作原理,了解8253芯片的各个引脚。在编写程序时,要注意8253的初始化,注意不要把初始化部分写到循环程序中去了,否则就会在上电后一直对8253进行初始化操作,不能实现功能。还有在编写延迟程序时要留够延迟时间,否则也会不能正确实现功能。
五、继电器控制实验5.1实验要求

一、预习要求

1.了解继电器/光偶器件的原理及应用

2.认真预习本节实验内容,尝试自行编写程序。

二、实验目的

1、掌握使用继电器控制外设的基本方法和编程。

2、掌握光耦的工作原理,熟悉它的使用方法。

三、实验内容

1、预备知识
自动化控制设备中,存在一个电子与电气电路的互连问题,一方面,电子电路要控制电气电路的执行元件,如:电动机、电磁铁、电灯等;一方面又要为电子电路提供良好的电隔离,以保护电子电路和人身安全,减少干扰源。继电器就起这个桥梁作用。
2、实验过程:设计接口电路,通过继电器控制直流电机转动、停止。

四、实验原理

参考电路原理图如下:

(继电器控制原理图)

五、实验设备

实验室电脑,集成软件及STAR ES598实验仪

六、实验注意事项

1.注意在集成环境下程序调试的方法

    2.注意保护实验箱

七、实验步骤

继电器控制

1、设计接口电路,分析工作原理。

2、编写并运行程序,利用拨动开关控制直流电机转动、停止。

思考题

1.列写出所编程序及流程图并做出注释

           CLR    P2.7                                            ;使译码器无效                                                                     
JIDIAN_1:  SETB P2.6
                               CJNE   R4,#05H,JIDIAN_2              ;按键按下后立即跳出
           JB     P3.1,JIDIAN_1                ;JB位条件转移
MM:                               CLR    P2.6
                               JNB     P3.1,MM
                               JB              P3.1,  JIDIAN_1
JIDIAN_2:
                               RET
                END
实验总结
  第五次试验我只做了继电器的实验,主要通过继电器来控制电机。由于器材的限制没有电机,我用一个发光二极管来代替。当开关合上导通时,二极管发光,开关断开时二极管熄灭,这样能模拟电动机的工作状态。实验焊接时需要非常小心,因为继电器的引脚有6个,不是都需要焊接,有几个引脚的功能是一样的,刚还是由于没有注意到这点,实验做不出来,后来在别人的指导下,找出错误,完成本次试验。

单片机设计总结:
经过单片机的五次实验让我们受益匪浅.此次实验是通过团队合作进行软件与硬件的设计相结合。这次试验即考察了我们的焊接水平与编程能力,又考察了我们的团队合作,对于我们电子自动化的学生而言焊接是不成问题,也很顺利;可到了编程就出现了很大的问题。本来还以为实验会很简单,但等到实际操作起来才知道它的复杂性,首先我们不知道怎么去理解实验题目,怎样更好的设计程序而达到实验的要求。其次,队员的每个人的想法都不同,导致实验并没有想象中的那么顺利。最终我们通过讨论明确了分工以及向别的小组同学咨询,解决了这些问题。单片机技术已经很早结束了,所以后期很多专业知识已经不是很记得.不过经过我们一步步的努力,最终花费的时间与精力终于没有白费,效果渐渐地出现了,终于一步步地完成了本次设计实验。
总而言之,片机设计对于我们有很大的帮助,我们从中受益匪浅。最后我们要感谢储忠老师的辛勤教导,还有老师对我们的试验安排,让我们有足够的时间可以做好实验。

  1.     ORG  0000H
  2.       AJMP START
  3.                 ORG  0003H
  4.       LJMP INTT0
  5.                 ORG  000BH
  6.       LJMP T0INT
  7.                 ;ORG  001BH
  8.                 ;LJMP T1INT
  9.                 ORG  0400H
  10. START:
  11.        CLR  P2.7
  12.                  SETB P2.2            
  13.                  SETB P2.3
  14.                  NOP
  15.                  NOP
  16.        MOV P0,#0
  17.                  SETB IT0                                          ;下降沿中断
  18.                  SETB EX0                                          ;开中断0
  19.                  SETB EA                               ;开总中断
  20. ;---------------------------------------------------------------
  21.               /*   SETB  P2.7
  22.                  MOV   P0,#0F0H
  23.                  CLR   P2.7
  24.                  MOV   P0,#00H  */
  25. ;---------------------------------------------------------------                 
  26.                                MOV   R4,#00H
  27. MAIN:
  28.                  CJNE  R4,#01H,PROC_1
  29.        LCALL LED
  30. PROC_1:CJNE  R4,#02H,PROC_2
  31.        LCALL LS138
  32. PROC_2:CJNE  R4,#03H,PROC_3
  33.        LCALL IC_8255A               
  34. PROC_3:CJNE  R4,#04H,PROC_4
  35.        LCALL IC_8253
  36.                  CLR   ET0
  37. PROC_4:CJNE  R4,#05H,MAIN
  38.        LCALL JIDIAN                     
  39.                  AJMP MAIN
  40. DELAY:   ;误差 0us
  41.     MOV R7,#01H
  42. DL1:
  43.     MOV R6,#8EH
  44. DL0:
  45.     MOV R5,#02H
  46.     DJNZ R5,$
  47.     DJNZ R6,DL0
  48.     DJNZ R7,DL1
  49.     RET
  50. ;按键中断
  51. INTT0:   //LCALL  DELAYJ
  52.                    MOV    A,P3
  53.                    ANL    A,#04H                            ;anl位与
  54.                    CJNE   A,#00H,END_INT1
  55.                             CLR    P2.0                                                                                   
  56.          CLR    P2.1
  57.          SETB   P2.2                                                                                    ;8255复位
  58.                    CLR    P2.2
  59.                    CLR    P2.3
  60.                    INC    R4
  61.                             CJNE   R4,#06H,END_INT1                                          ;实验项目计数,到达第5个实验时清零
  62.                             MOV    R4,#00H            
  63. END_INT1:
  64.          RETI
  65. ;功能:使用P1口控制8个LED流水灯
  66. ;端口:P1.0~P1.7\P2.0\P2.1
  67. LED:                                                                                      ;模块1工作
  68.       MOV   A,#0FFH
  69.       MOV   P1,A
  70.       MOV   DPTR,#TAB  ;查表
  71.       MOV   R0,#00H
  72. LED_1:MOV   A,R0
  73.       MOVC  A,@A+DPTR
  74.       MOV   P1,A
  75.                 CJNE  R4,#01H,LED_2                                                          ;按键按下后立即跳出
  76.                 LCALL DELAY1
  77.                 CJNE  R4,#01H,LED_2                                                          ;按键按下后立即跳出
  78.                 MOV   R5,#10
  79.                 INC   R0
  80.                 CJNE  R0,#29,LED_1
  81.                 MOV   R0,#00H
  82.                 AJMP  LED_1
  83. LED_2:
  84.                 RET
  85. ;查表
  86. TAB: DB              0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH
  87.      DB              7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH
  88.               DB              7EH,0BDH,0DBH,0E7H,0DBH,0BDH
  89.               DB              3CH,99H,0C3H,99H,3CH
  90.               DB 0AAH,55H,0AAH,99H
  91. ;闪烁延时函数
  92. ;0.5S
  93. DELAY1:MOV  R5,#17H
  94.    D1: MOV  R6,#98H
  95.    D2: MOV  R7,#46H
  96.        DJNZ R7,$
  97.                  CJNE R4,#01H,DELAY11                                                          ;按键按下后立即跳出
  98.        DJNZ R6,D2
  99.                  CJNE R4,#01H,DELAY11                                                          ;按键按下后立即跳出
  100.        DJNZ R5,D1
  101. DELAY11:               
  102.        RET
  103. ;功能:使用74LS138控制8个LED流水灯,循环点亮,瞬间只有一个灯亮
  104. LS138:
  105.                             MOV    P1,#0FFH                              ;使P1口输出高电平,防止P1口扰乱后面的操作                                         
  106.        // SETB  P2.7
  107.                  // CLR   P2.2
  108.                  // CLR   P2.3
  109.                   MOV   A,#0xf0              ;138使能
  110. LS138_1:MOV   P2,A
  111.                   CJNE  R4,#02H,LS138_3                                                          ;按键按下后立即跳出  
  112.                   LCALL DELAY2
  113.                             CJNE  R4,#02H,LS138_3                                                          ;按键按下后立即跳出
  114.                   INC   A
  115.                   CJNE  A,#0xf8,LS138_1
  116. LS138_2:DEC   A
  117.         MOV   P2,A
  118.                   CJNE  R4,#02H,LS138_3                                                          ;按键按下后立即跳出
  119.                   MOV   R5,#13
  120.                   LCALL DELAY2
  121.                             CJNE  R4,#02H,LS138_3                                                          ;按键按下后立即跳出
  122.                   CJNE  A,#0xf0,LS138_2
  123.                   AJMP  LS138_1
  124. LS138_3:
  125.                   RET
  126. ;闪烁延时函数
  127. ;0.5S
  128. DELAY2: MOV   R5,#17H
  129.    D3:  MOV   R6,#98H
  130.    D4:  MOV   R7,#46H
  131.         DJNZ  R7,$
  132.                             CJNE  R4,#02H,DELAY22                                                          ;按键按下后立即跳出
  133.         DJNZ  R6,D4
  134.                             CJNE  R4,#02H,DELAY22                                                          ;按键按下后立即跳出
  135.         DJNZ  R5,D3
  136. DELAY22:
  137.                   RET
  138. ;8255PA、PB、PC及控制字端口地址
  139. ;ADD_8255PA  EQU  H                                                                       
  140. ;ADD_8255PB  EQU  H                                                                                                                                
  141. ;ADD_8255PC  EQU  H
  142. ;ADD_8255CON EQU  0F3FFH
  143. IC_8255A:
  144.               CLR P2.7
  145.                 MOV DPTR,#0F3FFH
  146.     MOV A,#80H
  147.     MOVX @DPTR,A
  148.               CJNE   R4,#03H,IC_8255_2   ;按键按下后立即跳出
  149. S1:  MOV A,#00110011B
  150.      MOV DPTR,#0F0FFH
  151.      MOVX @DPTR,A        ;东西红灯亮,南北绿灯亮   
  152.      CALL DELAY5S        ;5秒延时
  153. S2: ;南北黄灯闪烁三次
  154.               ;黄灯第一次闪烁
  155.               CJNE   R4,#03H,IC_8255_2   ;按键按下后立即跳出
  156.               MOV A,#00110101B   ; 东西红灯亮,南北黄灯亮     
  157.               MOV DPTR,#0F0FFH
  158.      MOVX @DPTR,A
  159.      CALL DELAY1S        ;延时0.5秒
  160.      MOV A,#00110111B   ; 东西红灯亮,南北黄灯灭
  161.      MOV DPTR,#0F0FFH
  162.      MOVX @DPTR,A
  163.               CALL DELAY1S
  164.               ;黄灯第二次闪烁
  165.               MOV A,#00110101B     ; 东西红灯亮,南北黄灯亮
  166.      MOV DPTR,#0F0FFH
  167.      MOVX @DPTR,A
  168.      CALL DELAY1S
  169.      MOV A,#00110111B     ; 东西红灯亮,南北黄灯灭
  170.      MOV DPTR,#00FFH
  171.      MOVX @DPTR,A
  172.      CALL DELAY1S
  173.               ;黄灯第三次闪烁
  174.      MOV A,#00110101B     ;东西红灯亮,南北黄灯亮
  175.      MOV DPTR,#0F0FFH
  176.      MOVX @DPTR,A
  177.      CALL DELAY1S
  178.      MOV A,#00110111B    ; 东西红灯亮,南北黄灯灭
  179.      MOV DPTR,#0F0FFH
  180.      MOVX @DPTR,A
  181.      CALL DELAY1S
  182. S3: CJNE   R4,#03H,IC_8255_2   ;按键按下后立即跳出
  183.     MOV A,#00011110B    ; 东西绿灯亮,南北红灯亮
  184.                 MOV DPTR,#0F0FFH
  185.                 MOVX @DPTR,A
  186.                 CALL DELAY5S     
  187. S4: ;东西黄灯闪烁三次
  188.               MOV A,#00101110B     ;东西黄灯亮,南北红灯亮
  189.                 MOV DPTR,#0F0FFH
  190.                 MOVX @DPTR,A
  191.                 CALL DELAY1S
  192.                 MOV A,#00111110B    ; 东西黄灯灭,南北红灯亮
  193.                 MOV DPTR,#0F0FFH
  194.                 MOVX @DPTR,A
  195.                 CALL DELAY1S
  196.                 MOV A,#00101110B     ;东西黄灯亮,南北红灯亮
  197.                 MOV DPTR,#0F0FFH
  198.     MOVX @DPTR,A
  199.     CALL DELAY1S  
  200.     MOV A,#00111110B    ; 东西黄灯灭,南北红灯亮
  201.                 MOV DPTR,#0F0FFH
  202.     MOVX @DPTR,A
  203.     CALL DELAY1S
  204.                 MOV A,#00101110B     ;东西黄灯亮,南北红灯亮
  205.                 MOV DPTR,#0F0FFH
  206.     MOVX @DPTR,A
  207.     CALL DELAY1S
  208.     MOV A,#00111110B    ; 东西黄灯灭,南北红灯亮
  209.                 MOV DPTR,#0F0FFH
  210.     MOVX @DPTR,A
  211.     CALL DELAY1S              
  212.               CJNE   R4,#03H,IC_8255_2
  213.               AJMP               S1                            ; 跳转到状态S1状态,循环
  214. IC_8255_2:
  215.               MOV A,#00111111B    ; 熄灭所有的交通灯,退出8255实验
  216.                 MOV DPTR,#0F0FFH
  217.     MOVX @DPTR,A                           
  218.     RET
  219. DELAY5S:MOV R7,#100         ; 延时5秒               
  220. L0:     MOV R6,#100
  221. L1:     MOV R5,#248
  222. L2:     DJNZ R5,L2
  223.      DJNZ R6,L1
  224.      DJNZ R7,L0
  225.         RET
  226. DELAY1S:MOV R5,#200         ; 延时0.5秒
  227. L3:     MOV R3,#248
  228. L4:    DJNZ R3,L4
  229.      DJNZ R5,L3
  230.      RET   
  231. ;8253T0、T1、T2及控制字端口地址
  232. ;ADD_8253T0  EQU  03FFH
  233. ;ADD_8253T1  EQU  07FFH
  234. ;ADD_8253T2  EQU  0BFFH
  235. ;ADD_8253CON EQU  0FFFH
  236. ;功能:8253模块,主要是8253的初始化部分
  237. IC_8253:
  238.                                           CLR P2.7              ;使138无效
  239.                                             MOV DPTR,#0FFFH
  240.                                 MOV A,#00100101B ;计数器0,只读/写高字节方式2,bcd码计数
  241.                                 MOVX @DPTR,A
  242.                             //              CJNE   R4,#04H,IC_8253_2              ;按键按下后立即跳出
  243.               ;              计数器0:100分频
  244.                                           MOV DPTR,#03FFH
  245.                                           MOV A,#01H                 ;装初值计数器0的高字节  ,
  246.                                           MOVX @DPTR,A            
  247.                                           MOV DPTR,#0FFFH
  248.                                           MOV A,#01010111B ;计数器1,只读低字节,方式3,bcd计数
  249.                                           MOVX @DPTR,A
  250.                                           MOV DPTR,#07FFH
  251.                                           MOV A,#10H                                          ;计数器1:10分频
  252.                                           MOVX @DPTR,A
  253.                                           MOV TMOD,#00H
  254.                                           MOV TH0,#0F0H            
  255.                                           MOV TL0,#0CH
  256.                                           SETB TR0              ;启动T0
  257.                                           SETB ET0              ;开T0中断
  258.                                           SETB EA
  259. IC_8253_1: CJNE   R4,#04H,IC_8253_2              ;按键按下后立即跳出
  260.            AJMP                IC_8253_1
  261. IC_8253_2:
  262.            RET
  263. T0INT:                            CPL              P3.0              ;取反                                                        ;1000HZ方波
  264.                                           MOV TH0,#0F0H            
  265.                                           MOV TL0,#0CH
  266.                                           RETI
  267. JIDIAN:   
  268.            CLR    P2.7                                            ;使译码器无效                                                                     
  269. JIDIAN_1:  SETB P2.6
  270.                                CJNE   R4,#05H,JIDIAN_2              ;按键按下后立即跳出
  271.            JB     P3.1,JIDIAN_1                ;JB位条件转移
  272.                               
  273. MM:                               CLR    P2.6
  274.                                JNB     P3.1,MM
  275.                                JB              P3.1,  JIDIAN_1
  276. JIDIAN_2:
  277.                                RET
  278.                 END
复制代码


实物图:


总的仿真电路图:


完整的Word格式文档51黑下载地址:

邹世阳的单片机课程设计.doc (1.69 MB, 下载次数: 21)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表