NE555P/74HC595驱动N输出排序器的设计与应用

需积分: 9 0 下载量 43 浏览量 更新于2024-12-17 收藏 42KB ZIP 举报
资源摘要信息: "N_Output_Sequencer是一个基于NE555定时器和74HC595移位寄存器的电路设计,旨在提供多个输出通道的排序控制。这种排序器特别适用于控制LED灯、继电器以及其他需要顺序激活的负载设备。 NE555定时器是一种广泛使用的集成电路(IC),能够产生精确的时间延迟或振荡。它可以根据配置工作在单稳态或双稳态模式。在N_Output_Sequencer中,NE555可能被用作产生时钟信号或触发脉冲,这些信号将用于控制74HC595移位寄存器的时序。 74HC595是一个串行输入、并行输出的移位寄存器,它允许通过几个引脚实现多个输出。这个IC在微控制器和电子设备之间架起了桥梁,大大减少了控制多输出设备所需的I/O引脚数量。通过串行数据输入,移位寄存器可以被加载和更新,提供了一种有效的方式来管理多个输出。 N_Output_Sequencer通过将NE555的时序功能与74HC595的输出扩展能力结合起来,实现了对多个设备的排序控制。例如,使用该排序器,你可以顺序点亮一排LED灯,或者依次激活一组继电器。这种排序控制方式不仅增加了电路的灵活性,而且对于需要按特定顺序操作多个设备的应用场景非常有用。 在描述中提到的应用对象包括LED、继电器和灯。LED灯在顺序控制下可以用于制作跑马灯效果、信号指示灯等。继电器排序器可以用于电子锁、自动化控制电路或任何需要顺序切换负载的系统。而灯的排序控制则可以应用在舞台照明、景观照明等方面,通过编程实现复杂的光效变化。 标签部分为空,说明文件未提供有关分类或关键词的信息。这可能意味着设计者希望用户根据功能描述自行分类,或者该文件更注重于具体的工程应用,而不是理论分类。 从压缩包子文件的文件名称列表中我们可以知道,该文件可能包含设计图纸、源代码、示例代码、配置说明、操作手册或者是一个完整的工程文件包。文件名N_Output_Sequencer-main暗示这是一个主文件或核心文件,可能是包含了主要电路设计图纸、核心控制算法或者是主要配置文件等。由于没有提供具体文件内容,我们不能确定其具体类型,但可以推测该文件是进行N_Output_Sequencer设计和应用的关键资源。"
180 浏览量

class vbase_test extends uvm_test; `uvm_component_utils(vbase_test) env m_env; vseqr m_vseqr; int unsigned simSeed; function new(string name, uvm_component parent); super.new(name, parent); endfunction : new extern function void build_phase (uvm_phase phase); extern function void connect_phase (uvm_phase phase); extern task reset_phase(uvm_phase phase); extern task reset_reg_model(); extern function void end_of_elaboration_phase(uvm_phase phase); extern function void start_of_simulation_phase(uvm_phase phase); extern task main_phase(uvm_phase phase); // report test result extern virtual function void report_phase(uvm_phase phase); endclass : vbase_test function void vbase_test::build_phase (uvm_phase phase); super.build_phase(phase); m_env = env::type_id::create(.name("m_env"), .parent(this)); // virtual sequencer m_vseqr = vseqr::type_id::create(.name("m_vseqr"), .parent(this)); uvm_config_db# (uvm_object_wrapper)::set(this,"m_vseqr.main_phase","default_sequence",vBaseSeq::type_id::get()); //uvm_config_db# (uvm_object_wrapper)::set(this,"m_vseqr.main_phase","default_sequence",vUniBaseSeq#()::type_id::get()); endfunction : build_phase function void vbase_test::connect_phase (uvm_phase phase); m_vseqr.p_rm = m_env.m_reg_model; m_vseqr.i2c_seqr = m_env.m_i2c_agent.m_seqr; endfunction : connect_phase task vbase_test::reset_phase(uvm_phase phase); //`uvm_info(get_type_name(), {"REGISTER MODEL:\n", m_reg_model.sprint()}, UVM_MEDIUM) reset_reg_model(); super.reset_phase(phase); endtask task vbase_test::reset_reg_model(); forever begin wait (tb_top.reset_n == 0); m_env.m_reg_model.reset(); `uvm_info(get_type_name(), "Reseting Complete", UVM_MEDIUM) wait (tb_top.reset_n == 1); end endtask function void vbase_test::end_of_elaboration_phase(uvm_phase phase); int handle; $system("rm -rf TEST_RUNNING"); simSeed = $get_initial_random_seed(); handle = $fopen($psprintf("TEST_RUNNING_%0d",simSeed),"w"); $fclose(handle); handle = $fopen("caseSeed","w"); $fwrite(handle,"%0d",simSeed); $fclose(handle); if($test$plusargs("uvm_tree")) uvm_top.print_topology(); endfunction : end_of_elaboration_phase function void vbase_test::start_of_simulation_phase(uvm_phase phase); `uvm_info(get_type_name(), {"start of simulation for ", get_full_name()}, UVM_HIGH); endfunction : start_of_simulation_phase task vbase_test::main_phase(uvm_phase phase); phase.phase_done.set_drain_time(this, 200ns); endtask : main_phase // report test result function void vbase_test::report_phase(uvm_phase phase); uvm_report_server server; int handle; int unsigned err_num; super.report_phase(phase); server = get_report_server(); err_num = (server.get_severity_count(UVM_ERROR) + server.get_severity_count(UVM_FATAL)); simSeed = $get_initial_random_seed(); $display("\n********************************************************************************************\n"); if (err_num != 0) begin $display("TEST CASE FAILED!!!"); handle = $fopen($psprintf("TEST_FAILED_%0d",simSeed),"w"); end else begin $display("TEST CASE PASSED!!!"); handle = $fopen($psprintf("TEST_PASSED_%0d",simSeed),"w"); end $fclose(handle); $display("\n********************************************************************************************\n"); $system("rm -rf TEST_RUNNING*"); endfunction `endif

291 浏览量