首先要看Led灯和单片机的连接情况,如果只是控制亮灭,只需要看单片机端口控制即可,关键是配置端口的DDRx方向寄存器和PORTx数据寄存器,比如端口A的0引脚控制一个灯,要配置它的输出高电平或是低电平以达到控制灯的亮灭,那
bit LED1;bit LED2;LED1=1;LED2=0;while (1){ delay(2000);LED1=!LED1;LED2=!LED2;}
你只要先定义 sbit P0^0=LED0;一定定义下去 然后再定义一个按钮 比如P1.1 sbit P1^1=key;代码里写 123456789while(true){if(key==1){LED0=0;LED1=0;..//把你要亮的灯置0就行了。阳极的话置1}}
delay();LED_IO7= 0;delay();LED_IO8= 0;delay();} //开始灯全灭 void LED_dengmie(void){ LED_IO1 = 1;LED_IO2 = 1;LED_IO3 = 1;LED_IO4 = 1;LED_IO5 = 1;LED_IO6= 1;LED_IO7= 1;LED
delay(50000);LED4 = 1;delay(50000);LED4 = 0;delay(50000);LED3 = 0;delay(50000);LED2 = 0;delay(50000);LED1 = 0;delay(50000);} } 上述代码实现了四个 LED 灯逐个亮起来然后再逐个灭掉的效果。其中,
在全亮的代码后面添加一个for循环 for(int i=0;i<10000(根据自己板子的晶振周期来计算);i++){ } 不用写全息代码,他自己就会出现你想要的效果 即:全亮for(int i=0;i<#;i++){ }
怎么用c语言编写代码使LED灯交替显示全亮与全息
(4) 不允许使用LED集成驱动模块和集成灰阶产生模块,可用CPLD或FPGA。2、方案论证2.1 显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:方案一:静态显示,将一帧图像中的每一个二极管的状态分别用0 和1 表示
这个是最简单的方法, IBUFGDS的输入接到PLL输入, PLL的输出通过BUFG接到CLOCK NETWORK. 然后得到的system_clk 接到PLL的feedback输入 如果这个时钟是驱动I/O模块的话,例如是ADC信号的时钟,还要加上BUFPLL BUFIO这些。
TIMSK1 |= (1 << OCIE1A); // 开启定时器1比较匹配中断 TCCR1B |= (1 << CS12) | (1 << CS10); // 分频系数为1024 } void led_init(){ DDRB |= (1 << LED_PIN); // 设置LED引脚为输出 }
always @(posedge clk or negedge reset)begin if ( ~reset )begin led_r <= 3'b111;counter <= 32'h0000_0000;end else if ( counter < 32'd ) // 80MHz -> 12.5ns // 12.5ns X 80000000 = 1s
本人刚学FPGA,写了个把输入80MHZ的时钟分频,用LED显示出来,一秒闪一次。请各位大侠指点一下
input switch,output led_red,output led_yellow,output led_bule );// 假设PWM的频率为1k:T = 1/1k = 1ms;// 这个频率可以根据你自己的需要设定然后修改num和t的值即可,不过要注意将相关寄存器的位数做对应修改 /
LED的驱动类型是电流驱动型的,而FPGA的管脚输出电流是可调的,可以在QUARTUS II中对管脚设置成电流驱动型的,电流的大小可以设置成1mA,2mA,3mA等等。所以说在理论上来说,是可行的。当然在你的LED点阵电流不是要求特别
input rst,clk;output [20:0]led;///基于verilog编写 reg[20:0]led;reg[25:0]i;always@(posedge clk or negedge rst)//50m的时钟,20ns的周期,要制造0.5s间隔 begin if(!rst)i<=25'd0;else if(i==25'd
input clk,rst,en;output wei;output[7:0] shu,led;reg[7:0] shu_out,led_Out;reg[25:0] led_out;reg[3:0] display0;reg wei_out;initial led_out=0;always @(posedge clk)begin led_out=led_out+1;if
5'b01000:从右到左每两个LED逐渐点亮5'b00100:从左到右一个LED跳跃式点 5'b00010:从右到左一个LED跳跃式点亮 module led (input wireClock,input wireRESET_N,input wireSWITCH1,input wireSWITCH2,input wireSWI
用状态机。。把要显示的灯的编码,作为状态的输出。在做个计数器。如;4个状态。s0,s1,s2,s3每个状态对应LED灯的编码0001.0010.0100,1000.根据计数,让机器,不断重复这四个状态
用FPGA的Verilog语言如何做LED点阵显示?
实际上,FPGA无法完成你需要的模拟开关的功能,但是,可以通过FPGA的数字IO控制外部的模拟开关器件来做模拟选择功能。
// 假设PWM的频率为1k:T = 1/1k = 1ms;// 这个频率可以根据你自己的需要设定然后修改num和t的值即可,不过要注意将相关寄存器的位数做对应修改 // 将1ms再分为256个份,每一份:t = T/256 = 3.9us;// 以
理工实验,Verilog HDL写一个程序让白色LED渐亮渐灭,需要用到PWM,最后通过FPGA演示
计算机语言从低级到高级可以分为: 机器语言,即由0、1组成的机器硬件可以识别的语言; 低级语言,即汇编语言 中级语言,如C语言 高级语言,如C++,JAVA,C#等。 汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,以便于理解和程序员编程。汇编语言通常用于对硬件的直接操控。由于汇编语言编写的程序很小,所以通常在程序中最核心的、控制硬件的代码可以采用汇编语言编写,一方面是安全,另一方面提高运行速度。 对于计算机的初学者,应该从中高级语言学起,如c语言,vb,java等,如果你是想要学习如何编程,学习一到两门高级语言已经够用了。 如果你已经掌握了基本的编程技能,最好是可以学习数据结构和操作系统以及计算机硬件的基本工作原理,以便优化你编写的程序,提高安全性和运行效率。 如果你想要从事更高级的开发工作,则可能需要学习汇编语言。 在高校中,计算机科技专业的学生汇编语言是必修课,而软件工程专业的学生则对汇编语言不做要求。 至于汇编与编程的区别是显而易见的,汇编语言是一种用于编写某些程序的语言。而编程则是程序员用某种语言编写程序的过程。 查看原帖>>library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY seg70 IS PORT ( clk : IN std_logic; --clk 50MHZ rst : IN std_logic; --REST dataout : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出 en : OUT std_logic_vector(7 DOWNTO 0)); --COM使能输出 END seg70; ARCHITECTURE arch OF seg70 IS signal cnt_scan : std_logic_vector(15 downto 0 ); --计数器分频用 signal data4 : std_logic_vector(2 downto 0); signal dataout_xhdl1 : std_logic_vector(7 downto 0); signal en_xhdl : std_logic_vector(7 downto 0); begin dataout<=dataout_xhdl1; en<=en_xhdl; process(clk,rst) begin if(rst='0')then cnt_scan<="0000000000000000"; elsif(clk'event and clk='1')then cnt_scan<=cnt_scan+1; --计数器累加 end if; end process; process(cnt_scan(15 downto 13)) --计数器分频 begin case cnt_scan(15 downto 13) is --这里有8种状态,一个状态的时间间隔是一样的。 when"000"=> en_xhdl<="11111110"; --每一次轮流选择一排点阵灯 when"001"=> en_xhdl<="11111101"; when"010"=> en_xhdl<="11111011"; when"011"=> en_xhdl<="11110111"; when"100"=> en_xhdl<="11101111"; when"101"=> en_xhdl<="11011111"; when"110"=> en_xhdl<="10111111"; when"111"=> en_xhdl<="01111111"; when others=> en_xhdl<="11111110"; end case; end process; process(en_xhdl) begin case en_xhdl is --每一选择一排灯,同时还要给点阵的数据端口送数据 when "11111110"=> data4<="000"; when "11111101"=> data4<="001"; when "11111011"=> data4<="010"; when "11110111"=> data4<="011"; when "11101111"=> data4<="100"; when "11011111"=> data4<="101"; when "10111111"=> data4<="110"; when "01111111"=> data4<="111"; when others => data4<="111"; end case; end process; process(data4) begin case data4 is --给点阵的数据端口送数据 --点阵数据口对应的管脚为1时,那个点不会亮。 --当点阵数据口对应的管脚为0时,那个点会亮。 --下面是一个汉字“正”的点阵码,就是利用点阵的亮和不亮形成对比显示出来的。 WHEN "000" => dataout_xhdl1 <= "11111111"; --第一行 WHEN "001" => dataout_xhdl1 <= "00000000"; WHEN "010" => dataout_xhdl1 <= "11101011"; WHEN "011" => dataout_xhdl1 <= "10001011"; WHEN "100" => dataout_xhdl1 <= "11101011"; WHEN "101" => dataout_xhdl1 <= "11101111"; WHEN "110" => dataout_xhdl1 <= "10000001"; WHEN "111" => dataout_xhdl1 <= "11111111"; --第八行 WHEN OTHERS => dataout_xhdl1 <= "00000011"; END CASE; END PROCESS; end arch; 8*8 LED显示正字 你根据这个来改成0-F显示啊,程序看懂就行。再加个状态机,就可以顺序循环显示了
74不是FPGA,概念不同。
把握DCM、PLL、PMCD和MMCM知识是稳健可靠的时钟设计策略的基础。 赛灵思在其FPGA中提供了丰富的时钟资源,大多数设计人员在他们的FPGA设计中或多或少都会用到。不过对FPGA设计新手来说,什么时候用DCM、PLL、PMCD和MMCM四大类型中的哪一种,让他们颇为困惑。赛灵思现有的FPGA中没有一款同时包含这四种资源
做4个不同的分频给LED。不会分频就 做4个不同的计数器,分别把计数器的最高位给LED。或再简单一些,做一个计数器4位以上的,把不同的位给4个LED。 LED闪烁还分静态、动态?可重配置不懂。等高人解答。刚看了下重配置,建议初学还是先不要研究这个了,FPGA上的资源够初学用的,用不上重配置。
可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。 具体实现方法可以参考如下程序: #include #include #define uint unsigned int#define uchar unsigned charvoid delay(uint a);void main(){ P1=0xfe; while(1) { // 向左循环点亮LED for(i=0; i0;x--) for(y=110;y>0;y--);}
今天做回好人,闲着给你写一个做参考。 按键按一次LED灯灭,在按一次按键LED灯亮。 程序如下: /************************************************************************************************************* #include "REG52.H" sbit LED1_01 = P1^1; //LED灯 sbit KEY0_01 = P1^2; //按键 void Delay_1ms(unsigned int Time) { unsigned int x, y; for(x = Time; x > 0; x--) for(y = 120; y > 0; y--); } int main(void) { LED1_01 = 1; //打开LED灯点亮 while(1) { if(KEY0_01 == 0) //检测按键是否按下 { Delay_1ms(10); //延时去抖动 if(KEY0_01 == 0) //确定按键按下 { LED1_01 = ~ LED1_01; //取反LED灯 [ 亮 . 灭 ] } while(KEY0_01 == 0); //检测松手 } } } *****************************************************************************************************************/