一个小小的fpgaled流水灯程序,求高人指点指点啊!!不好意思,分数不多了!

一个小小的fpgaled流水灯程序,求高人指点指点啊!!不好意思,分数不多了!,第1张

为什么led位宽为8, led_out及led_out1位宽是9,后来还是取的8位?

———这个应该是位宽定义上有点问题吧(估计led少定义了一位),不过不影响逻辑实现,顶多就是截取了led_out1的低八位作为输出(led=led_out1[7:0])。

led_out1=~led_out; 这句话什么意思啊?

——当满足buffer == 26'd25000000时,led_out取反。比如,在buffer != 26'd25000000时,led_out=9'b010101010;当buffer == 26'd25000000时,led_out = 9'b101010101

为什么 led_out没有初始化就在移位?reg型未初始化默认值是什么呢?

——这个跟一般的单片机程序有所不同。FPGA内部如果没有初始化数值,默认为内三态x,在流水灯上表现为暗(相当于逻辑0),不影响使用。如果楼主不放心,可以再定义时给出初始化数值,比如reg [8:0] led_out = 9'd0

总体来说这个程序比较简单。希望对楼主有帮助。

建议:时序逻辑内部用非阻塞赋值<=。

汇编语言程序如下:

;假设1:D1~D8八个彩灯接在P1口,输出低电平发光

;假设2:系统晶振为12MHz

;假设3:N = 5

;程序如下:

ORG 0000H

MOV R3, #5           ;N=5

LOOP0:

MOV A,   #0FFH     

MOV P1, #0FFH        ;开始时全灭

;-------------------------------逐个点亮

MOV R2, #8

LOOP1: CLR C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP1

;-------------------------------逐个熄灭

MOV R2, #8

LOOP2: SETB C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP2

;-------------------------------全亮、全灭交替

MOV R2, #4

LOOP3: MOV P1, #0           ;全亮

CALL DL500MS

CALL DL500MS           ;共1s

MOV P1, #255         ;全灭

CALL DL500MS           ;05s

DJNZ R2, LOOP3

;-------------------------------

DJNZ R3, LOOP0

MOV P1, #01001001B   ;5、显示为0100 1001

CALL DL500MS

CALL DL500MS           ;共1s

SJMP 0000H             ;重新开始N遍

;-------------------------------延时子程序

DL500MS:

MOV R5, #9      ;1T

DL1:   MOV R6, #128    ;1T

DL2:   MOV R7, #215    ;1T

NOP              ;1T

DL3:   DJNZ R7, DL3     ;2T   2 215 = 430 T

DJNZ R6, DL2     ;2T   [1+1+430+2] 128 = 55552 T

DJNZ R5, DL1     ;2T   [1+55552+2] 9 = 499995 T

RET              ;2T   1 + 499995 + 2 = 499998 T

;-------------------------------------

END

扩展资料:

实现8路流水灯的原理:

下图为主控芯片和流水灯模块的原理图。

流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。

要实现流水灯功能,只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:

P10低、延时、P10高、P11低、延时、P11高、P12低、延时、P12高、P13低、延时、P13高。

P14低、延时、P14高、P15低、延时、P15高、P16低、延时、P16高、P17低、延时、P17高、返回到开始、程序结束。   

程序如下:

#include <reg52h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;

void main()

{

  int i,j;

 //点亮第一个灯

  led1 = 1;

  led2 = 0;

  led3 = 0;

  led4 = 0;

  led5 = 0;

  led6 = 0;

  led7 = 0;

  led8 = 0;

  //延时1秒

for(i = 0;i < 110; ++i)

{

 for(j = 0; j < 1000; ++j)

 {

   ;//什么也不做

 }

}

  //点亮第二个灯

  led1 = 0;

  led2 = 1;

  led3 = 0;

  led4 = 0;

  led5 = 0;

  led6 = 0;

  led7 = 0;

  led8 = 0; 

  //点亮剩余的灯

  //省略……

  while(1);

}

扩展资料:

流水灯几点说明:

void:因为该延时函数不需要返回值,所以写为void

delay1s:该函数的函数名,命名需要符合C语言的标识符命名规则。

(): 不需要传入参数,所以括号中为空

至此我们可以把流水灯程序写为以下形式:

利用对亮和灭延迟时间的不同,加上视觉暂留就有逐渐变化的效果

for(PWM_LOW=1; PWM_LOW<CYCLE ; PWM_LOW++)

{

P2=0xff; //灭

delay1(PWM_LOW); //灭延迟,随循环的执行,灭的时间越来越长

P2 =0x00; //亮

delay1(CYCLE-PWM_LOW); //亮延迟,随循环的执行,亮的时间越来越短

}

每一次循环会在固定的一个时间长度(CYCLE)内显示一个的灭亮过程,随循环的执行改变灭和亮的时间比。

说白了就是简单的模拟PWM ,在P2的引脚上将看到一个固定频率但占空比不断变化的波形

程序如下:

#include <reg52h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3。

让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。

从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。

无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。

目的:这个程序是一个简单的程序

轻水C 8端口指示灯交替点燃(第一点亮RC0,然后熄灭RCO点亮RC1)。

硬件要求:DIP开关S2是所有设置为ON。

#的包括的调用头文件

__ CONFIG _DEBUG_OFF _CP_ALL和_WRT_HALF和_CPD_ON _LVP_OFF?_BODEN_OFF和_PWRTE_ON和_WDT_OFF HS振荡

;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关闭加密4M晶体HS振荡

; 用户寄存器定义

数EQU 20H;移位计数寄存器

del_va1 EQU 0FFH;外层延迟参数

del_va2 EQU 0FFH;内部的延迟参数

ORG 00H;程序的人口地址

; ADDLW 0FFH

; 主程序开始

主要

NOP; ICD需要一个空指令

CLRF PORTC;清晰的C首先身体

CLRF TRISC;口全部显示

BANKSEL TRISC选择的I / O端口方向寄存器设置C口全输出

CLRF STATUS返回阀体0

MOVLW 08

MOVWF计数;负载循环(C口共8个)

BSF STATUS ,C;将进位标志为1,由于循环移位进行循环

循环

RLF PORTC,1,C端口左边的一个

呼叫时延

呼叫时延 /> CALL DELAY;调用三次延时程序(以确保亮度流水灯闪烁速度)

BCF STATUS,C;清除进位标志(永远只有一个指示灯点亮)

DECFSZ数1;确定是否一个周期结束

GOTO LOOP;,继续循环移位

GOTO为主;,程序会重新启动

; 延时程序

的延迟

一条MOVLW del_va1;外延时程序参数

MOVWF 30H

MOVLW del_va2延时程序内层参数

MOVWF 31H

DECFSZ 31H,1

GOTO $ -1 DECFSZ 30H,1

转到

$ -4

回报; 程序结束

结束

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。

2、#include "reg51h"首先写出单片机的头函数。

3、#include "intrinsh"输入位移函数。

4、unsigned int count=0,led;定义函数。

5、输入主函数,定义单片机的端口,写入延时函数。

6、中断跳转,使流水灯运行起来。

以上就是关于一个小小的fpga/led流水灯程序,求高人指点指点啊!!不好意思,分数不多了!全部的内容,包括:一个小小的fpga/led流水灯程序,求高人指点指点啊!!不好意思,分数不多了!、8路流水灯汇编语言程序的写法、51单片机流水灯程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10104031.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存