单片机并口简单应用流水灯.docx

上传人:b****3 文档编号:10334372 上传时间:2023-05-25 格式:DOCX 页数:12 大小:112.05KB
下载 相关 举报
单片机并口简单应用流水灯.docx_第1页
第1页 / 共12页
单片机并口简单应用流水灯.docx_第2页
第2页 / 共12页
单片机并口简单应用流水灯.docx_第3页
第3页 / 共12页
单片机并口简单应用流水灯.docx_第4页
第4页 / 共12页
单片机并口简单应用流水灯.docx_第5页
第5页 / 共12页
单片机并口简单应用流水灯.docx_第6页
第6页 / 共12页
单片机并口简单应用流水灯.docx_第7页
第7页 / 共12页
单片机并口简单应用流水灯.docx_第8页
第8页 / 共12页
单片机并口简单应用流水灯.docx_第9页
第9页 / 共12页
单片机并口简单应用流水灯.docx_第10页
第10页 / 共12页
单片机并口简单应用流水灯.docx_第11页
第11页 / 共12页
单片机并口简单应用流水灯.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机并口简单应用流水灯.docx

《单片机并口简单应用流水灯.docx》由会员分享,可在线阅读,更多相关《单片机并口简单应用流水灯.docx(12页珍藏版)》请在冰点文库上搜索。

单片机并口简单应用流水灯.docx

单片机并口简单应用流水灯

实验一单片机并口简单应用(流水灯)

09  电气 陈毅斌 32号

实验目的

1、了解单片机汇编语言程序的基本结构

2、了解单片机汇编语言程序的设计和调试方法

3、掌握顺序控制程序的简单编程

实验仪器

单片机开发板、万利仿真机、稳压电源、计算机

实验原理

1、流水灯硬件电路

如图4-1所示,流水灯硬件电路由移位寄存器74LS164、功能选择开关J502、二极管、三极管、单片机并口(P0)、限流电阻等组成。

发光二极管连接成共阳极结构。

发光二极管点亮的条件是:

阳极接高电平、各阴极接低电平。

因此,通过程序控制74LS164的Q0端。

Q0端输出0,公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。

图4-1流水灯电路图

2、单片机流水灯程序设计

由上图可知,发光二极管要点亮,需要先把J502的2、3脚相连,三极管Q500导通,然后从P0口输出数据。

(1)控制三极管导通程序

控制三极管有两种方法,第一种:

在74LS164的第8脚产生一个正脉冲,此时1脚为0,三极管就导通;为1,三极管就截止。

第二种:

在单片机IO模拟74LS164时序,一次输出一个字节,只要Q0=0即可控制三极管开通。

为1,三极管截止。

两种方法的程序流程如图4-2所示。

图4-2流水灯位选信号控制

(2)产生流水灯效果程序

三极管导通后,就可以从P0口输出数据控制发光二极管。

P0口输出数据既可以编写程序逐个输出,也可以将输出数据序列定义在存储器中,然后用读程序存储器指令逐个取出并输出到P0口。

程序流程图如图4-3所示。

图4-3流水灯程序流程图

实验内容

1、直接输出法输出数据序列

LEDCLK    bit    P3.4

LEDDIN    bit    P2.3

ORG  0000H

LJMP  MAIN

ORG  0030H

MAIN:

  LCALLLedSequence  ;调用LED此程序产生流水灯效果

SJMPMAIN

LedSequence:

CLR    LEDCLK      ;往74LS164的Q0端送一个0

CLR    LEDDIN      ;CLK引脚产生一个正脉冲

NOP

SETB  LEDCLK  

NOP

CLR    LEDCLK  

MOV  P0,#0FEH    ;为0的位对应的二极管亮,第一个灯亮

MOV  R7,#200      ;R7为延时量,Nms

LCALL  DelayNms    ;该程序延时时间由R7决定

MOV  P0,#0FDH    ;第二个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#0FBH    ;第三个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#0F7H    ;第四个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#11101111B  ;第五个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#11011111B  ;第六个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#10111111B  ;第七个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#01111111B  ;第八个灯亮

MOV  R7,#200

LCALL  DelayNms

RET

DelayNms:

LCALL  Delay1ms

DJNZ  R7,$-3

RET

Delay1ms:

          ;延时1ms程序

PUSH  07

MOV  R7,#250  ;1ms

NOP

NOP

DJNZ  R7,$-2

POP    07

RET

END

2、查表法输出数据序列

LEDCLK    bit    P3.4

LEDDIN    bit    P2.3

ORG  0000H

LJMP  MAIN

ORG  0030H

MAIN:

  LCALL  LedSequence        ;调用LED此程序查表方法设置流水灯

SJMP  MAIN

