Chip123 科技應用創新平台
標題:
請問倒數00就停怎寫?
[打印本頁]
作者:
hope1014
時間:
2008-11-26 06:56 PM
標題:
請問倒數00就停怎寫?
LIBRARY ieee;
" N7 e( [) D8 b6 c9 z, g8 B, ^; ]
USE ieee.std_logic_1164.all;
7 w- K( x& A, _% f
USE ieee.std_logic_unsigned.all;
' l F, d/ f7 d' f+ l& z# A
ENTITY counter_backwards60_seg2 IS
1 s5 U- w! `, |2 H9 V7 ^2 H6 S; Q
PORT(Clrn,Load,Ena,Clk : IN STD_LOGIC;
5 [! n( f: @4 b
Ring : OUT STD_LOGIC;
Y8 o" K4 P/ G
Q0,Q1 : OUT STD_LOGIC_VECTOR(3 downto 0)) ;
8 X$ Y3 r6 {' X4 Y7 `9 H7 }, ], m# Y
END counter_backwards60_seg2;
/ {% O7 a# J% P- t2 v5 ?
ARCHITECTURE arc OF counter_backwards60_seg2 IS
c% ~( F: b u7 ?* F2 E
BEGIN
- Q1 c5 B% E# ~" h: ?0 ?, G
PROCESS (Clk)
4 W0 y4 O3 V4 ^$ P) Z
VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
5 N8 h; Q: ~ ^
VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
2 R4 F7 @! @; k, S. z6 [
BEGIN
9 M) c6 {. }& @& s
IF Clrn='0' THEN imper1 := "0110"; imper0 := "0000";
4 V, ^+ U1 i& ^2 R: d2 y" j. i
ELSE IF (Clk'event AND Clk='1') THEN
, }0 `) k. S5 V) i) N
IF Load='0' THEN imper1:="0110"; imper0:="0000";
: ?* }0 C, n3 d2 w5 a# j) Y
ELSIF Ena='1' THEN
4 H" s2 g/ c. N6 X/ q/ l
IF (imper0="1001" AND imper1="0101")THEN
" D1 D! z H4 N7 ~' k( O) u7 g
imper0 :="1000";
" e% }4 X/ B& t$ P0 Q
ELSIF imper0 >"0000" THEN imper0 := imper0-1;
6 Z. W, Z' F) y) o$ `# H3 }
ELSE imper0:="1001";
! t x) U; w7 s+ \" Y2 _8 b
IF imper1 >"0000" THEN imper1 := imper1-1;
2 z: [0 R6 l, L2 k
ELSE imper1:="0101";
$ B& A- ^1 e- K) j/ U
END IF;
: z i+ P2 ~5 Y- U
END IF;
4 L9 W3 ~* p+ I
END IF;
; U& s8 m7 Q; m$ ]7 K7 Q+ M7 m% }1 Q1 V7 k
END IF;
9 k+ N7 U+ A* P( |
END IF;
0 c* H2 z; m* P. b! X0 U
Q0 <= imper0; Q1 <= imper1;
) [. L7 Z) Y- a% n; W3 |
Ring <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));
4 [3 ?$ x) e$ J: M* ~
END PROCESS ;
3 L r5 U2 x: `& `
END arc;
& s6 d) A6 {/ O: U3 P2 z
& p" G$ J3 t$ p8 u
上面是我的倒數60秒程式
% f( |1 b' W0 H( n
小弟不才
! p* Z9 s& O. f8 Z, ]4 `# y+ A
不知道怎寫停止
9 T1 C0 `7 N% [4 T" v3 i
只要數1次60就好
作者:
spring69393
時間:
2008-11-27 09:37 PM
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
$ u! V6 x4 K, u2 P+ n5 J- B4 J1 e
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
) r) i) N/ B$ w( m8 F% D! H5 T: B) I, M
除非你有什用途 ,不然就這樣就好了。
作者:
hope1014
時間:
2008-11-28 05:05 PM
我是使用QuartusII
' ?" M* p( K1 K+ D4 ~1 P2 h
跑一次的宣告是要放哪一行...?
9 i5 E, ?# T! Y: X
還有一個問題想請教
; m! W( i: [* s+ o# ~* }
就是counter_backwards60_seg2是我的分鐘
$ R; t/ _0 N! P8 D- F5 }$ `- m0 H
counter_backwards60_seg是我的秒
- e+ ]9 w9 G* J! _) C& Y- {
現在就是秒那邊 10→9秒的時候Co也會進位
: w1 t ~ {' o) d! h
秒的個位數有延遲 所以導致10→9秒的Co會進位
) R3 ]& F& @% K. q5 K& @' E
程式分跟秒是依樣的 (Ring就是Co)
1 B: K, K: h- V3 }; {
另外 分鐘怎從60開始
: F4 r/ @9 e6 e
因為現在我是00:00開始倒數
4 q' j4 A5 A5 ^- |7 w) B
我需要在counter_backwards60_seg2改哪邊?
, t1 V/ @8 C, l: C
" W% Y$ P$ H0 g& |8 Q( [/ r5 [: M N
# k1 C% ?' F& [
我奇摩即時通:xt_9000
4 k+ O0 ]" s+ [
希望有好心人幫幫忙
3 g' T* ~& A( H2 S
懵懂無知的大學生
作者:
spring69393
時間:
2008-11-30 01:13 AM
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
3 k' z/ a( F9 f
看有沒有用可以參考一下。
作者:
hope1014
時間:
2008-12-5 05:10 PM
感謝大大的回答
2 s/ W. ]; n d1 o& A, N" N
我想問說
/ e4 F$ q8 C1 ?, B9 V8 |) C- {( y+ t
怎從"60"開始倒數?
" k& B2 `! m3 u
60→59→58→57....→00
, W- @: |, m5 ?( ?2 o1 _8 _$ C
因為我弄出來都是
- J1 d& F' t& W! d: ^9 L9 B: ]
00→59→58→57....→00
' e8 d q0 Q& r: R
d! d9 \$ @+ b/ i
+ G! t6 ~+ o2 A) H, _# Q2 v) X
希望有高手解一下疑惑
作者:
spring69393
時間:
2008-12-6 03:06 AM
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
/ i3 g; [% r3 A6 Z, c9 p+ @( T
8 N$ g; \! I( k/ [5 ?" Z
不過時鐘的話應該是給59才對,沒有從60在數回來的。
作者:
hope1014
時間:
2008-12-6 08:22 PM
沒有啦
, J# E0 a* x7 t- o% {( o2 w7 D
因為我要做60分鐘倒數
+ N$ w/ y2 ]* _8 b1 M% K
所以要60:00 →59:59→59:58
m- R. W4 g2 u) [
我現在是00:00→59:59 @@"
作者:
spring69393
時間:
2008-12-7 03:58 PM
if reset<='0' then
, ~3 @6 M) `; |) X) w) e
timer<=(others=>'0'); <<< 改這 60 00
作者:
hope1014
時間:
2008-12-7 07:00 PM
我沒有設定res啊@@"
X: y$ q/ v5 S$ L
我是用Quartus II 電路圖接法
8 b# j3 y B) k {
60:00(現在是00:00) →59:59→59:58
7 x: {* i. b9 l- O
: W4 i; n9 y) M7 o7 F
IF Clrn='0' 或者 IF Load='0' 就停止動作了啊@@
: P ~9 {( ~1 T1 S: R' ^* T; `; g
小弟比較笨拙~"~
作者:
hope1014
時間:
2008-12-8 01:00 AM
LIBRARY ieee;
# ~0 f' Q( o5 i# d( z7 |# Z* V( @
USE ieee.std_logic_1164.all;
: @6 f5 z" l" O+ d$ M2 d
USE ieee.std_logic_unsigned.all;
6 l/ o, v T& M) M3 e
ENTITY counter_backwards60_seg2 IS
. K9 M# y4 x+ ?4 X% Y3 |, J
PORT(Clk : IN STD_LOGIC;
# F: v" y) e+ t6 h1 D
Q0,Q1 : OUT STD_LOGIC_VECTOR(3 downto 0)) ;
5 d+ b+ F1 g8 S4 Z7 Z( u
END counter_backwards60_seg2;
8 x( b% f, i, @( t% `
ARCHITECTURE arc OF counter_backwards60_seg2 IS
( Z6 M9 b' u" Q
BEGIN
' y* r b+ ^3 u5 N- B4 u
PROCESS (Clk)
) p4 o" a& m5 n7 _4 o
VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
* A4 `) a3 e* s4 S/ t
VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
( E; b5 X8 o7 z( H6 E
BEGIN
- e8 f$ M# F7 c' G) }7 Q
# \& T% F( T4 a, E
IF (Clk'event AND Clk='1') THEN
. q+ `0 A5 O( I5 N9 I, ?
; n& J& `' |4 \+ Y
IF imper0 >"0000" THEN imper0 := imper0-1;
5 j0 z m% P% ^8 A
ELSE imper0:="1001";
& W5 B8 H; P+ M
IF imper1 >"0000" THEN imper1 := imper1-1;
! H# e4 d1 H0 o9 G
ELSE imper1:="0101";
/ ?" J1 ~: F- N1 R$ v7 x
END IF;
/ q% h- @ S7 \% d
END IF;
5 f2 p. U8 K, T3 N, `' G
END IF;
6 r3 f' u0 C! m3 G( {: Z
Q0 <= imper0; Q1 <= imper1;
, Y9 {1 A' `/ d9 S$ s2 y
END PROCESS ;
* W e# z) C. K# i- z! h
END arc;
/ ` R* X' i/ w L1 i, q6 Q; m
以上我精簡了一些 也能跑模擬圖
" V1 C l t1 ~: W9 T4 p
但現在重點是我該怎寫60→59→58...
/ t- F( |$ y5 ~4 E7 R
初始值60要怎寫...
4 s" e' {$ k5 Q; m
是要多2個input 然後給他一開始的值?
/ h9 h& p5 n+ a$ p7 _# Z
但要怎寫啊@@...
) C4 m. c4 J: ]- }% S
作者:
hope1014
時間:
2008-12-8 09:32 PM
以上問題已經解決@@"
) d5 O( r( L( @( c6 F* C9 o$ D
但請問 我需要一個另外程式
* f7 y9 H! z1 n
去控制暫停開始和暫停
/ n+ }: ?2 @* J, f/ x& c, F" Q: r
LIBRARY ieee;
$ u! N' b7 E% x ]
USE ieee.std_logic_1164.all;
g0 i& @ |: u
USE ieee.std_logic_unsigned.all;
9 j1 J6 S; Z; q0 u' U
ENTITY debounce_v IS
; Y3 ^' g9 z7 l' p0 w1 L
PORT(CLK,PB : IN STD_LOGIC;
3 a% {. B) q3 [# m
PULSE : OUT STD_LOGIC
' S- W5 E3 {- m, `
);
4 O. d1 p2 p* ^- g1 r _
END debounce_v;
( L Z& Q1 q6 Z+ W7 T: U% y
ARCHITECTURE arc OF debounce_v IS
4 ~' n6 u; {, M6 K
SIGNAL imper : STD_LOGIC;
5 e, r6 F* R- \: p
BEGIN
$ k6 `( V1 \/ ]* h
PROCESS (CLK)
" f' T1 R- c/ P
VARIABLE counter : integer range 0 to 49;
$ w2 h2 T! [0 i% c/ Y- k! b
BEGIN
/ i) z9 E. i% ^* W; r
IF (CLK'event AND CLK='1') THEN
) p- L2 N6 d, H
IF counter = "1" and (PB = '1') THEN imper <= '1';
% `/ m& ]" ~, f
ELSE counter := counter-1; imper <= '0';
l: D7 u7 Y; p
END IF;
& k! K# I: t! I$ G" J( I* z$ o
END IF;
- m, P* L% w. R3 m0 w8 d: I
PULSE <= imper;
# u7 u8 s" j& g# Z8 }
END PROCESS ;
3 I# \# b1 T+ j+ m
END arc;
7 V# `- i" Z2 W$ o' j$ \
6 `7 l! I/ P: R9 s3 X- o
這是按一次減一次
& L1 d! l$ g; S! p% U x$ c
想要按一下開始 按一下暫停
( Q! Q7 q3 T, l7 N
$ q+ J& [+ W- t2 T0 c
ps.轉自全華圖書
作者:
spring69393
時間:
2008-12-9 09:39 AM
Quartus II 電路圖接法 我不會也,程式寫法就懂。
* Q: ^9 p8 z* \' O5 @# C
+ _+ q: q! A' }5 c
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
作者:
hope1014
時間:
2008-12-11 08:38 PM
@@"
: ^, Y' ]0 A# X8 ^4 k6 H
有需要暫存器??
% R. ?" W8 P4 }3 y8 p
那是震盪器→先接到開關→接到暫存器→計數器
1 K c9 G5 f3 I* w
這是樣嗎?
作者:
hope1014
時間:
2008-12-12 10:23 PM
PROCESS (CLK)
! I. W( n( c( y# m% ]
VARIABLE counter : integer range 0 to 49;
+ H, V9 v) {! P1 d0 w
BEGIN
. I2 `* ?5 K& [ a4 D
IF (CLK'event AND CLK='1') THEN
) q! Q/ ^# r" I; K
IF counter = "1" and (PB = '1') THEN imper <= '1';
3 D! R! p _: Y) d9 E
ELSE counter := counter-1; imper <= '0';
% s' j: o2 Z# L8 D1 l
END IF;
# \8 [& W. V+ s! d
能幫我解釋一下這幾行是什麼意思嗎?
作者:
spring69393
時間:
2008-12-14 09:56 PM
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
9 {7 C" _ {9 @# z% C/ k0 n' @9 z
VARIABLE counter : integer range 0 to 49; -- 把counter設成 0 到49 的整數
& k! k6 }& F6 a: K w, }
BEGIN
& _) y" p1 y& p6 x
IF (CLK'event AND CLK='1') THEN -- 如果clk 正緣觸發
. g; T4 F. L& p. C
IF counter = "1" and (PB = '1') THEN imper <= '1';
( u0 m# t, c- E/ B; n" h
-- 如果counter = "1" 和 (PB = '1')就把 imper設為1
* W5 K$ O( V: G3 t& G& {
3 [- y# J; y1 v7 H( v! v" M
ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
. v& ^7 R! E; Z1 v9 C t) R
END IF;
作者:
hope1014
時間:
2008-12-18 07:44 PM
spring69393 大大感謝您
& t q9 J- o, l9 d3 `
! [- }; ~: A0 X( A
按鍵開關 第一次 on時,開始計時。
; m. W) M, n# l2 G/ A' `7 E: |' b* f
第二次 on時,停止計時。
9 s; z7 q* g0 V
第三次 on時,開始計時。
' ^ R( e/ Y+ l0 q# Y7 G
& @. ` I) J, B
這有哪位大大能幫忙@@
作者:
spring69393
時間:
2008-12-21 12:53 PM
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
作者:
hope1014
時間:
2008-12-22 09:21 PM
是移位暫存器嗎?
: a- k3 ~9 s. n4 J% k
平行輸入 / 平行輸出
- K* Q6 }, B7 L9 F2 L. m" w$ s7 b1 K
平行輸入 / 串列輸出
% K3 Z2 i& p% I) _, ?
串列輸入 / 平行輸出
* j5 l1 P% s$ L1 [2 p, n
串列輸入 / 串列輸出
# p0 r: P2 [& s! M9 t0 j
哪一個啊@@...
& \( G! H, N# H% t* }. z) p& M
我都是看書自己學
* \/ ^3 U) @" H+ E2 D
所以都不會咩
1 N5 n: w+ D0 E5 O; a1 [
拜託 幫幫忙
作者:
hope1014
時間:
2008-12-24 08:18 PM
真的有要用到暫存器?!
+ H9 C4 Q8 \: _- P
今天問老師
8 J6 h7 n# @" T& f. E
可是老師沒說到暫存器的東西
8 r. w) j4 T, B( R/ d. l7 | K' p
反而是說
7 `! b4 r( t8 {3 R+ v; l
IF CLK'event AND CLK='1
, d" ^; c4 J/ b& c# J( K8 X, y
counter := counter + 1 ;
1 g/ o: q- u& ^- {2 ]7 ~
; p* b% j( B2 {
抓counter (0) ----第一個腳位?!
. h/ N( C. {) B* T" V
給counter位元多一點之類的
% d8 E9 n/ z& R7 b" p0 j
' s& ?* m! Z) G$ y$ p
00 01 10 11
/ C. F( p; A4 r
最後腳位為0 ----Run
$ [$ e5 Y8 n) A3 a
最後腳位為1 ----Stop
( X, h! a# h. B5 A
% f2 X9 o! B3 F1 {& s- @
可是要怎弄勒@@
作者:
spring69393
時間:
2008-12-25 08:12 PM
你說的是自動變速,跟你的要求的開關功能根本不一樣。
% R8 @* W% W) }0 D2 X% F/ y8 b
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
& X9 L/ ~& ^0 a, ~/ l! |
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
& f i$ O3 F$ o6 |; Q, O
難解了!
作者:
ssejack1
時間:
2008-12-26 09:37 AM
Key function
# t% O) d. ]! x# a& l$ ]
按鍵開關 第一次 on時,開始計時。
* t0 |8 `6 G/ f+ j1 i1 ?% Z6 \
第二次 on時,停止計時。
3 w6 ?' M. f0 @ e) A6 h" X
第三次 on時,開始計時。
: L/ N( D, A1 `) R* L& k4 g
未 synthesis,請自行 debug........
' v: p$ t& R: y' x1 y: I' ~
& D o4 t+ y ~* d
LIBRARY ieee;
: k! b+ T; {* I( F
USE ieee.std_logic_1164.all;
: t* O% ~0 }9 y4 c, ~7 v
USE ieee.std_logic_unsigned.all;
" L9 U* l6 ]3 U% Q/ `2 }8 C
ENTITY KeyFunction IS
, m! U2 D f8 j1 `; `4 r
PORT(CLK,
/ c- ~! U1 [- d3 Y& O3 L+ z. D
PB,
% m9 r5 u5 R! P7 U
RSTn : IN STD_LOGIC;
! ~3 @3 r. A5 h; J, j# A# U3 Y# L
START_COUNT,
- X7 q3 t7 r" O1 H0 s1 x2 ?# ]
PAUSE
1 a1 {& }4 x) T7 T# E/ h8 K
: OUT STD_LOGIC
7 u' a9 x5 D' a* \' j e& \. p
);
' `+ _8 G% c& k4 }5 O& Y
END KeyFunction;
0 Y& Y* Q- W! s, J
ARCHITECTURE arc OF debounce_v IS
N9 z F2 \& a4 i
SIGNAL currently_state : STD_LOGIC_VECTOR(2 downto 0);
8 f) `7 O1 p7 ]) E6 M4 L* G
signal pb_reg,debounce_counting,debounce_end : std_logic;
0 `; e$ D& f( [& X5 Y- Q
signal debounce_counter : STD_LOGIC_VECTOR(15 downto 0);
5 S0 ]7 y) E7 ^ G
' t6 B' `! f6 J* x* b. e" z
constant debounce_time : STD_LOGIC_VECTOR(15 downto 0):= "0000000000000000";
; J) e% d% L, `. U7 u* F: Y
BEGIN
3 F: Y: W! u! X" {9 P
, [+ f y* v: F$ |% `
--============================================================
% E6 Q S! e* \# Z$ R& G" u! b
-- get key push state. ( active high)
* n7 J; G% p) f1 h
--============================================================
$ V$ t& c" I+ P( j' V% p
PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)
# `$ I; i. @0 p3 K0 o7 t/ W
BEGIN
" K' a3 ~" G; V- [
if( RSTn = '0') then
- }9 m4 u; S- r- C
pb_reg <= 1;
* D6 B& ~: K3 J. {7 z; i5 i+ D' J, @
elsif( CLK 'event and CLK ='1')then
6 Q7 R5 g6 z3 h' c# B0 V
if( PB='1' and pb_reg ='0')then
$ q" I. F5 }8 |7 Y
debounce_counting <= '1';
; a; K- b# V( ~6 F; L
elsif( debounce_end = '1')then
# K, g( j, ]1 j
debounce_counting <= '0';
' B$ e; `; J" `$ R7 D- M
else
* U3 S0 i0 L$ b9 b
debounce_counting <= debounce_counting;
2 y+ d3 s6 W/ s
end if;
9 H1 }. r) s/ r
pb_reg <= PB;
% I9 Q9 }7 [2 D. `1 v
end if;
作者:
ssejack1
時間:
2008-12-26 09:38 AM
--============================================================
4 w' s4 F0 L" P4 `' B5 y
-- key debounce timer
+ h4 ]! ]( V J1 K0 R( s- U9 R$ \
--============================================================
: j% u5 o& R; D# G9 _6 q
PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)
4 N- {% I. Q/ U2 W4 [5 H" t; ^8 K
BEGIN
3 W' I6 P; W2 `; v6 H
if( RSTn = '0') then
! E7 q1 k0 o1 R; ~8 @: k
debounce_end <= '0';
x( I& \3 f2 c$ k+ b; q
debounce_counter <= debounce_time;
+ F; h" N+ p; A1 p9 [
elsif( CLK 'event and CLK ='1')then
2 X; O' h7 ~- ^/ ^$ K( C
if( debounce_counting ='1')then
' f" G1 X, u3 o$ g) ?1 `
if( debounce_count = "1111111111111111")then
) I: B0 z! z+ L6 `6 b6 {
debounce_end <= '1';
& r: [8 m$ m# a* x) c8 V" g
debounce_counter <= debounce_time;
& v& p. F( U. m6 f( J
else
8 ]) S% l. A, V
debounce_end <= '0';
5 ?# b$ l$ @( C# f& r& J2 B' N
debounce_count = debounce_count+1 ;
+ [7 P! Z' C3 }5 B
end if;
; B2 \! _$ Q4 O8 ?9 K
end if;
9 h# e5 b. n4 j2 F- Y
end if;
# B/ N6 _5 _) \5 `0 K" Z
" u. |' h( ^ L, T
--============================================================
6 J& s* A }4 D5 n
-- key function control
5 C) |" \4 Z1 f, M7 L8 g" ~( u
-- PAUSE -(key push)-> START_COUNT -(key push)-> PAUSE -(key push)-> START_COUNT
* v3 I! b+ M" J
--============================================================
8 u2 j" z! R# a3 d( M
PROCESS (CLK,RSTn,pb_reg,debounce_end)
* t0 g2 s# _, C
BEGIN
' N4 R2 S7 p4 ]7 Z; G/ x7 l, N. a, p8 L
if( RSTn = '0') then
3 u/ v$ F8 \. _6 @0 x' a3 h9 w" l) h
currently_state <= "10"; -- pause
$ t; V* Y# i5 b5 ~
elsif( CLK 'event and CLK ='1')then
* L+ r, t' t r+ F; u
if( debounce_end ='1' and pb_reg ='1')then
- b% U. [7 K+ m$ T# `9 n# W9 w
currently_state <= currently_state(0)& currently_state(1);
1 O% D7 R( C! x% i' o
end if;
. x/ o! [; g' v/ X1 {
end if;
& g @- q3 t5 k
START_COUNT <= currently_state(0);
* f) C6 D( i8 f; c2 p
PAUSE <= currently_state(1);
; e6 \5 \2 ^/ w6 q, t+ X1 q
" P/ ]3 B g# J0 U* p1 T
END PROCESS ;
: G6 r! Y- [( J
END arc;
歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com/)
Powered by Discuz! X3.2