|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FM8000模块(GS1615)制作FM发射机 单片机仿真 程序 PPT教程都有( F4 Q1 m. J# }. `! {5 x
8 L" ^$ V: H) N! f( i$ w: y% e9 {% E3 S+ P: Q
FM8000B发射模块制作FM发射机,以前做的,为了换其他文件,所以贡献出来,含仿真、单片机程序、PPT
7 }) @! s* F: Y% |7 ?FM8000模块(GS1615)制作FM发射机的单片机仿真原理图:
- h- k! k' P/ P1 Y2 F![]()
3 A Q( l6 y, m# F, t( @4 W! n
% X6 H' u. s( `8 w8 f/ _3 GGS1615FM发射机 ppt内容预览:6 a/ x: `9 U9 p, z! }
3 E# i& ?- m/ i J8 }
模块工作电压:2.4-3.6V
+ \/ l Z9 y/ I' N参考时钟:12MHZ
! r% }* C4 \- Y' i. W" H工作温度范围:-20——85摄氏度. [4 ]* N) R) {& I2 x' b- d, X7 ]
调频方式:I2C总线端口选频
7 H; L; f, w* E
' g5 S" E+ E7 D; w. R
' L) V( m7 q* w$ T - h5 y: Z) V# `+ f; b5 m
至此可知:寄存器0x00的bit1 bit0是频率参数的最高两位,+寄存器0x01的8位,共十位为频率参数1 ]$ A' }1 k; `8 A$ u% O2 H
模块频率范围76MHz-108MHz,中间为92MHz,本人想开机即为此值。根据频率计算公式freq=CH*0.05+76可知,要求CH=01 0100 0000(即320),因为freq = 320*0.05 + 76 = 92MHz。
, U- K- Y3 S M6 r在设置FM8000时应首先使寄存器0x00设置为00100001(即0x21,第一个1是进入发射状态,最后01是CH高位)1 z/ X! c) Y, A! O% V8 T, V* D
再设置寄存器0x01为01000000(即0x40)( R* d& a" ^9 q3 w! C3 F, R
此时CH=01 0100 0000(即320)。
( @9 A! I3 H' j注:计算知,76MHz-108MHz对应CH值000-640。
9 [( c, z. B* f; Z2 o }0 K) A2 f2 u' Q2 m6 ?/ [
FM8000模块(GS1615)制作FM发射机源程序中的SETCH()函数的讲解:
6 K" G3 y5 e& x; ]9 e根据频率计算公式:freq=CH*0.05+76# R+ M" P- Y" h/ h8 X7 B
模块可发射的频率范围为76MHz-108MHz,对应CH的范围为000-640% f4 }; [5 E) B( D8 S% S
按二进制则为00 0000 0000—10 1000 0000
3 m* {) |! p5 Q. e5 L可以把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)
& L5 V& D$ }( S所以,CH的高两位只可能为00、01、10(分别对应值0、256、512),存入寄存器00h中。上面蓝色的要存入寄存器01h中,你该理解为什么程序中有count-256、 count-512 语句了。5 @3 W- ^0 c, _& |1 D3 R
, X5 _% n7 g4 h
思考与改进3 {$ u9 y) |' h
按键长按时频率变化的能否更快?并且仍可以区别是长按或是短按。
) G: [% W6 Z9 ~1 ^按键长按时数码管显示的能否更稳定?
+ r4 R- C9 R. o. r增加一个记忆功能,开机时自动调整到上次关机时的频率,加24C01等,程序怎改
2 p+ S" d" t- Y- }
5 @# B; u0 q v+ O, L* f单片机源程序:. I g% w8 o6 c5 ^
#include<intrins.h> //包含 _nop_()4 s- u0 K ~+ d- z- F
#include<reg51.h>
/ ]6 I) d7 [# D% l! i#define uchar unsigned char ], z$ V: x8 J1 e
#define uint unsigned int( q0 P% H. T1 E$ w$ P
//---------------------------! K7 M$ y$ B" G9 l
//-------定义变量端口--------
% Z, ]1 P( x ?* Fsbit sda=P2^1;
/ c- l+ |$ T# I' q# W6 n' isbit scl=P2^0;
, z) H: q+ w$ Y) K9 ]6 [% n- J" Asbit DIN=P0^5; //小数点
$ b- J. j1 B% o g/ N5 _2 Hsbit K1=P2^7;+ w/ O9 k) j" }- e
sbit K2=P2^6;' M- Q o$ t/ ?+ D& V. v
sbit K3=P2^5;0 g$ Z! ^2 e5 v2 D) c2 f ] S, F
sbit K4=P2^4;
* _8 M+ z, I! w2 \- Iunsigned long count;1 K- c { A. q" s) B& ?$ W7 {
uchar i,j;
8 U/ T5 w- w) T( puchar a,b;6 ~( ^5 `7 R( [$ q6 w
uchar temp;
; U2 Y. Y9 w5 D5 wunsigned long freq[8];
% {6 q8 X' E/ ?3 i/ B8 runsigned long f;$ v) \! q; ~: E6 V
unsigned char code table1[ ]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f,0x9F,0xDA,0xC3,0xDC,0xCB,0x8B,0x00}; 0 v Y; U: v& P
/**左边LED四位 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "不亮"
* s7 N/ {1 S) K8 q) H 共阴数码管段码表 (按图接法的编码)**/
& e9 Q" X' }: h" y# Lunsigned char code table2[ ]={0x5F,0x41,0x9D,0xd5,0xC3,0xD6,0xDE,0x45,0xDF,0xD7,0xCF,0xDA,0x1E,0xD9,0x9E,0x8E,0x00};- \" E% O4 d4 D8 R+ F+ h
/**右边LED四位 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "不亮" - V/ n1 U! K, c2 q* Q2 p$ H
共阴数码管段码表 (按图接法的编码)**/
. R' I% G. ^ V( z* _- |. n# z8 v
; ^ g4 p6 }( L4 ^" N. I$ o" T% {7 a
) Y$ g% t b; S+ W6 p) E9 L//----- 函数声明-------------* z0 h/ _+ G& j2 J& K, b( m
void FM8000_init(); //初始化函数
3 h5 w/ Q$ R* ~/ ~' K6 K2 svoid start(); //开始函数
7 T: x* F8 s( F7 Wvoid stop(); //终止函数2 x! Z$ {; Q9 ~9 @1 V2 o* @
void respon(); //应答信号+ o' }: M1 g+ x' E& B8 W5 H5 Y5 m
void write_byte(uchar); //写字节函数
. t2 e) N- E+ zuchar read_byte(); //读字节函数3 R# U: L& }5 L
void write_add(uchar,uchar); //指定地址写一字节数据$ i2 S) Z7 v4 B7 ~3 f9 j! ~2 p: Z
uchar read_add(uchar); //指定地址读一字节数据6 O* u# @: Y0 }# g& T( b
void delay();9 ~+ N; M! G5 g% J" n: t
void delay_i2c(uint x);
$ m! \* [6 q& v. i g* @% Ovoid SetCH();
$ `" u; Y& |& I' Vvoid addfreq();
: i) g5 ]! M. @void decfreq(); X7 }, Z0 A' l; z0 O6 @) |
void fastadd();
& E3 `. j6 x% b D- Nvoid fastdec();
8 v) M1 [* i# Vvoid delay10ms();
( C8 ?! a0 N6 [7 ^7 hvoid display(); 0 T' |/ U! ^* g
//----------------------------------------
6 ^+ r$ e1 L0 \1 a" U- p- D# ]//----------------------, l6 y3 C& }. w/ S
void delay()
# ?' L2 f- u% @) e5 y* M; L( i{
& M( r! X! \5 b p. l_nop_();
; U4 T9 s$ _" w% i_nop_();
/ o; O. s: e% [) |_nop_();
; g9 Z5 b" L+ v, B6 e! v( ?% Z_nop_();
! U( A+ \7 x( D: \( `! k0 z% l_nop_();
V% X$ W0 R" W9 X2 d5 G}
: v( w: O) G( D//---------------------------------------- v* S" {5 x3 |6 T$ l9 Y
void FM8000_init() //初始化函数( w8 P: R+ U! c
{: s: K0 C$ m: ]! ~0 ~% T
scl=1;# q, {6 y5 q* D3 S' |
delay();
" H3 Q7 W: U0 i: v# g5 bsda=1;2 V, H- {. p$ p& I
delay();
+ f4 i6 ?7 A) y" [: j, X/ Z2 m3 x5 `}
3 S1 [9 x% p; |7 l5 G3 B! _- @5 k: H- N$ R
3 t4 a2 {# j* B( s& [
//----------------------------
k' Q6 F9 o4 l& |$ O& c: Q5 {+ v" z! M# Z; l% n# R
L: E7 A" F, f5 d
void start(void) //开始函数
5 s% c7 w2 d# o6 M+ ?" r{
$ I6 B% U- z1 esda=1;
8 @% }0 C- o0 Z, W; E+ q7 d% Pscl=1;3 q8 g, d) z& c7 d# j( I) B
delay();6 Q5 J2 [2 ~' E7 u/ p
sda=0; //拉低电平
* l$ P- R1 N5 d0 e# V3 d6 Mdelay();
* t/ v5 J0 `3 Z Nscl=0;
5 R0 u# K1 g' \4 b}
+ d' Y8 f2 {* a+ u% S
$ u( y3 g" G* W7 y$ b- |' i! D6 d2 R0 }: N S+ t0 j6 g
//--------------------------------
' N9 h% _8 U0 `, j; bvoid stop(void) //终止函数0 n6 T" D8 I& @3 ?
{( Y0 ^2 ^. d4 N8 I
sda=0;5 A" i3 X4 ~' X9 ~0 ~/ W) T
scl=1;
0 Q% f( H0 d9 w2 e8 h3 Sdelay();
g# {; J+ o: l9 q3 N+ U( v! A& J/ usda=1; //拉高电平
! N. [3 N' g% ~$ y! ~, Hdelay();
6 |. R; J: D1 s6 e8 q% ^/ Sscl=0;- N& l7 r- Q5 h0 D
}( l& S0 @+ k( w; Q, r$ K/ `* q
/ L6 D& c) g0 @5 J% ^+ I
3 r2 G+ \0 L" T2 q7 b//---------------------------------
& R: m `* d9 U+ Z# k' p6 ~+ u" e# M e6 t/ e9 l U/ i/ y
0 A- g6 a, W7 a$ ~3 vvoid respon() //应答2 g' ~2 V7 a/ }4 h7 f' m/ H$ C/ T
{/ b% K# m6 T. _/ Y" J) U# V
uchar i;- M+ a% ^% S$ j. h( y4 [
scl=1;0 w8 [* |$ \7 D1 x3 [) T
delay();
6 C3 N' W' x( g7 e {6 nwhile((sda==1)&&(i<250))i++;
* a% F7 a( Y1 c4 N) |scl=0;6 d/ S2 t0 J7 {1 e' L3 N
delay();
/ V. K1 [2 R* L1 U9 Z}" U% i4 Z+ {4 h7 N6 E4 W
* }! q6 Q, p; q8 ^
4 d2 |! X1 R2 _//-------------------------------- Y4 A" Z( G k& @
void write_byte(uchar dat) //写字节- |: C& Q$ y) R0 L: M! i5 c
{+ @# p: z1 B+ @4 @4 B
uchar i,temp;- d% ]4 C2 v/ h5 G+ r; K
temp=dat;7 H2 G% b) H+ K' n
for(i=0;i<8;i++)# ~- W. ] ~$ y7 k3 [$ ^
{1 R( x4 O0 [/ l& @7 L- \
temp=temp<<1; //循环右移
$ R/ `: T5 k8 r% W/ F! @1 W scl=0;
" M7 k7 L$ w. }/ K' k delay();- x9 R4 r4 _: d: ]9 m
sda=CY; //CY为进位标志/ Y6 x! n$ N5 X
delay();& O9 r7 u& [% v* C) u# q
scl=1; //拉高SCL
6 }. x+ ]! b! D# m delay();
' \) j3 q5 R# v8 I# ]}1 w, b( C: p. U2 K5 U; r' j7 n
scl=0; 7 z2 h+ F9 X f; l3 M# n
delay();
4 o9 H- _& h! g) osda=1;
0 m- U( U8 _ A8 t( ^' v! J7 u! fdelay();6 n: V2 N# W' l, H- l% ^+ r5 R! V2 s
}
. |5 z4 T; x" e+ W, M* I0 C% b: T- l1 g% |( e; ]. f! C% G% G1 ^6 a% ^
3 s4 N$ q" a* l7 [9 Q( a
//------------------------------------
0 e5 Z2 m, q8 T! w& ? @* tuchar read_byte() //读字节
+ T6 \& s4 Y, j1 B5 s2 F6 p, |{
3 ?" g( y% g2 I: ]5 @uchar i,k;( l" [; e' t+ J
scl=0;
& X/ \; d2 R" o6 _8 X- ydelay();' S6 y) z; p3 F# R7 o
sda=1;' i: c9 T# a9 t' H T1 U
delay();
; u% o3 Q: y, V" {1 ~) Tfor(i=0;i<8;i++)
`+ ^4 ?6 }0 C. N- O5 \9 p3 c{. A e+ M$ y+ B; x* p
scl=1;
" A6 r$ B+ O7 f9 P7 I% P7 ~delay();, j& o6 u0 m3 [+ ~4 |- [# j
k=(k<<1)|sda;
- I+ @0 U: i0 x# fscl=0;) J7 T$ u* S3 T& D% Y
delay();- i1 ^9 t# E7 C2 Q, V
}
6 S9 N. ^) q* y$ Y( @return k;% q& X: [! o+ d1 W* k
}
+ ^! j& r+ n& ?- T A
) f6 j: X6 d" k9 L" n: y+ k, E9 C" P+ h
//------------------------------------
; O7 E( A, ]; I! }" k4 G$ j//------------------------------------; z$ }* D& G6 ?! X a- U
1 F7 W3 Q9 O; v( ~: Q
/ j$ y) E( }( n+ O
//-----指定地址写入一字节数据-------& h3 k3 B. ~. w+ Q- z; S) \ u2 l
void write_add(uchar add,uchar dat)
* P* _# U! E2 x) B) D$ y6 K6 Y{
, i! p1 {2 o# t2 i B( }; dstart(); //开始- ~+ g- L8 V; e4 x9 v& N
write_byte(0x58); //写 器件地址及写信号
; K! @+ U- N- z" P: ]respon();
5 e/ N6 R: w( j! l9 Twrite_byte(add); //写字地址
7 {! v# s' ? T( f2 ]: zrespon();
; y8 {/ }* o B, y4 ]write_byte(dat); //写数据0 ]* A/ Z0 r& |1 j' _) F: b
respon();
5 E! [- B9 ^& s) t) e7 o2 V8 Bstop(); //终止
/ |& p4 Q" R# [}/ e! m1 i' C+ a
//---------------------------------8 J `7 U& u6 ^6 r
4 q. g6 K4 O c9 u* _ e6 W& f6 l2 |% }* D2 c) b
//------指定地址读一字节数据-------
8 a" T I9 V3 c: o: c$ Uuchar read_add(uchar add)
. i- |6 c) k+ K0 J/ [2 O{" I/ T8 L& j) S3 U) L
uchar date;
! ?1 a: L5 B) @6 D; |start();
7 O6 X8 n, A; ]9 h2 `5 z0 _1 {. \write_byte(0x58); //写 器件地址2 y& m! s8 k7 ^* B9 U2 S. q
respon();0 h Q1 k9 _5 ]2 `+ m2 X) O* d
write_byte(add); //字节地址4 K) C T }* X1 w) L
respon();
$ I6 Q* l: e$ t% s6 E/ i# zstart();9 p' _' }0 d" O# Q- W
write_byte(0x59); % B; W* i* F1 m7 |: E
respon();' e3 |* }* A( _ q. ?5 e- j+ Y
date=read_byte();# L) v, S" Q/ }: c: P+ R+ v6 z
stop();; G l+ w1 i& d
return date;
% l7 y0 G( t- C8 w1 g}
2 _% N; ~+ i) |" i4 G* b$ ]4 o( `7 b! k" J: k ^/ W
5 s( Z, [6 ]* E4 |, c: R
3 a& a/ y' ~( u5 B1 R3 }4 H% L3 i ~8 l5 M/ h/ Q" f, a
//------延时函数-------
9 ?, L' Y: v$ B9 P: Pvoid delay_i2c(uint x)//延时函数$ ]+ q0 |* b" A2 }( { O
{' a* Y' t% ]+ R+ c. ~
uchar a,b;
2 ~' Y2 @' ?8 A! r* U: rfor(a=x;a>0;a--);- ], |8 v, |8 q: S5 `. K
//for(b=100;b>0;b--); //速度较慢,去掉加快点8 F7 N8 g9 l% }: {1 H5 u
}, I* S$ w% W( A3 ]% b1 _6 M
" p, A9 i9 {9 _' Q/ |- m4 _
+ R4 J* B% V' s2 ?0 ?6 _( T$ Svoid delay10ms(void) //延时10毫秒, q/ d) _# v. q: h3 X: A- n8 |
{
4 n% D" }6 }; c9 U o unsigned char i,j;
9 o1 x' W8 ^5 w( g c2 D3 r4 g5 S for(i=20;i>0;i--)
: I7 v, U ^. g0 N& ]+ i for(j=248;j>0;j--);
' A) l5 |0 W6 x: d3 o$ S) b& q1 u}
5 e0 b( @# o/ K, r8 r5 G& p1 T w& T
6 r1 X% T7 h1 h0 ~7 D& z) ~
& t/ W W9 c9 n) ~- ^+ i8 G" I% ~( N
/***********************************************************+ q( B; |* d' l' j* b
. q% D) t- [, Z+ B* K6 j% p
1 i6 [; Y- a5 g. }: w( ?
0.1增加频率
: A% e6 [2 U- b! ] void addfreq()! T9 S# S+ X0 T9 t/ a
% I" N1 y& E. ~. s: [; T
9 t/ _6 `5 d, k! {/ Q. g**********************************************************/
& W( T3 Q3 w/ ] void addfreq() " r) i8 v# A, H- V5 |1 V* P
{3 H- c+ }" R( j' j2 A: A, c" O
. A% b" y9 I& T delay10ms();
% I$ c" \. T% `8 U if(K2==0) # U, s/ h V' m( `3 K& _1 u) u! y, l
{
6 e) N5 _& w0 ~9 v8 ~) g% j count+=2;) R/ q4 \; _ P% t" `
* ?2 {* e8 h7 [! z( Z. u
+ d: U! ?& e7 f5 K5 q if(count==642) //count=0对应76.0MHz,count=640对应108.0MHz,% r) |' ^/ n I& _ M1 \
{, U, n. Y. J5 v* J( {
count=0;# F, L/ f+ O# ?1 V7 o9 ~0 M8 a
}
! h6 ]$ {7 q: S- s K5 s1 _ }
) h+ j# d; w: X, \* x P0=0; //写入时关闭LED,使LED显示亮度一样
" D4 \$ }3 L/ c6 Z( n! @1 y SetCH();# b5 @' Q9 L+ i- h% F/ o
do {display();}
- K$ _! I2 i4 q |" K while(K2==0); //等松手,此时LED仍显示
, B; C% f% M/ A% c0 `+ f4 _ }
% b" |/ `( z) K /****************************************************************
" F6 R, s! C# B( S9 q; _! P( c
; o/ X4 }% z( T1 b
% m# K; ` v- U$ W; M* |- x$ H% F 0.1减小频率! s# d) u2 Q" y0 s% ~3 [
void decfreq()1 G! B D( J" Q [& E. }) d
******************************************************************/
- t4 m) F# _0 K6 d0 Z void decfreq() N. g& d9 ~' i7 I$ f
{
2 J9 p+ `, a( w5 L, l delay10ms();: {3 O: v3 S; H
if(K1==0)2 s- H: m- s& `( [, v( l' p8 T
{) H3 O2 I! @/ I3 q$ c/ R/ j5 ^
if(count==0)
9 q* ~* g1 E! H3 z* r4 F1 S {
1 Q5 X i8 N* I( v- U. E6 y count=640;; `0 \4 D9 }; }2 x, }" S
} q5 x0 T3 m# i- M
. c2 O" S4 x/ \4 S0 @
count-=2;. C9 l* |! ~- d/ u/ l" W
P0=0; //写入时关闭LED,使LED显示亮度一样
& y( E7 t2 g5 K( D0 s8 T+ r SetCH();# M. ]' o$ Y. ~$ x
do {display();}
4 k3 |" o9 ]2 U/ N- B- t while(K1==0); //等松手,此时LED仍显示/ |# F0 F, V0 M3 F
}" u! ]/ A8 D. q% N5 o
} ! a$ P7 \3 b5 F2 |, t
& R2 x* F: j3 j& ^ S
1 S" h, W8 U2 _/ [1 X6 c0 m0 U; Y
% [0 B5 ~: |* C% |2 P; n' \- j
/***********************************************************1 r8 {8 f0 M2 a& }9 R d5 P: l% y1 L
- R9 l& ]" a2 _/ B
9 ^: y) `- P' j8 F; {: h( S9 K
快速增加频率
, y" o. Z2 b; ^+ O6 P void fastadd()
; i G3 X$ \) }) W; D- s2 c
! X6 q, p/ J1 r o2 ?( z3 x1 c) Y; F9 o
**********************************************************/
4 e1 q( M6 h( ]% W0 T* x void fastadd()
: E% j3 W: d' B9 v; o% V{3 g8 j8 n3 [* P$ M4 F9 p
! c/ A9 D) e$ |2 a& q; E& w delay10ms();- L- |7 q: o+ [7 K, h
if(K4==0)
2 O/ y0 Z) R5 V% Z7 s1 r {# i* {: p9 r% ^& T
count+=2;) }5 `( B; Z& L7 k% X
- M* x. @. q# L) p0 N' M' O- h% u9 c" t
if(count==642)" j7 k% W1 l! P- @, g8 N; d
{
$ d9 [: o) M: V count=0;
p. a: F; P) W8 |% L A }
2 Z! T6 w& _7 c. a! E' N, t0 h }. a7 x" d% C$ e: e
P0=0; //写入时关闭LED,使LED显示亮度一样6 ]1 J& h9 |) s* X1 ?" m# H: o" L1 T
SetCH();1 c, L2 x8 O% Q d1 }. K/ O+ ?) w+ I
// while(K4==0); //等松手4 t G$ K6 C; p1 e" {, ^
}
) J$ j2 N2 \% _1 P! p* [) i /****************************************************************
) V! x/ ]2 d2 n5 w" B, _
, Y/ _% J# i, n! Y) g' F/ y
6 R1 a$ W0 A: B5 {& ]7 }7 O 快速减小频率
3 v h+ u$ q+ I! Q. J void fastdec()
7 l- j% S* A: Y5 M! e/ }6 ~8 D$ R******************************************************************/+ O: t- i6 Z$ L* k* n; t
void fastdec() " G% U+ [9 R* e8 @, D
{
0 a5 o& R# f8 T8 h4 m. b delay10ms();
; X% b F3 h+ C& l" B- L if(K3==0)
' a. W1 ^4 `" F5 a {
, `: [& x. z& `1 U; L if(count==0)5 ~( z$ t6 n( A- s$ F$ N5 c
{
9 x+ I' N" `. y9 j+ o count=640;" b! f) Q3 H6 E# s; Q* c# ~7 q
}
4 a; r. E* h+ L. `
' i j- O0 z9 a1 Y8 x! f+ H& A count-=2;
- \ K& |, x% o5 M- ~0 ^: k P0=0; //写入时关闭LED,使LED显示亮度一样
* `9 v* E! [4 T# E% l, p' n3 J SetCH();
& ]; v9 E$ S- g0 l* Z8 j& z // while(K3==0); //等松手
n8 `, [& h1 x& v/ r* R2 n }2 i. I; {8 j( V& K5 h9 ~2 G
}
Y7 |* m' s* m* J5 j% v1 J- O
! e" N5 r3 G) ^+ a 6 F. c. Z4 }! C
/*********************************************************8 z1 ]/ e, E. M4 |, i0 x+ _
+ u# ~/ s1 h p9 y, x2 V. B2 G: P9 c* }/ W/ o
显示函数6 f, c" t: S# g/ l9 _6 x5 a6 i2 r
void display(void)9 B. v2 M5 g$ u8 b I0 A V6 o* K1 k/ g
9 H7 P1 |, j' K! X6 [4 P1 p$ V) r+ w( a
*********************************************************/
@) K% I5 p, m( L void display(void)7 i7 Q! F; h: c7 g i* u* F
{
% D; ~) [$ |4 }9 |9 k! Q {
& ]9 Q+ K: D$ `) { f = (count*5+7600);
! ^) y" a- S c freq[7]=f/10000;
% T& L) s* R& q0 k5 N freq[6]=(f%10000)/1000;3 v6 O8 L: H$ ]
freq[5]=(f%1000)/100;
9 D; f4 z5 Y+ p, l2 f$ V8 ] freq[4]=(f%100)/10;
: v% T; \6 i9 K' T freq[3]=f%10;
: e- e, j" r% w" V4 @6 ]9 x4 `+ ^ freq[1]=11;
0 v9 F" b; t0 [- Z5 G B) G freq[2]=10;% C% U+ u% L& ?/ P5 I, f! u
freq[0]=12; / T& J$ f+ b" ^' L; b* v) C
temp=0;( O# `$ R x( |* b
for(i=0;i<5;i++) //后四位不显
. g2 @# A' Q5 } {
2 e5 A3 ?( [ } P1=temp;8 a6 K' H4 ]- z
if (i<4)
) I- u& z! O2 o$ [. u; v {P0=table1[freq[7-i]]; 7 G9 c' l0 i% s$ P
if (i==2) DIN=1; //加小数点 ! R: U" W0 p' M% Q. ?1 t6 k' S) Q
}8 ]7 h5 p% A& c0 {+ w
else , K& f' A8 e( E2 c1 i0 ]- N) p
{P0=table2[freq[7-i]];
! g2 H" _* T+ K* j/ G if (i==6) DIN=1; //加小数点
$ ^3 R/ u9 m6 `0 g9 v% Q1 } }
2 n+ W9 H9 `( v3 p, a temp=temp+1;) s! B) }: [. B; P$ k0 T
if (i==4)P0=0; //第5位不显
1 o3 p' K1 q! H for(a=10;a>0;a--) //延时; E' T# S% D" z4 p. d
for(b=248;b>0;b--);
. H) W$ _5 h1 p }) o' F$ c V, M- T8 ?, R2 {
}
3 X) P# _" \# W0 b6 [} - q6 Z; [& @0 T# r$ o' ]
) W# j3 m! o1 b& V! ^( V! O5 d$ v# Z7 L# ~! M( b
/*************************************************************
4 [4 [! A, K! P& V. ?* @$ E
7 m6 U- R0 v; ~( k) {# e# j+ E7 z; g; L: v9 n8 n
设置发射频率
1 ^) R; n8 w6 y void SetCH()
, W2 q' P8 D" G% \1 e) R( O0 A
1 r$ V& I5 ]4 O( r x: X/ ]5 b( c% J& y
************************************************************/# K% v* f$ j$ W2 J# R
void SetCH()
) O& p9 x6 D% {5 c+ D% F1 Y{" Q9 U4 C6 b u' q v9 B' f, y; @
FM8000_init();
( t# _: k' h3 [1 { if(count<=255) % e n# j2 A3 X+ M! q5 s- W& w$ h* e
write_add(0x00,0x20); 4 R( b5 ], M! }/ g- h$ \/ A( Z9 t; U- w3 _
delay_i2c(100);
' i7 [+ _) U3 }6 x+ z write_add(0x01,count); 6 |* C0 c% L: O) `3 {
delay_i2c(100);
e+ W' }3 B% i n/ y, {1 ~ /* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定
) A: s3 ]3 D' g* J% f8 [1 Y6 c delay_i2c(100);*/; Y: X, ~% n* s) v6 B1 T2 w
if((count>=256) && (count<=511))3 |( x7 L0 K1 g3 j
{ + U/ u% j5 t0 e, j# F
write_add(0x00,0x21);
3 a% P8 c& j$ F: H5 Y; f. ~ delay_i2c(100);7 }# x3 N3 R: B4 W$ Y
write_add(0x01,count-256);
: h7 D8 {, k/ z, u+ k delay_i2c(100);
' F7 L6 P J9 T {5 J /* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定 9 P: E$ p+ i0 T' p
delay_i2c(100);*/
- ]! [% d3 T1 n: Y }, I' s2 D* V4 u3 b
if(count>=512) % v$ h: N* j) _! O5 s
{ write_add(0x00,0x22);
* O$ U& H- Q* t: M" [4 M% K/ U delay_i2c(100);
7 g; v% R0 ^( z9 d& z1 b4 L5 T) V write_add(0x01,count-512);
/ A- p5 d2 ` u4 ?8 {: i delay_i2c(100);2 [& ?+ K- t+ _! w3 `1 D5 Y% b0 i n }
/* write_add(0x04,0x32); //是否把F8000内部晶振设为12MHz,自己决定 * R7 ?+ D& M+ J7 k4 i9 | d9 I
delay_i2c(100);*/
% R9 U3 @" o: w% r5 n' | }: p, |1 \6 A4 f2 e2 r
- T" D5 W% b2 a: v" d
c2 L% A# \* B( y( ?………………余下程序请下载附件……8 p$ B' I0 b" W7 e; _# }% m
下载:
" p* N" \- f3 r& q* n; `" H& o: b( X( ?0 |: g
0 B( b; h: [2 i8 p( l/ ]8 |) {/ a! e7 l0 r |
|