TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LCD1602的时钟显示
3 f3 R/ T1 n, J, {* B; Z//简易动态可调电子钟设计; J4 S; }6 F. M0 ^% \ S
//实现时钟在1602上动态显示且可调
5 M0 B. c! F7 n$ S- u2 S8 e# T; S! m
module lcd1602(clk,rst_n,rs,wr,lcden,data,sw1,sw2,sw3,sw4);
* I1 w% F R {
) w; M" y% t3 e! x8 F3 }7 o% \% Linput clk ; //输入时钟50Mhz
4 c/ ]7 G& q3 b) |; N1 y: g4 Ginput rst_n; //复位信号
2 s$ W) S" l, |6 dinput sw1,sw2,sw3,sw4; //输入四个独立按键4 `$ f4 ~) U8 V
output rs; //1602数据命令选择端
W: Q& T K3 p# Doutput wr; //读写控制端
: B6 s( A$ w: E; D! Voutput lcden; //使能信号控制端
* m$ `$ A: Z" m0 joutput [7:0]data; //8位数据总线
8 E$ |' C8 O. Y J: @: G2 ?# F) {$ S, M, X
5 @' I5 R. p7 ] ]! l% S
reg rs,lcden;
) j, H- z3 X, L( m: g; B' Nreg [7:0]data;( E7 t8 _+ y# ]! n' Z. M
assign wr = 0;
6 O. M& Z9 z0 y& ~0 O$ L//---------------------------分频模块---------------------------8 ^; A/ K9 Y5 ?( ]
2 r" X# y. h6 S( ^& E9 Q3 Preg clkr;
7 n( }$ E8 i7 {+ [0 f) I) l' Wreg [17:0] cnt;+ X5 W2 M0 }: \' T; l6 q
always @ (posedge clk or negedge rst_n) begin //产生1602时钟
1 @1 E0 L: `+ f* `; n8 l% G; ^ if(!rst_n) begin 9 [+ q. T) [# h/ V% l9 @
cnt <= 18'd50000;
$ b2 a1 N& l2 Q U9 V clkr <= 0;
. j0 ^1 {1 R& m4 s* q end0 u+ r' C; X3 S
else if(cnt == 18'd50000) begin ! d+ ^8 ~1 W+ q2 O% \$ u/ `
clkr <= ~clkr; 6 w( K( p: T( p5 y6 f; K
cnt <= 18'd0;4 \+ A: S) p* ]" u% s. r
end
* q$ @$ K( A, }5 K- H9 ^' d else cnt<= cnt + 1'b1;7 d* d8 t- C/ U! f8 ^1 H
& F& ]/ w5 K1 Pend
8 P- ]1 M @$ s( m) E; w7 ~5 v6 f2 T! q6 A* o8 E' d7 U3 n- ?
//------------------------状态机控制液晶初始化模块--------------------------
! z: I( U3 B7 k: |' |2 Uparameter
- c# o' i) q: {; f* h; x s0 = 5'd0,
7 e3 j I, ]* \% U% F s1 = 5'd1,
1 |6 Y$ I( g, Q! z: Y& \$ \$ | s2 = 5'd2,9 D: \! M$ a0 w2 ~% l
s3 = 5'd3,
! M7 H% F, }5 D s4 = 5'd4,% r$ t* @4 Z) K
s5 = 5'd5,7 j0 \* y, [3 v% c
s6 = 5'd6,
" @2 q0 r* J6 e# O! I s7 = 5'd7,
7 i/ t+ n9 Z: M0 Z: U9 k" x s8 = 5'd8,
# `; I) F! A5 m6 A# q4 U s9 = 5'd9,
; k5 J3 b( f1 i$ J& h; ? s10 = 5'd10,
) a6 h- [% _$ g7 u' N' V# J. ~ s11 = 5'd11,
& s+ k" W/ A& q. y s12 = 5'd12,3 U; i1 t5 G0 F! Y k+ o: A& B
s13 = 5'd13,
; [8 R2 H1 [8 u2 |# e s14 = 5'd14,
: y* A, {7 \' [ s15 = 5'd15,
0 A4 l6 S. v' x s16 = 5'd16,* G" U7 e3 f* Z, h
s17 = 5'd17,
6 I0 v* S# _+ C& y# C s18 = 5'd18,
( Q" j7 W2 @, F& Y# @ s19 = 5'd19,
$ S" q1 C% ]1 `: w" I: {1 k s20 = 5'd20,
! _! g$ p9 V' k# L0 X8 R+ Q s21 = 5'd21,7 @- B7 p1 Q( a A1 b9 P5 z( x
s22 = 5'd22,. q/ D4 p7 O6 o& F% Q
s23 = 5'd23,
3 p# |' j# |. G8 m J, Z s24 = 5'd24,0 |/ X. _/ ~& g! ^% I
s25 = 5'd25,
% M+ l ~6 M, C# ` s26 = 5'd26;% z7 Y, e4 P9 ^! ?* V4 i! d. F
1 K+ a% S: l- p) { m% |
! T: w, a- l u# z5 Creg [4:0] state;" Q F' v. C( Y' Q
reg init_over; //液晶初始化完成标志位: i1 C! J% p+ C" \, r
+ Y+ S; {0 l8 |1 V5 w3 M% Y( `always @ (posedge clkr or negedge rst_n) begin
6 |$ F' B$ `, h, [( J if(!rst_n) begin //上电复位初始化 1 i, ^2 i$ ]) `
rs <= 1'b1;4 l- x! S5 R8 [: }
lcden <= 1'b0;
* u' I* M" e: `6 {2 u% P e data <= 8'd0;
, a2 E9 ?! ] M7 b5 \" P$ @ state <=4'd0;
$ @7 r* Z3 z" A
- S9 Q3 `1 Z. H4 p; z end
0 T3 M+ M* I/ r9 ~0 p 5 Q6 N- F( x0 P0 }3 x) r
else case (state): C% K6 B, m& C4 N: W' ~. p
s0 : begin * r1 w W' X1 m4 e
rs <= 0;6 m6 J8 R- ~/ |" }1 c; ]7 \8 E
lcden <= 0;
. e9 ~! K! G; C2 Y data <= 8'h38; //送数据,设置16 x 2显示,5 X 7点阵,8位数据接口
: v Z3 m# L+ ]8 x' T. x state <= s1;) F$ I3 [( m0 g8 a2 D3 }+ ~
end
8 a! [1 ?" ~6 y7 @6 R$ p s1: begin //数据有效" z1 [3 [ {1 T
lcden <= 1;
2 i$ M8 o; ]7 s8 Z, e+ |; w state <= s2;9 W1 |# [) O7 s& Z7 L' |8 ?2 m
end . h6 l% i8 h& |" X
s2 : begin
E6 M8 u4 b3 y lcden <= 0;
. c. ?5 b. z! @( [0 h9 W% ^' D data <= 8'h0c; // 开显示,显示光标,光标闪烁
0 a& A4 ?, P. D+ J' }. k state <= s3;5 D8 W* h6 r8 B8 V
end" b+ M7 R, a' B5 [/ v! k
s3 : begin , U4 _8 a1 C1 a& M
lcden <= 1;1 u! t0 L% ^, z& u; J3 @
state <= s4;
3 d6 J+ ]0 h" F# T end
9 \! ~. A) B; C% Y& @, k( a( u s4 : begin
1 k& s, [% H0 T* q4 a! N" W! s+ [ lcden <=0;# u( u/ C& b- d" l [+ K! N& k! h B
data <= 8'h06; // 写一个字符后地址指针加1' G3 R: N- ]; _5 q4 p
state <= s5;
- U% o9 j% R- b1 L end
' N' B7 k: ?7 y, o; r s5 : begin 7 Q: D1 g' h0 R; X8 J+ F
lcden <= 1;/ t2 v; I# H) L
state <= s6;
4 a' W- ]) s( G B8 T1 c end
/ @# o" A$ V2 ? [9 U- M. G s6 : begin 7 z% Z1 s4 [* ^8 M/ J0 v: a
lcden <= 0;
- E( ^" P! z" D6 z data <= 8'h01; // 显示清0,数据指针清08 ?! s. O; [4 [9 M$ Y9 C4 k# a* C
state <= s7;7 M, Y4 G' n7 Q7 V+ i! m
end3 H! B- @9 d- Z, L) @' G
s7 : begin 4 I4 T' o" w/ b1 z8 g# N. c7 G
lcden <= 1; % p9 q; ~3 ]! K% O
state <= s8;
0 k0 F) j0 T. j' x init_over <=1; //初始化结束标志位
7 r8 a8 n, O% X end
3 \7 M F) |. {, K' s6 g//---------------------------------1602初始化结束-----------------------------
* L; l) i9 K* i s8 : begin + N5 g. T3 r% X& P7 \
lcden <= 0;
5 D9 ^' [4 X) @3 o1 K% d9 Y# | data <= 8'h84;
" B& \, X; Q* n$ P" A state <= s9;
; }; D; I5 F2 a3 z) B end
" E3 y1 R3 r3 r' i. S- a s9 : begin + k# e9 ^9 ~9 }5 M
lcden <= 1;
0 l! k Q2 l7 F/ p+ n state <= s10;
( o, c! |" ~5 o3 H" N
! ?* H& S! ~2 f end3 M: ]" C4 J1 f6 j
6 {& L9 T* P! i* \9 r1 C3 D( r
7 t& j" s1 Y8 e: L7 k( t s10 : begin
3 x' [, E( n* ~; n, I' p rs <= 1; //改为写数据状态
" J% q% v' ~) u+ s3 Z6 r5 g lcden <= 0;# _6 m/ ]1 Q U* [, L$ D& ?
data <= shi_s+8'h30; //写小时的十位/ a6 e6 W* H' k$ h2 x3 J+ j
state <= s11;0 T9 [. g/ L5 r
end
7 V# k" r! S& X# ]( c$ s. ?7 C s11 : begin
7 ?+ p# O' g! s* [0 f5 d" d+ Y5 N lcden <= 1;
H+ ^" O8 Z( j3 R$ k3 p: b. y state <= s12;) G3 z) J2 |: [! z; c4 C
end
$ \4 w) {- Z3 s6 O. s- E s12 : begin 4 d" R+ |* G+ w) ~
lcden <=0;
' S. j' y) @5 v3 S% u0 i data <= shi_g+8'h30; //写小时的个位! U5 q- {3 W. e$ i7 p& I
state <= s13;9 M" k4 G. y7 K& S0 o' ?1 k* i. ^
end2 a% Y5 y4 }( e2 t0 K
s13 : begin 9 H$ U' {. _2 Z% d$ G
lcden <= 1;
$ h0 C: }/ ]' m3 n, J/ u% Y% C3 ?8 g state <= s14;
! K0 \! ^& y8 F8 d/ I end2 x' X" d, ^5 p8 Z6 C
s14 : begin
/ _6 E+ R% U7 {. e% P( F" g* ^ lcden <= 0;" C" Q8 l, B$ Q) @$ G& l
data <= ":"; //写冒号
. m% K) u, {3 H' e) u! | state <= s15;
* @6 s0 `5 W1 J! n2 w, I
/ D% D1 A/ d6 ?8 u end
9 g1 p+ _) O3 C% L s15 : begin ; h8 U! }" z8 E% J& |0 o% Z
lcden <= 1;) @% ^& ]1 v3 Q7 f
state <= s16;
. [2 W, l2 Y8 i, ~ end 8 f5 u# q U" g7 V
) B6 A3 \9 ~" y6 S) E s16 : begin 4 ~0 C: \9 D% _$ S# x* A' t
lcden <= 0;5 K' q3 j6 X& z& P" v% N* h7 g
data <= fen_s+8'h30; //写分钟的十位! F$ C' N: s+ y. H" t
state <= s17;
2 f3 d9 z f6 ` Z2 u% m! ] end: y- h7 ?) a8 K* u/ h5 q. s
s17 : begin
, x* Q4 V7 N1 m" o1 ~" n% Z lcden <= 1;
6 T9 r- z$ G* G# y5 B, [7 K2 M state <= s18;
* w) }+ ?9 h4 K( m4 N: A end! R( O# O" H2 _" l: f
s18 : begin # n ^9 G$ ]- v; z2 X7 j3 H
lcden <= 0;( A5 K* [# _4 I6 ?* A
data <= fen_g+ 8'h30; //写分钟的个位& {/ T& F3 L! z% E* W
state <= s19;
% p* C/ W, T: `4 V; A- x end
D* h+ A3 ?5 L( ^ s19 : begin 4 e9 M) U# a, y! y/ j" ?- W
lcden <= 1;$ ] M- r( m" R
state <= s20;9 ~9 c* ?8 e. ]3 ]( N9 {
end; @/ I! X m) I E2 V
s20 : begin " I' s0 \0 l* b
lcden <= 0;# `+ t9 Y, A- W* C7 X* F0 n7 H' H, V
data <= ":"; //写冒号1 M" y8 e' K" I; i0 _
state <= s21;
, p& N$ g! O4 o: _ end
0 g5 q7 f8 H7 @4 j3 N6 \" e8 [: Q s21 : begin
. Z' ]0 M w6 Z. _; Y" J* V; w lcden <= 1;
; ?2 r5 R8 P: |: I$ y; B* E4 V- c state <= s22;+ N; S/ T9 n G( q- [# c# @
end# y9 m8 [5 w8 T) a; ~
s22 : begin & E5 J/ S- m( D1 ?+ V! v G
lcden <= 0;
y# ?0 P/ q- B1 y$ c/ g# [+ D data <= miao_s+ 8'h30; //写秒钟的十位
# }5 ^7 O1 R1 A state <= s23;/ t6 m6 ^2 N) P5 u0 d: W& a# V
end
- E- V$ o* |2 B: H( O9 |3 B$ [ s23 : begin
4 E& `5 W( o& z4 B3 Z2 |6 ]( I$ ? lcden <= 1;
. I# _1 @) L: l5 l state <= s24;
! f, z) X' z5 m end
& ]1 C. r3 g- \5 Z5 A# @ s24 : begin # X: p8 o; \2 [' l! n) I
lcden <= 0;) Q( k0 O+ M: D
data<= miao_g + 8'h30; //写秒钟的个位: g8 S/ U! v/ G1 U: a
state <= s25;
3 V' o9 h6 F5 Z: S/ G end
" f% i3 o0 W Y& J* R s25 : begin " b* o( Y" z& V. j6 q [& g
lcden <= 1;
( e$ D4 G2 u4 p state <= s26;& E5 w5 V" G" f0 o2 g
7 I2 t! h5 I. k8 Q- s end
* V2 f$ d5 p* u9 E s26 : begin
/ E, \' [" r; @) D lcden <= 0;
( h4 u. i4 x5 S state <= s8; //回到写起始地址的状态,来回刷新* J0 p7 i4 v! {6 E$ v
rs <= 0;
7 t# J# H% Z* C( `* T2 Z$ { end
* F7 n V9 i% _6 ` default : begin
2 @' _$ ^! M V+ ?) N$ p. \) z rs <= 1'b1;
" f9 _# d; V) }8 P lcden <= 1'b0;: t3 R" l6 l+ Z. d
data <= 8'd0;1 @; G Y, C7 l/ z
state <= 0;/ S7 a0 X2 _* g; _/ x/ Y8 X4 q5 M
end
4 J# p: s1 Y4 I0 ?2 y9 n8 D, ? I: O
endcase
) U, V& A, N6 v* i1 D& @6 T) i, Eend1 P9 S$ s5 i1 X, N. m: [6 y. K1 s
/ F6 w6 x3 m+ k* ?0 R0 i% \& a) h! U! b//-------------------------------时分秒产生模块---------------------------------
9 ?/ M7 H* p7 @: l% H' @' K$ e+ r/ v3 ]7 ?
reg [5:0] shi;& f1 }+ O# {6 Q8 @3 N2 t
reg [5:0] fen;* x6 ], {3 I: f) f5 ~6 I9 P8 F
reg [5:0] miao;3 z. b, [9 W( ?+ l8 J
reg [25:0] cntr; // 产生1秒钟的时钟,要计数到50_000_000;
9 a$ X9 R( |' _! Valways @ (posedge clk or negedge rst_n)begin + |% I: j s9 V6 y1 _
if(!rst_n) begin 0 q6 i( ^3 p( k' S9 q; U8 D. p
shi <= 6'd18; //设置初始时间
) S8 S7 g) s3 k4 L4 w/ [9 J) h( y/ e Q fen<= 6'd22;+ R/ L0 G6 j6 j' z3 U
miao <= 6'd36;3 `! n( f: ] l o
cntr <= 26'd0;
# c- f& {4 ^( }! t6 k( _ end/ U( i1 j9 s5 N3 @0 R" N
else if(init_over ==1'b1 && flag ==1'b1)begin
$ O- }* K0 S3 z% ~, r if(cntr == 26'd50000000) begin ' y+ {2 G* G1 B. C* _; u) s
cntr <= 26'd0;9 Z' b" i' G8 \0 `( Q' n" Q* ?
miao <= miao + 1'b1;8 r, b7 e h( z1 Z3 N
if(miao == 6'd59) begin
8 @% q' \, m m1 Q0 F+ c miao <= 6'd0;% t1 u: ?* e6 e; i& s
fen <= fen +1'b1; k' C8 O1 l+ e8 L( D8 c/ g/ N
if(fen == 6'd59)begin , ?# W9 _% |1 `' A
fen <= 6'd0;
9 l3 l) h. P/ ` shi <= shi +1'b1;
9 p. O% j, H- U& t+ C1 w7 c* c if(shi == 6'd23)0 S( P' e) o2 h/ g
shi <= 6'd0;
% P, s: d/ ]1 _5 `1 k$ R: t% T end
0 G& G/ H7 ^7 f) L% C* }, M end9 s0 m: ?* w. e$ [
1 u4 q6 e, p0 g
end
! }6 M+ `+ V, ?/ \. Y; g else cntr <= cntr+1'b1; 2 h; t; n( r3 g' O' B
end
) J5 k4 m7 C( B9 H7 {
! K6 p6 p, c4 o5 b8 i% k1 i- r; H else if(key_state == 4'b1000) begin
7 [2 P X- ^7 L8 t miao <= miao + 1'b1; //如果键1按下,那么调整秒针- o7 D5 n' Y1 {, B
if(miao == 6'd59) miao <= 6'd0;
5 J4 T( J4 } r+ U B end
3 H+ n3 U7 L; E+ ^ n else if(key_state == 4'b0100) begin 6 J4 L6 \7 _) f) y6 t
fen <= fen +1'b1; //如果键2按下,那么调整分针
) b6 W' P9 [! L if(fen == 6'd59) fen <= 6'd0;2 A+ r2 x$ i& h3 ?. z
end
6 \; w% h: c! G$ I else if(key_state == 4'b0010) begin / a+ K, y. v9 s$ L3 `( r
shi <= shi +1'b1; //如果键3按下,那么调整时针
5 }7 s) ]1 I. r9 N4 [# J2 e! D if(shi == 6'd23) shi <= 6'd0;
0 z4 d1 K; x7 K6 s* L# }$ ? end
- q9 u3 n0 o/ s( [4 \
$ @7 q0 S3 }3 |. R. h" D2 F% z
- r- W* M/ p P; H' o- aend
5 u( J3 M" ^& R- H% Z. t4 o/ Y7 o% ]1 e, m+ d3 i) X( s2 W
//--------------------------------时分秒处理模块----------------------------4 X1 [# B2 h+ u+ R& V* B( f
4 v' A/ S3 |* @. ^- h
wire [3:0]miao_s;
! n- y5 F% Q% ~. ^, _wire [3:0]miao_g;
0 j8 V8 y# Z+ L) T S; |$ F A
9 W& ]$ d" B" W3 ^; z7 wwire [3:0]fen_s;
' U( D3 o0 b& l$ L5 }6 h/ fwire [3:0]fen_g;
1 G2 k/ i$ o, k: r9 D5 V1 R* Q& \
wire [3:0] shi_s;. J- d$ B% A; f8 F1 C, J
wire [3:0] shi_g;7 |8 J. S7 ^: F3 M. f: k( w) h
( ?2 y5 F9 N8 \//对时分秒进行求模求余运算
9 G9 n* f3 d9 u- o E6 W+ W4 Vassign miao_s = miao /10;
* m& V8 M# w+ X: u1 Massign miao_g = miao %10;
) e5 _& H$ L; a5 Yassign fen_s = fen /10;
( ~# o. G6 H, ` nassign fen_g = fen %10;
( w; ^# k, {0 v# A& E% oassign shi_s = shi /10;
8 O4 F9 v* u5 b+ S) D9 Oassign shi_g = shi %10;
; T6 R o8 R' t/ v, W: j* J W |9 N- E, S
//-----------------------------按键消抖部分----------------------------------: c( I) n* I* d
reg [3:0]key_rst;
" R1 M/ K/ }6 v& M+ L
& s) l5 B4 l* w4 Oalways @ (posedge clk or negedge rst_n) begin ' I5 n& R) h/ R$ r: g( M8 H
if(!rst_n) key_rst <= 4'b1111;2 r; ~5 ~3 _. q% L1 T$ e' I `: {
else key_rst <= {sw4,sw3,sw2,sw1}; //将按键状态送给第一级锁存器锁存 O4 B3 d5 S- Y/ W
end
: o- X9 r0 c R( [; l3 t W0 J# ~! M* g7 P: u
reg [3:0] key_rst_r; //定义二级锁存器
0 h# P: ~9 @$ w: W: h' f% e) Y1 {2 u* V
always @(posedge clk or negedge rst_n) begin
" {" V6 g9 z2 v, r- A/ u ?" r# z2 v if(!rst_n) key_rst_r <= 4'b1111;' L& r0 V4 B4 J. ^
else key_rst_r <= key_rst; //送第二级锁存器7 n9 \5 L2 e w! Y* I- R! \ R$ n
end
' Q, i h/ Z& u- ~! S7 e# U8 b
$ G2 @' h- c4 G, o: }& {9 Bwire key_an; //抖动标志位
* v0 l9 r9 n& o; Yassign key_an = key_rst_r & (~key_rst); //边沿检测算法7 a3 R: ?: A; I( a* B
2 d% o2 s: N6 I
reg [17:0] cnt_k;
! u( m Z6 c- z
$ t" C$ w4 W' o4 J- jalways @ (posedge clk or negedge rst_n) begin 6 |0 Z0 R- ]) h' K _/ s
if(!rst_n) cnt_k <= 18'd0;
' J. i3 r5 m# o; s- n7 l P else if(key_an) cnt_k <= 18'd0; //一旦有抖动,计数器马上清零4 Q, R" C* l# ~; `
else cnt_k <= cnt_k +1'b1;
/ l7 b' \0 @# } \# A; i+ m* {end3 F8 y$ Y/ q9 j2 K
8 u8 o3 l/ Q$ X1 P9 a) u9 k
reg [3:0] key; _' ] Z) I4 Y7 X) ?) T( s
always @ (posedge clk or negedge rst_n) begin e9 c& p+ S- @1 j0 M
if(!rst_n) key <= 4'b1111;% J* z$ W! T: w- R5 ?2 n
else if(cnt_k == 18'd250000) // 等待5ms,再记录按键状态4 K/ C) D+ r, v. A; M, o! C! u2 k
key <= {sw4,sw3,sw2,sw1};( |; H; L1 R8 Z9 E8 |9 x/ I
end
1 c; W1 }4 D t" n# a& P
+ {( I' R+ }9 H$ t* L4 T9 m" oreg [3:0]key_r;" R$ s6 M% Q( w3 d/ g. H7 D, ~
' z9 w7 x" g$ m+ `4 X$ D
always @ (posedge clk or negedge rst_n) begin
& X5 B# M) n4 p9 b if(!rst_n) key_r <= 4'b1111;; x* d3 [, r- o) \2 O/ V6 g$ x
else key_r <= key; //送到二级锁存器
$ \5 P; q8 V4 n) ~9 kend' I" n9 b( h$ ]" e' ]' {! X+ r' B2 K
0 a8 ^* [ p. m0 E7 h
wire [3:0] key_state = key_r& (~key); //边沿检测算法" r2 e- y3 [; J9 G. ?
: z" Z$ v0 V5 L6 o! K$ T0 f//--------------------------时钟暂停----------------------------
, m* G9 N( w( h: H: [7 S$ Yreg flag;
- N- g; W5 o* s3 B9 T/ p' @7 F: Z8 q8 V' g+ X, Z
always @ (posedge clk or negedge rst_n) begin
% l, g$ f- Q: d1 \ G if(!rst_n) flag <= 1'b1;5 Q, H3 a! `& \
else if(key_state == 3'b0001) // 如果键4按下,那么时钟暂停7 X0 N' x' k" m1 t; o" Q9 h
flag <= ~flag;
+ L$ O/ I' i# ~6 y ! H* r" ~ `; Y* V# D1 t9 F
end4 b* E$ j6 a3 D* i8 E) D2 N7 p' x9 D
+ p B3 m3 C5 ?( {; s6 S" D, ^3 ~2 bendmodule
( j2 {2 }9 v/ X! \: p |
|