呼吸流水燈

2021-08-22 05:00:11 字數 2597 閱讀 3513

實現剛開始第乙個燈做完呼吸後左移,到達最右邊後回來,如此反覆。由於**需求,在每個計數器到達最大時設定乙個標誌位便於觀察。

分析

**的編寫:

module xunhuan1(

input wire clk ,

input wire rst_n ,

output reg[3:0] led

); reg[5:0] cnt_us;

reg[9:0] cnt_ms;

reg[9:0] cnt_s ;

reg flag ;

reg flag_cnt_us;

reg flag_cnt_ms;

reg flag_cnt_s ;

reg[2:0] cnt_5;

reg pwm;

parameter cnt_us_max = 50-1;

parameter cnt_ms_max = 1000-1;

parameter cnt_s_max = 1000-1;

//cnt_us

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_us = 0;

else if(cnt_us==cnt_us_max)

cnt_us = 0;

else

cnt_us = cnt_us + 1;

//flag_cnt_us

always@(posedge clk or negedge rst_n)

if(rst_n==0)

flag_cnt_us = 0;

else if(cnt_us==cnt_us_max)

flag_cnt_us = 1;

else

flag_cnt_us = 0;

//cnt_ms

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_ms = 0;

else if(cnt_ms==cnt_ms_max&&flag_cnt_us==1)

cnt_ms = 0;

else if(flag_cnt_us==1)

cnt_ms = cnt_ms + 1;

//flag_cnt_ms

always@(posedge clk or negedge rst_n)

if(rst_n==0)

flag_cnt_ms = 0;

else if(cnt_ms==cnt_ms_max&&flag_cnt_us==1)

flag_cnt_ms = 1;

else

flag_cnt_ms = 0;

//cnt_s

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_s = 0;

else if(cnt_s==cnt_s_max&&flag_cnt_ms==1)

cnt_s = 0;

else if(flag_cnt_ms==1)

cnt_s = cnt_s + 1;

//flag_cnt_s 1s

always@(posedge clk or negedge rst_n)

if(rst_n==0)

flag_cnt_s = 0;

else if(cnt_s==cnt_s_max&&flag_cnt_ms==1)

flag_cnt_s = 1;

else

flag_cnt_s = 0;

//flag

always@(posedge clk or negedge rst_n)

if(rst_n==0)

flag = 0;

else if(flag_cnt_s==1)

flag = ~flag;

//cnt_5

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_5 = 0;

else if(cnt_5==5&&flag==1&&flag_cnt_s==1)

cnt_5 = 0;

else if(flag==1&&flag_cnt_s==1)

cnt_5 = cnt_5+1;

//pwm

always@(posedge clk or negedge rst_n)

if(rst_n==0)

pwm = 0;

else if(cnt_ms<=cnt_s&&flag==0)

pwm = 1;

else if(cnt_ms>cnt_s&&flag==0)

pwm = 0;

else if(cnt_ms>=cnt_s&&flag==1)

pwm = 1;

else if(cnt_ms

流水燈程式

流水燈程式 實現從左往右間隔一秒,再實現從右往左間隔一秒 c語言程式如下 include include define uchar unsigned char define uint unsigned int void delay uint z main uchar aa uint i 0 whil...

流水燈製作

今天的電路和昨天的led1一樣,只是多了幾個,好像不是幾個,是好幾個。電路分析就不做了,就是給高電平導通,二極體發光就行了。沒有太大的可說性。直接上程式了。include sbit led1 pa0 sbit led2 pa1 sbit led3 pa2 sbit led4 pa3 sbit led...

4 花樣流水燈

at89s51的定時 計數器t0產生2秒鐘的定時,每當2秒定時到來時,更換閃爍的燈,每個指示閃爍的頻率為0.2秒。即l1以0.2秒的速率閃爍,2秒定時到來時,燈l1閃過10下之後,l2開始以0.2秒的速率閃爍,如此迴圈下去,共4個燈,l1 l4 說明 定時2秒,採用16位定時50ms,共定時40次才...