|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机模拟警车发声源程序
0 I; }+ e8 n- I' y
7 R& ~2 p3 D7 ]: E7 V$ o2 x
1 N- N* I" u& [单片机源程序:, Z( S$ u+ d# q% g
/*-----------------------------------------------) ?7 i5 p' J- U2 D0 o- y2 j
名称:喇叭
# I" q* `9 q" A 编写:shifang
$ g: k% A6 V/ J3 T5 T 修改:无1 D( d+ ^1 {! Q- b
内容:模拟警车发声9 C; f, N' t! U2 {$ |) r0 q
------------------------------------------------*/
8 p6 D4 T L7 s; P7 R7 e3 G s#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义& x" ?! j1 E. I* ?2 f
4 {- @; G' z8 @! @7 ?- q" C* d5 R7 ~& E& K' _7 Z
sbit SPK=P1^2; //定义喇叭端口( `( u: |4 G C3 i. N
unsigned char frq;
8 s/ w+ l: U- E5 |$ ^. K8 J
9 e' ~1 Y1 P/ r' I4 H" q) Y4 @+ c( u; b- x0 o% o
void DelayUs2x(unsigned char t);//函数声明
5 A# Y, m6 ]" L0 g$ Tvoid DelayMs(unsigned char t);
# E, i( n5 x5 ]$ d/*------------------------------------------------9 w! i0 T" w* j" T5 k/ A* o, P
定时器初始化子程序3 p2 Y K* @1 `1 Q
------------------------------------------------*/) Y( T/ q/ R* O/ Z6 H D. P: q
void Init_Timer0(void)
: _9 z, c9 n) q% T{
: ^5 m& m7 H; v# h TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
n7 |, |/ E$ }; T$ Z0 Y //TH0=0x00; //给定初值0 |5 A' X5 J9 c! {2 B$ w& R
//TL0=0x00;
2 g" a: R" f% q EA=1; //总中断打开" y5 X( V3 U$ O
ET0=1; //定时器中断打开
$ A6 b. \2 Q' f; S+ c. B6 N TR0=1; //定时器开关打开5 M4 p {& B( B3 t: [8 ~
}
$ ?0 ~4 k3 T, ]" w5 h/*------------------------------------------------
: P3 s0 s \. ~/ i# [$ ~# ^ 主函数, j* `/ g3 V0 K5 o1 S& _* j7 @4 k
------------------------------------------------*/ x) [2 D6 b/ |; y, v. U3 B
main()
3 Q! Q' p: r$ ^* T{
5 ~, Y4 T: P, s Init_Timer0(); //初始化定时器
t a# G) f5 j# V8 |4 G5 W while(1)
0 ~+ b5 d1 H2 E" X: c7 c' `" _! t) f {
$ o7 q* v- _8 W) X
$ k* _0 N: V) W4 n- [* j" `' K DelayMs(1); //延时1ms,累加频率值
& K0 O; L/ c3 T5 Q3 D2 D! I1 s frq++;% D7 M! k6 `$ R; R7 K9 W
4 _0 W$ b/ i! `7 V5 \/ Y4 e
}6 `0 [9 P4 F* E! k# L% p; w
}- V0 x, l/ K6 |
/*------------------------------------------------1 {' L! [% }9 F, S7 p
uS延时函数,含有输入参数 unsigned char t,无返回值5 \8 S y# v E! _
unsigned char 是定义无符号字符变量,其值的范围是+ G& s( }/ d$ g, v9 W; _# y
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
% L, N* e5 l5 [6 K5 ]- \# c 长度如下 T=tx2+5 uS
% v9 k# w c5 ~; n; k+ @2 J------------------------------------------------*/% _' O/ q* m3 Y# S6 _0 {
void DelayUs2x(unsigned char t)/ e. y7 m* J. P9 L9 C/ C
{
5 d, ?+ n) F! ^* K) b Y6 T0 P while(--t);
" L: w3 y* n7 G. B, X C+ T}- j; P- p! J1 b9 k3 [$ G/ B
/*------------------------------------------------0 k/ T2 m6 b i% z( K# K
mS延时函数,含有输入参数 unsigned char t,无返回值
! Q( b3 Y! G o1 p! l: Q \3 ^/ M4 @ unsigned char 是定义无符号字符变量,其值的范围是6 f- \. P8 p6 ?- e; p! j2 E/ c
0~255 这里使用晶振12M,精确延时请使用汇编
( D# k6 D! R+ e' r& s------------------------------------------------*/
- t2 } _% H9 `5 X# Z4 F" i( |void DelayMs(unsigned char t)
: G0 D, @- k3 S* M6 f8 [' N{2 H% z- a* c; N' `7 Z
3 o s1 ~' B' U! k- n
while(t--)$ n" b) a1 i: f) v+ y+ c
{6 u2 @. S2 \) ]. B! l
//大致延时1mS
" v/ r) z Y6 i C( a6 C% d DelayUs2x(245);; W# G( W2 J! U* i9 }# s" |
, |7 N+ f2 p, l% E5 _) t9 S2 C# n9 v% y6 a! q
# _& }$ t# Y( a7 Q) b1 u…………限于本文篇幅 余下代码请从论坛下载附件…………
$ p" n1 ?1 [ f
`# f* `8 O6 T! D. l$ c: B
5 y% L& [) U1 e1 u5 } |
|