實現剛開始第乙個燈做完呼吸後左移,到達最右邊後回來,如此反覆。由於**需求,在每個計數器到達最大時設定乙個標誌位便於觀察。
分析
**的編寫:
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次才...