LedSequence:

LCALL  LedLight

MOV  R6,#8              ;循环次数赋值

MOV  DPTR,#LedSequenceTab      ;查表赋值首地址

LedSequence1:

MOV  A,R6

MOVC  A,@A+DPTR

CPL    A                ;取反使得只有一个位为0其余为1

MOV  P0,A

MOV  R7,#200

LCALL  DelayNms            ;调用延迟时间

DJNZ  R6,LedSequence1

RET

LedSequenceTab:

DB  80H,40H,20H,10H,08H,04H,02H,01H,00H

DelayNms:

LCALL  Delay1ms

DJNZ  R7,$-3

RET

Delay1ms:

MOV  A,R7

MOV  R7,#250  ;1ms

NOP

NOP

DJNZ  R7,$-2

MOV  R7,A

RET

LedLight:

MOV  B,#8

MOV  A,#0FEH

CLR    LEDCLK

CLR    LEDDIN

LedLight1:

RLC    A

MOV  LEDDIN,C

SETB  LEDCLK

NOP

CLR    LEDCLK

DJNZ  B,LedLight1

RET

3.将学号后两位对应的二进制为1的灯点亮

LEDCLK  bit P3.4;

LEDDIN bit P2.3;

ORG0000H

SJMPMAIN

ORG0030H

MAIN:

MOV  SP,#60H      ;设置堆栈

CLR   LEDCLK      ;开启三极管

CLR    LEDDIN

SETB  LEDCLK

MOV  P0,#00010000B  ;P0口送入值为0口灯亮

MAIN1:

AJMP  MAIN1

END

运行结果:

思考题

1、请把学号后两位数进转换成二进制数,然后依次点亮其中为1对应的二极管,写出输出序列。

例如,60号转换成二进制后是00111100B,依次点亮四个1对应的二极管,输出序列是0DFH,0EFH,0F7H,0FCH.(从低位到高位也可以)

LEDCLK    bit    P3.4

LEDDIN    bit    P3.6

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

  LCALLLedSequence  ;调用LED此程序产生流水灯效果

SJMP$

LedSequence:

CLR    LEDCLK      ;往74LS164的Q0端送一个0

CLR    LEDDIN      ;CLK引脚产生一个正脉冲

NOP

SETB  LEDCLK  

NOP

CLR    LEDCLK  

MOV  P0,#0FEH    ;为0的位对应的二极管亮,第一个灯亮

MOV  R7,#200      ;R7为延时量,Nms

LCALL  DelayNms    ;该程序延时时间由R7决定

MOV  P0,#0FDH    ;第二个灯亮

MOV  R7,#200

LCALL  DelayNms

MOV  P0,#0FBH    ;第三个灯亮

MOV  R7,#200

LCALL  DelayNms

DelayNms:

LCALL  Delay1ms

DJNZ  R7,$-3

RET

Delay1ms:

        ;延时1ms程序

PUSH  07

MOV  R7,#250  ;1ms

NOP

NOP

DJNZ  R7,$-2

POP    07

RET

2、参考实验内容2,编写程序把输出序列增加到30个。

LEDCLK    bit    P3.4

LEDDIN    bit    P2.3

ORG  0000H

LJMP  MAIN

ORG  0030H

MAIN:

  LCALL  LedSequence        ;调用LED此程序查表方法设置流水灯

SJMP  MAIN

LedSequence:

LCALL  LedLight

MOV  R6,#30              ;循环次数赋值赋值30个

MOV  DPTR,#LedSequenceTab      ;查表赋值首地址

LedSequence1:

MOV  A,R6

MOVC  A,@A+DPTR

CPL    A                ;取反使得只有一个位为0其余为1

MOV  P0,A

MOV  R7,#200

LCALL  DelayNms            ;调用延迟时间

DJNZ  R6,LedSequence1

RET

LedSequenceTab:

DB  80H,40H,20H,10H,08H,04H,02H,01H,00H    ;查表的增加到30个

DB  11H,22H,33H,44H,55H,66H,77H,88H,99H

DB  12H,34H,56H,78H,90H,12H,34H,56H,78H

DB  12H,34H,56H

DelayNms:

LCALL  Delay1ms

DJNZ  R7,$-3

RET

Delay1ms:

MOV  A,R7

MOV  R7,#250  ;1ms

NOP

NOP

DJNZ  R7,$-2

MOV  R7,A

RET

LedLight:

MOV  B,#8

MOV  A,#0FEH

CLR    LEDCLK

CLR    LEDDIN

LedLight1:

RLC    A

MOV  LEDDIN,C

SETB  LEDCLK

NOP

CLR    LEDCLK

DJNZ  B,LedLight1

RET

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2