|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FM8000模块(GS1615)制作FM发射机 单片机仿真 程序 PPT教程都有; x6 n' X" O [: V& g. R, I1 a' a
; v% T' B) r1 Q9 h3 C: s s; \* I* x5 j- t7 P0 y# W. w. z
FM8000B发射模块制作FM发射机,以前做的,为了换其他文件,所以贡献出来,含仿真、单片机程序、PPT! O: G8 b7 _/ g: Q; V1 ]% k
FM8000模块(GS1615)制作FM发射机的单片机仿真原理图:7 n; K& q) |& ?2 H# h
![]()
0 [, @( u/ v5 `" }9 M5 T2 |8 O: w: G R# V% c4 q' y
GS1615FM发射机 ppt内容预览: G% Y( R8 X. u f m# T: l" F
, Y2 K) ^: o: c' p0 D
模块工作电压:2.4-3.6V
' e% s1 T3 {* i参考时钟:12MHZ8 X. W* O% `0 z% u" b' A
工作温度范围:-20——85摄氏度
$ o" }: o" ^5 p9 w5 n2 K s调频方式:I2C总线端口选频
9 _4 W+ m+ } W+ ~
4 L8 C: o8 u- F/ F/ H5 a $ G; C% S6 m( |) |0 \
( a8 G, a. K" Z! {& z7 |8 A x至此可知:寄存器0x00的bit1 bit0是频率参数的最高两位,+寄存器0x01的8位,共十位为频率参数8 P& |( \% A, Y4 |
模块频率范围76MHz-108MHz,中间为92MHz,本人想开机即为此值。根据频率计算公式freq=CH*0.05+76可知,要求CH=01 0100 0000(即320),因为freq = 320*0.05 + 76 = 92MHz。
. d( q8 G0 W! r9 v3 g在设置FM8000时应首先使寄存器0x00设置为00100001(即0x21,第一个1是进入发射状态,最后01是CH高位)
. K- I6 N! K( y) U再设置寄存器0x01为01000000(即0x40)6 c: @, S5 b) I+ }, v: C. P" s
此时CH=01 0100 0000(即320)。
5 I$ k- B8 K/ r9 R- ^. u6 @注:计算知,76MHz-108MHz对应CH值000-640。
6 H, g3 [5 }8 @& g, V9 `! k+ T. h' u! T% p& J$ j# P, R
FM8000模块(GS1615)制作FM发射机源程序中的SETCH()函数的讲解:
. p5 Z: V2 H5 J) I: ]: F根据频率计算公式:freq=CH*0.05+769 ^6 [5 p, R4 Q, b- L. O& p9 R
模块可发射的频率范围为76MHz-108MHz,对应CH的范围为000-640
2 @3 }. R" ?9 Y4 a" i1 p9 _2 }按二进制则为00 0000 0000—10 1000 0000( J& `( f" F! i
可以把CH(程序中为count)按寄存器位分为三段: 00 0000 0000—00 1111 1111 (000-255) 01 0000 0000—01 1111 1111 (256-511) 10 0000 0000—10 1000 0000 (512-640)
3 @! x5 A) `* x所以,CH的高两位只可能为00、01、10(分别对应值0、256、512),存入寄存器00h中。上面蓝色的要存入寄存器01h中,你该理解为什么程序中有count-256、 count-512 语句了。; }9 _' N: R! x0 }/ p" Y
3 o) p( q ?1 Q8 U" B! Z+ A思考与改进
* ]& q, F+ c+ y& L6 l) j按键长按时频率变化的能否更快?并且仍可以区别是长按或是短按。# n9 N9 X0 R! P- v, Y8 r4 T
按键长按时数码管显示的能否更稳定?! ?; q' _4 I# w" C; _% m
增加一个记忆功能,开机时自动调整到上次关机时的频率,加24C01等,程序怎改
! U2 a, R" q6 [& _+ ]7 F
* H" u$ {- c! ]单片机源程序:% H5 x$ f6 h+ c* u) e5 z' U
#include<intrins.h> //包含 _nop_()
3 T$ \9 E5 Q% ], L: Y5 N7 Z#include<reg51.h>6 Z. s2 S- p9 P1 z2 B- C
#define uchar unsigned char
8 W9 \2 q! A' x#define uint unsigned int
" r: b; U; M }+ L- [//---------------------------
5 v# b" I. u( a' C' W2 w//-------定义变量端口--------6 i4 c" Q t( g! V
sbit sda=P2^1;! U R! o4 M1 `$ E' P
sbit scl=P2^0;- ]' m: n6 B; N# h' m/ I
sbit DIN=P0^5; //小数点
% M, c0 B# P4 ?+ N3 @sbit K1=P2^7;
! l% U6 n% t: Y# bsbit K2=P2^6;% R: ?1 ^% [* k7 z! y
sbit K3=P2^5;
' Z' X# B' G7 T+ |5 x# b! A' r- G. Esbit K4=P2^4;
" Y/ M, o" l% `% uunsigned long count;
6 `4 Y4 H: h0 B( _: h) \) z0 `uchar i,j;2 ?. v7 Q3 `; a! B3 `, _6 z
uchar a,b;
* u+ P: \6 @- O8 l! Zuchar temp;
- ]3 ~- d7 A) {2 e( Z* kunsigned long freq[8];
* i1 m* Q7 }' l" l1 n% S4 junsigned long f;
5 |5 I4 ]9 Y& eunsigned char code table1[ ]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f,0x9F,0xDA,0xC3,0xDC,0xCB,0x8B,0x00}; ; C9 y- R" `- ~/ D
/**左边LED四位 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "不亮"
6 X2 N4 C( r! O. t- D+ O$ c 共阴数码管段码表 (按图接法的编码)**/ k4 p8 s z- N' s. d. d
unsigned char code table2[ ]={0x5F,0x41,0x9D,0xd5,0xC3,0xD6,0xDE,0x45,0xDF,0xD7,0xCF,0xDA,0x1E,0xD9,0x9E,0x8E,0x00};
e* U& H# ^9 {7 Y" ] /**右边LED四位 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "不亮"
: L. E& h) R L+ r 共阴数码管段码表 (按图接法的编码)**/
# j5 F" {7 R9 G7 _3 g' \0 e
; Q3 w( z3 h& V' x* C5 C
, J x2 n2 r! D" a//----- 函数声明-------------
9 {1 d* J9 Y/ L* S5 }void FM8000_init(); //初始化函数' [: d4 ]: W6 a' ?" i2 s
void start(); //开始函数5 B/ b, i4 ~* d1 S
void stop(); //终止函数4 G' t/ R; A/ o) c: j" O) F, b" }
void respon(); //应答信号0 ?% u( B% C& K5 |& |
void write_byte(uchar); //写字节函数
, m* Q6 z7 P- ^; E/ a; nuchar read_byte(); //读字节函数5 o# G7 ~, A& [" E7 c
void write_add(uchar,uchar); //指定地址写一字节数据
3 C7 P/ f( O" i( ^6 suchar read_add(uchar); //指定地址读一字节数据6 v3 n4 t0 }' S8 [6 `: |0 l- f6 \
void delay();2 r! T: f9 t6 B: K2 C: L$ g
void delay_i2c(uint x);
8 T) _! ~2 ]$ K6 O8 j Gvoid SetCH();
8 J# L2 p( G9 N- ]% e& V9 kvoid addfreq();
, T/ }/ u& W+ s; u7 u% x, Jvoid decfreq();/ h/ o( Z k- `
void fastadd();
, F! s6 L9 t( @void fastdec();
4 z$ Y" P) G6 C0 p; gvoid delay10ms();1 @; B+ |% G1 i& |! l9 |
void display();
0 c% s/ E5 {) G; I5 f! }//----------------------------------------4 y8 w9 P i9 I( ?, ?+ K9 X
//---------------------- O% O# ]& z, t% @4 f# C4 Z q
void delay()4 Y* H# w+ w, T! _4 i8 ^
{" ~2 L( r2 A R
_nop_();, `. o$ h$ d3 S' w1 m
_nop_();2 `' Z2 Y+ P, Q& E: q
_nop_();
8 j* B" d, @7 A% T_nop_();/ a+ \" S, Z+ |1 z5 s x+ a4 k
_nop_();
/ |" t6 ^" T3 F. A* V ]}
* W( T. v7 v9 E3 ?/ m5 e; Z8 \//----------------------------------------$ z# X3 R- Y, @
void FM8000_init() //初始化函数8 Q) _: z. g% a- q! p0 K
{
$ |' R3 r* J- Y* wscl=1;! ? M, Y; r& S; \7 H; m
delay();" I2 E- b' ^% _& ^2 B
sda=1;
% R8 k ~2 s1 adelay();5 B$ H- b- Z7 ` x6 w
}/ V7 h1 i' d3 m6 J
3 j8 r1 A( M8 y& O
9 }: }+ d I |7 x; `/ g//----------------------------& {/ Q& h5 W' c1 z: @# X
: n! a% o) c1 h* z; L4 E; u. ]- q7 z2 d
void start(void) //开始函数
- j4 U8 f1 {; a6 e8 X{
: _: S# y% ^4 Nsda=1;" V$ h' f6 l5 r' {3 z
scl=1;$ I. t5 W, _8 k2 h' p3 p
delay();* t; y& O) R6 c) b
sda=0; //拉低电平7 g. W- ?8 L2 c6 U- m; r
delay();
7 J2 ~+ }- Y' @& E5 H) Qscl=0; @ y S: K: d: {- T
}8 r6 b6 d* w% C0 j; B/ |( f( O
9 k2 ?( n f! t5 x8 `1 }* @( F: Z1 h+ r) e& y* q! d* ~
//--------------------------------
& ~/ M3 P i# U' C9 ^; Gvoid stop(void) //终止函数
; K8 \+ W2 [4 J, Y r{
6 O6 P) o5 P& p0 Ssda=0;3 p& r4 ^2 A% O3 l2 t
scl=1;$ L7 B P7 k; y( q" o) ]
delay();! ?8 p/ `! A$ Y- }+ Z
sda=1; //拉高电平" ~! S- |0 f9 x5 W8 h
delay();" W- Q8 Q3 Q$ C1 j7 F/ |
scl=0;- F& f! l8 n" i: \4 C! O, ?/ P. U
}3 x# G' z- M1 c' W/ [& Q1 h9 j/ @
4 j4 \. o A% w- A- R' z1 L$ H+ ]& `
//---------------------------------
/ {$ @' v) N# G# l) R1 k, f7 A- {- ]+ I
. ]+ e( F0 b7 o! q
void respon() //应答
0 y. h, K& G! {4 y7 p3 b% ]: ^{
- ?7 M( X8 O/ w9 j) e* yuchar i;
8 U f6 B0 @, [- W8 I5 nscl=1;
# Y( O) ^# N @/ cdelay();
2 Z! l9 U0 v3 [4 P6 ?& X1 M6 Dwhile((sda==1)&&(i<250))i++;
5 A# b7 K6 a, d/ H; x% @/ Bscl=0; W) d7 `4 R+ e: x; p. ~& I
delay();" z ]8 m( h2 l5 X4 `
}
) K- u( r r& Z! a8 |# g5 a; o0 u% @, c% m
3 c! @" s& b, U0 ?+ F' ]1 |: K* i
//-------------------------------, s9 h7 k" L' _% I& u
void write_byte(uchar dat) //写字节/ Q) Y+ T- X: t& f! M$ F8 |
{1 m; _. ?& Y3 h. U" _, z' |
uchar i,temp;5 b1 e0 W- ^% t! ]9 \2 }1 B
temp=dat;
" W2 Z* S1 @# }' c2 z! t* u% L b% T; D \for(i=0;i<8;i++)
7 B& K3 ?" p: |/ q$ Z9 K{
' N4 `" g& }9 y3 x1 O$ w temp=temp<<1; //循环右移5 l) [; a" N3 `! |
scl=0;7 Y$ p1 R* \7 x6 ]: s! D; o
delay();
' S0 s5 u. S* y8 h# W sda=CY; //CY为进位标志
. H2 f# T5 h' h# k0 |8 W delay();
1 g) }0 j3 X+ b+ U! J2 P, i1 e scl=1; //拉高SCL
+ y+ H7 H+ m: \9 _$ z, f delay();0 A7 n$ \* O& ^) M7 L Q7 T' }: i
}
' w& ^' y8 N" ?! Z" Vscl=0; ; E5 T C& e. q. d2 C
delay();
2 O( C0 d) |. k, vsda=1;
: U+ m7 | B5 ?5 j" [* r: Q1 A. Y0 tdelay();( W7 I& z6 [0 B W& K0 g4 G
}
. L5 ~/ R+ S4 @# V3 J! K
) U" S% {+ T' C; ]. V) r" T
( ~) I' V, k1 d9 O% O//------------------------------------
6 B. C2 o" Q. M: `) I* r5 Wuchar read_byte() //读字节
% c2 F. I r4 p{2 K: P5 z( F& I7 ~4 m1 b) s1 a% G, e
uchar i,k;
0 S* v c( l/ C* lscl=0;
/ J+ }6 ?- w$ U% X5 `delay();+ }0 R6 s3 R. S8 c2 q
sda=1;
[7 o" g; l. z3 Z& Y, udelay();# ~2 O5 L) E i1 ?0 s
for(i=0;i<8;i++). X7 ]7 Q/ ^6 J/ n9 ^
{5 Y: F4 |+ w9 e: W
scl=1;
* P8 N, z8 k( [) n# mdelay();/ F' s/ R1 k3 K- k/ S- j
k=(k<<1)|sda;
; s t* b4 L+ ?9 z2 ?scl=0;+ K' i. k' T) Z5 }
delay();
4 L% [9 S& H h7 i( ]}' a. a% G. _; Z" s$ [: k& Q" u
return k;
0 |+ } V: c2 W) z: T/ Z}- y2 L2 d( i7 l. m3 |; B: P
& @. j; `" v5 U- g3 n( B
% G9 b; ?& y. x
//------------------------------------! u' Q& c8 _4 V' d3 i2 F( d
//------------------------------------1 a. K' { L1 w2 S) }* u4 a" G
5 x! u: a, S- k
8 Z# s# z! I- d& T//-----指定地址写入一字节数据-------/ m* Q$ i9 k' X1 b2 R) ]
void write_add(uchar add,uchar dat)
( i9 O E* E, z% H9 o: H+ w{
& T/ u6 [( N- m* b: kstart(); //开始* U Z* Q1 N* [# \; H( ]# _$ O5 w
write_byte(0x58); //写 器件地址及写信号# R8 R2 L! y9 a P7 t- ?* `
respon(); ) r& o2 B; U* B% S
write_byte(add); //写字地址
2 H/ G* R) l* ^8 @* Nrespon();: o- `! D7 ~' \( e8 ^
write_byte(dat); //写数据6 L' B/ L, G9 |; Y; o3 X" W
respon();4 a3 _0 d* T8 g% ^! W4 T
stop(); //终止
1 A7 ~ F5 k5 V3 |* @! z7 u; l}
F: {9 @3 p2 o//---------------------------------$ q8 F" o& _. D0 |# {" R9 j+ S' A0 _4 l
# \+ [4 m9 M8 G7 C9 K$ B
0 m3 v! S2 H/ j3 K8 M//------指定地址读一字节数据-------) Q" S4 Z# M$ B- V- T3 V+ U
uchar read_add(uchar add)
/ P& L4 L3 Y$ E4 l4 O ^! z9 Z& v# y{
# z) H4 _ d* Y$ ` v4 nuchar date;
" j% g1 v' n1 z: k8 y' C2 cstart();
3 y( ]* [% s, w+ {% q) O: T$ pwrite_byte(0x58); //写 器件地址
2 w! E' ^% K- I/ T) \1 B+ m5 wrespon();& R* a5 M' L4 C) c, Z8 e
write_byte(add); //字节地址2 o. t, H9 ]8 R/ ^
respon();) {% h1 I: l: u, S
start();7 {8 ]9 e- ^! n+ o* }# y
write_byte(0x59);
, O! V4 G) r: y( brespon();
- h* l' n3 d. Jdate=read_byte();2 y. k7 t+ k* _' u5 u+ C6 N
stop();
0 L- T6 N) |) V) l) Ireturn date;+ O! Z+ _6 D4 f/ J0 j: w
} - U8 h$ z9 T8 ?: ^ ?
; g6 s1 p; b# s+ X# W! R ^# ~: f9 F) H4 v
9 n6 t1 M. t+ Q+ s* y# T$ o
& r( P# F3 ~' Y2 f; Z//------延时函数-------" n' I& ]+ Y$ o7 j& i
void delay_i2c(uint x)//延时函数4 P. z. r7 @' a/ o5 W) g
{% m. y7 C7 h7 K+ \$ F8 g \
uchar a,b;
6 p+ `) n7 K7 c* c1 e$ h0 Ifor(a=x;a>0;a--);
! D) j/ G. H/ O6 Z3 w \//for(b=100;b>0;b--); //速度较慢,去掉加快点
4 P" _ ], g, i4 I' f}
7 c, E: d, v7 d7 r& m/ x# S( p/ P6 {2 ~# Y$ W
2 s' Z f' ~+ y: e# Kvoid delay10ms(void) //延时10毫秒
7 Y6 U4 E1 O) Y% ?{ ) d. K! l, q2 T$ e
unsigned char i,j;
% U! z- b& d5 {, N7 ~4 l for(i=20;i>0;i--)
9 q- b% f+ i6 y( d6 ~ for(j=248;j>0;j--);
) w: S0 W. l7 O' z* D3 i6 |' h& x}$ O3 d8 J7 y* T/ k3 [
5 U0 W n8 v+ o7 q# J
% \( A% T) o- w! M( Z* h# K
# q9 W& A' w( e9 R% @/ C. _% {8 E9 f ~" M M3 K) F& l. |( w
/***********************************************************+ D6 H q4 n3 d% b% w" J
: h, U8 J8 s3 D( v. Y. w4 P; m* \. T
0.1增加频率
* }% _9 ^; C8 ]3 s& ]8 y% W$ H& F void addfreq()
+ q1 K$ ]. ]" F) T( [
u+ f b! p2 } m- z, L& a+ V5 D' K
; B9 H! E/ M8 F# A0 |**********************************************************/5 p2 Q% n V, @6 `& R
void addfreq()
. J9 N: n0 H# q6 Q% k+ V' f{
. w; s h3 _3 R+ g2 r( \
6 i/ r+ q' K/ S3 F/ C8 v delay10ms();
/ e% U) v, |2 ]. x. M if(K2==0)
7 ~, I/ E) B8 X+ y& Q {: u/ n* N/ Z; c2 p: i: ?
count+=2;8 q) p5 Q( S3 O' E) z2 H1 u. \
' E5 H9 g9 G8 U7 R- }& y
2 u. a) R8 B& h4 o a# N+ Y; `0 V# ` if(count==642) //count=0对应76.0MHz,count=640对应108.0MHz,+ j7 G3 Y0 x' j. C y: g9 q
{
- [. F1 b" R& t! B- u count=0;9 t6 Z( j }8 Z6 h8 k- K. ~& n7 v# S W3 i
}, V$ o7 D @9 a: I4 x1 I$ Q3 {' T
}
u% |/ k8 f5 v, _5 y! w P0=0; //写入时关闭LED,使LED显示亮度一样# @0 P/ _( a, S
SetCH();
! A+ W1 r0 ~+ d do {display();}
0 h) M9 v" l* k% L' n while(K2==0); //等松手,此时LED仍显示' m& E* B, J+ A5 c' k$ c- I
} + r; p. c! Q' ~# ~" r1 w
/****************************************************************
4 L' I! @; [$ I& ]9 p8 g0 B/ D1 X0 q' x [: |, O, [
( C8 n) E. x- H5 |2 W; `& q' m/ G/ g
0.1减小频率
9 w4 A# K& a0 R0 `) D void decfreq(); O5 K$ m8 L3 N& }) Z! R
******************************************************************/
! E8 p8 P$ I( \/ f/ } void decfreq() * ]" N6 N$ ^: z: `; P' G
{7 F H0 ^# N2 t1 K9 a7 r) e
delay10ms();& K4 l- H6 Z% Y, L& b: t' W2 L# ]0 v
if(K1==0)
[3 l7 v( x" t/ [, z E# q; K" \, ^ {7 ]. a* O& J3 Y# j6 p" I- G2 Z8 {
if(count==0)
# C+ L' M0 E7 p% P% p0 q {
/ S( v$ e8 m! N7 |" i1 `4 ] count=640;
6 B7 N9 f4 [5 r ?# X' P }
" y+ U% D- |% I( ~2 l + ^4 O) }* s+ C8 u2 k6 J
count-=2;/ F4 G& k, z, }8 k
P0=0; //写入时关闭LED,使LED显示亮度一样
; e9 i7 u* s( P/ t" q SetCH();: i7 S4 C5 M6 G5 O% @6 y
do {display();}
% }( i; @8 y. l( T' A2 H while(K1==0); //等松手,此时LED仍显示
7 ^" s5 k5 b2 S: s }# `" \% x! H3 K$ J% t
} 5 x- D" }$ {) j
9 S" z0 d' R1 c; A) p* F( [
- i" Q9 X8 J: W: j
1 n# F2 M- t# E6 Y4 F% i$ l, S& `$ n1 P$ A! Y+ _/ {
/***********************************************************
u j+ t* @, W ]" k6 h0 ]. G+ w1 M
% U1 F2 Y7 p6 U5 g5 I ~6 A1 y6 O# w- s+ m
快速增加频率
7 |. g" u, E. Y/ v# ` ?3 d! M void fastadd() T3 e4 j- `2 a, d
# _1 n/ i8 g9 n6 F
) g F, k. |( _7 j
**********************************************************/
- p2 H+ N$ ? v; ~0 m/ g4 W G+ @ void fastadd() ( w5 m/ }, |7 h% |! V- j
{
/ }' y1 H2 p y0 x Z
. Y) V- I$ o" y/ n' E; c delay10ms();
8 r. n' h/ S6 a9 ]8 g& q, ?3 e- l if(K4==0) 7 M5 g/ a/ u( X3 k
{
4 T% \# G/ }$ B9 B5 D+ V& z count+=2;
4 N, ^. W. h5 a0 I
- |3 n4 S% q/ E. j3 {* t
% x% K. X A8 Q- s% g: s if(count==642)! ]$ |6 H) B( ^8 [9 W6 `+ g; s4 A
{
' Y! ~9 P% p+ G9 ~: [/ y' _ count=0;, f( M3 `# m2 q0 p. b8 n( z4 q
}
+ Z4 C$ o; s, C4 z9 N+ u b! _& S }4 I0 g% I$ c D7 F
P0=0; //写入时关闭LED,使LED显示亮度一样- A! M L/ E m. U( |3 t# j
SetCH();
4 @4 \& b/ o6 i // while(K4==0); //等松手: f3 K- Y, ~: e, M5 H- Z9 W; A4 O
}
- `0 N& \! T* Z8 h4 x1 M/ n /****************************************************************
5 k" h; X2 B3 m, k' J2 V( P a. ?' V0 m# }" F7 K% z
* E9 x; ~* q3 a* m; s3 d. J 快速减小频率
" c- b6 G$ q( o* E- G5 q void fastdec()
, \8 v; q5 t5 A; `. ]******************************************************************/
! F0 I0 m$ e6 D) O* v7 ~$ { void fastdec()
0 F& a( o7 s1 J0 @ {+ M {
1 f4 c Q8 h* f% \4 e+ R4 w4 v delay10ms();4 v" a& n/ a: U
if(K3==0)
6 Y9 w8 x+ G5 c/ s, Y) H' { {
+ P2 ~7 T3 Y. {# }! M' g if(count==0)
N. w/ F7 J' m' `% H {4 w4 U% {" k- n1 N
count=640;
3 j$ g+ ~ l# n t# E } 2 o. i5 R& j) y) X( J
! Q% A7 |4 f6 e$ Z% Q/ l
count-=2;
* f* H8 d$ G# A6 x; J" V P0=0; //写入时关闭LED,使LED显示亮度一样# A: m; W6 r8 o& Q4 v
SetCH();
) Q: Q4 Z0 E$ B6 C7 q* | // while(K3==0); //等松手
& b6 R i5 |6 ]/ t# x6 f! |0 K' { }
; C, b2 O7 b) I e/ R } % ^# U; o1 Y- Q D E
: {) t' a1 O6 {2 C$ Y
4 X+ J! c6 C) j4 S" ?; s" ^/*********************************************************& H5 m" i3 W; T/ h/ D& m: F5 t, o
$ p& X" F; r2 j# l$ }0 L7 R. ^9 K9 e( Q" q
显示函数
; z- m5 n: @" ~ void display(void)
# Z, v% h' D Y; A. B1 v2 f& e- B7 A2 k0 v2 s+ F* K! ^
1 T% R, ^' J' F* T* I*********************************************************/
; l, M- B; {, M& y+ O* ?4 K void display(void)7 p- x- K8 \4 c- p8 t7 F
{
! }: D4 E0 Z2 q$ T- Y! Z* |1 E4 h5 i {
$ E1 s5 D, C5 ?4 T+ y! l# D$ @ f = (count*5+7600);
8 I4 t7 M f; G* M4 ~2 T! i freq[7]=f/10000;6 {9 y* _+ ^! [4 F9 ~+ H
freq[6]=(f%10000)/1000;
: `$ H) Y; r$ Z+ Q freq[5]=(f%1000)/100;" F) P. {. o: }% `/ ?) z) s, k
freq[4]=(f%100)/10;
: s" Y9 ?. G3 o& [ freq[3]=f%10;
9 o1 N1 U0 S% }' c freq[1]=11;
8 ^( `1 E" N- m. j5 K2 C6 ] freq[2]=10;3 a9 g+ V5 P* b- W' ?5 O; h; n
freq[0]=12; 6 g3 x+ O! g8 k j" C$ |+ m
temp=0;0 v4 D$ k' e7 e' j8 ]
for(i=0;i<5;i++) //后四位不显' _+ A2 t0 e& M7 S! R& X
{ R/ r( W- J3 Y
P1=temp;
9 R( Q$ x* G8 W if (i<4)
2 v: M3 }3 M5 A' S {P0=table1[freq[7-i]];
( A8 c, {7 E+ Z5 _2 t- q- _6 @. [0 L% t if (i==2) DIN=1; //加小数点 6 e1 U+ \5 _$ p) v7 c& G/ e# Z
}4 J, {: c* L) `+ U. Y7 E
else
7 r$ p2 P( C9 {9 y A: J {P0=table2[freq[7-i]];
; b0 ] ~. z0 V8 G3 v( a+ n if (i==6) DIN=1; //加小数点
9 I3 i/ S! M5 ^& X, s' ] }# a" G1 B5 z% J. y1 r
temp=temp+1;, T# A7 f3 R9 b9 W* X
if (i==4)P0=0; //第5位不显
. Z7 A. s6 f& ~3 Y for(a=10;a>0;a--) //延时3 S6 I7 d1 X0 l& H
for(b=248;b>0;b--);. P3 Q! o5 J/ M: Z5 r# c$ _- Y
}
" \) L2 r) G% S* H; C4 }- I; k0 J }
0 v, v. q: [2 b}
! ^6 J0 U, N7 {! c8 Y* ~
/ H/ L5 {. ~- m8 I9 N6 z" s1 N% `2 p7 k$ i# g, e! c1 U3 [- T
/*************************************************************# w' k3 h1 X; f
1 p% Z2 h3 T2 f# t! }
2 i; T+ w8 j/ C7 W
设置发射频率; j( P8 ?+ ^% m! Z
void SetCH()
7 w3 k0 C6 m/ a$ Q+ O* l5 c( P, [1 K/ b- `5 R: z" t% N" Q
' F9 P' u( Z, j+ @
************************************************************/5 C) E3 p) ~7 S, V- C
void SetCH()
# Y* H6 p8 k, ~{
5 _+ l ]# h3 C% M FM8000_init();
2 E5 F0 t2 x3 `7 s if(count<=255) . ^& b4 A4 A2 G# x
write_add(0x00,0x20);
1 \" j& j1 J+ Q5 b8 ~ delay_i2c(100);& Y; O/ m2 S) j* r6 l% Q& N
write_add(0x01,count); # \ i& H: A. v& k
delay_i2c(100); 8 K% D- J2 r6 n6 C& \+ S" t
/* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定 8 R9 T5 w. U7 \! l0 E
delay_i2c(100);*/
9 A4 c9 L3 m u+ P9 p) x8 g if((count>=256) && (count<=511))( d; T7 q! D$ o! n$ c' X
{ , W$ a3 J$ u& V7 Q. w; D
write_add(0x00,0x21);
. G: v+ E( ?5 N& y- w+ H' S& Z delay_i2c(100);+ q% s" c0 J! v; K' Y- q
write_add(0x01,count-256);
& b/ r7 Z. U0 I% s+ o delay_i2c(100);
2 z: ?; o, G @- D# }- c /* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定
) v: V! C9 N8 O: C2 K delay_i2c(100);*/2 l5 E( j( m3 m- C4 Q: U+ p4 s7 j+ N
}
6 V& K( t; X1 [, V9 S if(count>=512)
7 O0 Q* [4 E5 f& K; M& m) w { write_add(0x00,0x22);
2 G4 f1 n$ x4 E6 }# J" x delay_i2c(100);
. C. [2 l( }! | ^& N& C write_add(0x01,count-512); # ~+ O1 b0 o4 ?0 K% M* G9 p
delay_i2c(100);
3 p$ e) [8 j* J% P0 W0 ~3 ^ /* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定
/ o6 O$ ^$ v+ s+ R delay_i2c(100);*/8 j$ d2 l8 w0 q" Q, S* _/ @3 I
}1 t; F$ ^7 g+ {! }
. G" V* L# b- l' a* P+ h8 U5 m7 O7 G* V- m( L! {; }. `" Q
………………余下程序请下载附件……! a1 [: r% k1 }( m
下载:
7 K, I, e" s' E7 b5 C8 x* R& e+ Z5 W$ t# _
/ F5 P: m6 e% y _, t( k: r |
|