|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机模拟警车发声源程序- d6 ^$ R6 {+ J- O" \
- f4 Y' q: @1 ?7 y, k
& Z2 P1 a6 e* ]: M j/ S& o8 j' o单片机源程序:8 @; _: X+ A* w, f8 _& U' h6 d
/*-----------------------------------------------1 R1 P3 ? A3 X( t
名称:喇叭
5 A9 ]8 s* e( u/ q 编写:shifang7 e/ q( I! p; G; C4 @! q. I$ n
修改:无 A( ?4 |( S; ?2 W5 ^8 W7 `
内容:模拟警车发声
) E7 l- C+ I0 b6 ]6 P------------------------------------------------*/
5 B8 v: B$ ?, Y" u5 ]! F#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义0 L% U. Q: Z9 n% t$ l
. a7 G- E; b# j3 C* g
4 W7 g* J! o2 i8 P
sbit SPK=P1^2; //定义喇叭端口
# E& J) e- Y* ~ dunsigned char frq; - x8 [( X+ G. C. L+ ~6 d
6 f* P1 j, L+ ]; A
# D" ~8 S' V; \5 Y" lvoid DelayUs2x(unsigned char t);//函数声明
$ ^+ u0 f# H& a- y9 J5 avoid DelayMs(unsigned char t);
# F9 M( Q, m6 k6 E# s/*------------------------------------------------8 M8 k% N/ O+ d
定时器初始化子程序
1 m% _/ X! A) a6 c Q$ @------------------------------------------------*/% P' } \3 _$ E! X+ N' C7 a. a' k$ @
void Init_Timer0(void): f0 d: `" @& O
{6 n7 P* K1 ~' F
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 ' O2 F( u+ h0 C: L! @
//TH0=0x00; //给定初值
4 M* ` C& p d5 } //TL0=0x00;3 q7 o7 \7 N+ l" Q% o9 A
EA=1; //总中断打开# _/ }$ C" `4 m: [5 `; z0 u0 k
ET0=1; //定时器中断打开
) c8 f4 P& Z4 V+ I9 l+ x( }2 t TR0=1; //定时器开关打开
7 s" H" I" E' }. d, @) e}) O: X1 v3 r" ]" @/ ^, {: D
/*------------------------------------------------
, o5 w- u& [5 z( {% m 主函数$ x5 y) G: `2 Y* W% j6 G
------------------------------------------------*/
" \; O! G% c- @3 x4 nmain()
7 k7 R7 w6 _1 C6 V5 X{
* c( C1 X( o4 X* i" C; h Init_Timer0(); //初始化定时器2 h) _( f5 h; W( ~( u6 u1 |
while(1)
9 `* }& h# A$ ^ {* i) [: N) {9 A! R
. p8 z! S# `' F& u# r B. ^3 R! |( } DelayMs(1); //延时1ms,累加频率值0 o- r7 ~" f v) D. t0 G% R+ w
frq++;
) i7 l" i+ s) [: G2 F4 u 2 R: m- {* \$ x9 R( Z. }' r( c8 B
}" G1 l! q+ k! I2 M) V+ u q* Q
}
0 P5 E8 g( D1 N* R$ q/*------------------------------------------------
3 d) y3 k6 X P2 I" K, {" T uS延时函数,含有输入参数 unsigned char t,无返回值
. b# z s1 i; r: I unsigned char 是定义无符号字符变量,其值的范围是" _9 G; h0 s" y3 V
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时; A5 k' s( \* M
长度如下 T=tx2+5 uS $ k! i0 q. a1 j1 V" P& ~, w' r7 z
------------------------------------------------*/, g+ ]( V9 N4 u( I5 ^; _
void DelayUs2x(unsigned char t)
1 \4 F6 Y) `' o: q# X{ 4 n6 b! B- R# W& c' n- M
while(--t);3 V6 }: Y9 f, }' P
}. [( F/ m0 e' C2 g$ w9 x/ H
/*------------------------------------------------
! n" c# P- E. s {' @$ y mS延时函数,含有输入参数 unsigned char t,无返回值, V0 A* s( ]- `' U' o
unsigned char 是定义无符号字符变量,其值的范围是, I! }" h$ \! ]/ @
0~255 这里使用晶振12M,精确延时请使用汇编
* o: Z" C8 e) D/ [------------------------------------------------*/# s y* b3 o* J; T" J1 r
void DelayMs(unsigned char t)
8 M V# g: n9 G) K6 v) `{
4 s6 a6 E# i# [, Y 6 L8 \5 e5 c+ C5 ?! R5 e
while(t--)6 V0 [. Z/ Z/ ^2 x i0 }: @& J
{) ^4 ~7 |( l$ B6 H. q+ _& I
//大致延时1mS
2 K; Y: b- G! n8 D DelayUs2x(245);0 D# d6 O7 |+ q2 e T& ^1 ^; r! n, K
8 l5 _- z" X# N* |7 z
7 M% A# \' j- a3 y
7 S* A. f, w6 N
…………限于本文篇幅 余下代码请从论坛下载附件…………
, Y) A- y2 }: C; j
- I6 y. ^) p# i" W
, i; D$ o# J! r4 k' E. z# D |
|