|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机模拟救护车声音 喇叭滴答声 源程序
2 d. Z0 q: w8 ?' q' R/ r/ \: a; ^$ G! S- ` ]+ {- H' C3 e
$ h- B6 D i, E: Q) o$ Y8 u( e! ^单片机源程序:
0 b2 e" [% J G- t Y0 c/*-----------------------------------------------& B' J% U5 S3 B
名称:喇叭
: j8 f' ^* n% \& ?% j9 s& v 修改:无
# y5 q! b- @& Q3 z. H( c 内容:模救护车发声
. L5 L2 g4 A" u- [------------------------------------------------*/
$ |3 i7 c( y5 z# ~#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义- k6 z8 Y$ S( j# P- T& n- }" C1 @
0 h, k8 H: g( I; T0 m
sbit SPK=P1^2; //定义喇叭端口
4 [! [' E' C% W% R: W* a, }8 yunsigned char frq;
8 B& e, Q) J' r6 ]" T6 U: @# }; x) S2 r. A! K; ?
void DelayUs2x(unsigned char t);//函数声明 % r. C8 ^( K1 D% I# M
void DelayMs(unsigned char t);
) _' B9 I- z. ?' \8 f/*------------------------------------------------
# g. d, B U" W0 f9 ?' A0 e 定时器初始化子程序; {& x. B: S# X5 L( I1 j& B5 k; X
------------------------------------------------*/
6 p8 i1 l4 U' _void Init_Timer0(void)# g. Z( }, p5 F, p; j* p: A
{
+ J9 U0 L. C9 o% t: W TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
' B, K/ x. {% J* T$ ? //TH0=0x00; //给定初值 W4 `1 k7 L. {/ d
//TL0=0x00;
6 H) e. a$ X; Q0 g EA=1; //总中断打开" q8 ?) Z }9 ^3 o
ET0=1; //定时器中断打开
8 B: W. e( E8 V TR0=1; //定时器开关打开
7 W! `8 m; {0 a5 v2 F7 ]}
/ d" h3 V4 Y+ n8 Q. v/ u J/*------------------------------------------------5 a3 W( }* j) A
主函数
; f' n6 ]5 S& d6 Y; M------------------------------------------------*/
! w( s/ V) ?& O2 `+ W/ \. mmain()
* q" M1 G( ?: r# Q6 @6 n{' R' r1 M( [* H
unsigned char i;1 i4 D# b% [9 K' J" ~2 w
Init_Timer0(); //初始化定时器
7 O. F, _% c( C( X while(1)# w8 t" L( n4 o; S% N6 I8 k
{. M. J9 r1 w% }8 U2 @% z/ v
frq=0;* q1 C0 t/ d' N- X1 D
for(i=0;i<60;i++)//播放1s左右一种频率
3 C) p- S2 F U C9 o7 ~: j" c, D2 f {
9 [' |8 j5 G& o/ F DelayMs(10); 0 [" ^" Q& b2 m1 m1 p
}2 I5 K4 X: H7 Q/ ^& }
frq=100;' N+ _8 T% {* ^! b3 u2 V
for(i=0;i<60;i++)//播放1s左右另外一种频率
, `( j4 l' T) D, V. E( a {
% f( ~, w6 P3 `' j DelayMs(10);
/ j ^% B1 q+ }6 d( y0 i }
- U% @) R9 Y) B( @4 N& P
" A- \$ S7 |8 } D! F }9 V! l2 ]) D- A
}
- a. a/ I C2 R2 Z9 |+ `/*------------------------------------------------- S* ~2 |8 g$ L9 L# p0 `" R
uS延时函数,含有输入参数 unsigned char t,无返回值
9 }- \- j* T5 a unsigned char 是定义无符号字符变量,其值的范围是
b: U' k& c7 w. |% ~7 L4 A 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时6 U* U* j9 @3 B% `7 @3 D* P1 _" f
长度如下 T=tx2+5 uS
8 e& o4 ]5 O' d: u$ f------------------------------------------------*/ s4 D$ }! | D* c" A. i8 n
void DelayUs2x(unsigned char t)
K; V/ d) B( x4 z* \4 z) ?{ 1 @& d4 _% A. R$ I" L
while(--t);5 a+ _; {2 U2 z( M' X/ }* N- \4 {
}5 |3 ]* I u C Q- w8 F; n
/*------------------------------------------------
# ~! Y1 B& G" v mS延时函数,含有输入参数 unsigned char t,无返回值
/ V6 N7 Q. ?2 y B; {9 Q5 Q& a unsigned char 是定义无符号字符变量,其值的范围是* G' o/ `( a6 j/ z. |6 n
0~255 这里使用晶振12M,精确延时请使用汇编 B/ Y1 d( g' I% j3 r' [
------------------------------------------------*/
m: q5 U" s9 |void DelayMs(unsigned char t)
5 k, H! T0 Q1 w4 H$ y{
; v1 }' t4 Y4 d% s7 o
! {* [4 [" q2 u while(t--)
4 B% p- `" J. @9 g {
1 \! }/ @% S+ E; j U //大致延时1mS
" l; }) q0 K: I3 T. ^9 c/ v% t( g DelayUs2x(245);, ?3 v; g3 ~" `% i1 j4 I
DelayUs2x(245);1 @4 E9 {$ o7 k3 J# ~! R
}
5 G- ?* y ^' x7 B/ X: I/ A' p}
% ~* G+ e0 S$ a7 r1 a/*------------------------------------------------
0 c. s! q! q( M# u 定时器中断子程序
; T* a: ^1 n! h2 u4 V) g, \) g------------------------------------------------*/! p% E' t/ e6 z7 e! T
void Timer0_isr(void) interrupt 1
! q+ T0 V4 j: T$ D. |{
/ z R5 }' X! q" [/ j# G& e+ [5 y( O TH0=0xfe; //重新赋值
9 n& s2 q9 F3 H$ l; x TL0=frq; //低8位值在主程序中不断累加1 o. t+ I$ Y3 z! o
& i) i. T5 [& d& d+ d: D1 @. ^8 z' O0 k
…………限于本文篇幅 余下代码请从论坛下载附件…………
/ W4 R2 ^, N+ I! _# x) ]- {0 M9 p0 I: f. h. L
0 c( ~: h/ a* c; K& A/ M
- F% i/ [; r7 n, Q
9 u8 x( H( X& F9 L5 o( O/ J, O( L, L. N* w" L2 G# o) g
! X1 t- X( Y2 H" O( y/*-----------------------------------------------
; }( {$ _1 b9 @7 M6 T8 F7 ~5 U5 |4 E9 w 名称:喇叭7 _ W( P3 f5 F) u S
修改:无
* a7 V ?, A' T5 N/ k 内容:模拟滴答声
j" Y; ^$ n) ^2 H: T0 ^4 |------------------------------------------------*/
- Z8 z- s# [ b. @7 i#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- _4 r! p5 f$ ?
1 K( q" t7 R; ]- q. T* Csbit SPK=P1^2; //定义喇叭端口
# Y# e: l+ `1 c; U( i- vunsigned char frq;
! \$ I) @4 _1 r0 F
: W1 Z1 r5 x, Z4 T2 lvoid DelayUs2x(unsigned char t);//函数声明 # m# E' b) U7 ?% t7 p2 w
void DelayMs(unsigned char t);
% a) G, `7 v5 [& g% L$ g A
. e, q( C$ q5 A/*------------------------------------------------+ o' r, m7 p7 a, m S+ ~0 K# z; ]
主函数
5 E% M% z2 s2 g------------------------------------------------*/
8 s) D; a( l% g" ?- u7 ~main(); y+ I% s( C N$ U3 [9 Z8 w0 I
{) O* Z @1 {% e6 a% T% a
unsigned int i; j1 I. }" y' Q
; F2 \ b. a* Y7 z! @2 F
while(1)- ?; B; g* P! O9 I
{
; ]1 \) L+ G; c* S- K8 W/ H2 U for(i=0;i<500;i++)/ d0 z) {% k" M( {) z$ Z$ I
{
+ X% s m0 R3 Y& n' X DelayUs2x(200); 9 G0 B9 Y4 ^$ x+ {% [9 i
DelayUs2x(200);
/ a/ j0 R E& X# q" @: i* h SPK=!SPK;
1 C8 v# n! ?9 Q }2 x( J1 x" ?9 J8 z
for(i=0;i<500;i++)$ D4 n; {3 A# @5 i) S3 [8 B/ n. S2 Z) L
{$ \- `4 {# E- E* W, y( [* f& X" d
DelayMs(1); ; b; V7 G: w. z2 f# C5 z2 M
SPK=!SPK;
( I8 K- [" p+ k' @ J: z- { }/ H% E7 n3 e7 x( |: M$ Q* q0 D# p
4 `1 v h B1 X' g& n) t }' r1 ]1 Y i( v0 q# c
}
* N% n. x6 l5 o' s4 a/*------------------------------------------------# A; c& g( D% B/ g) }( U
uS延时函数,含有输入参数 unsigned char t,无返回值
/ X5 N- c. \" T unsigned char 是定义无符号字符变量,其值的范围是. J" f* W! m! s% ~
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时. G& g, G; m) C/ g: J- j0 v2 y& a
长度如下 T=tx2+5 uS / A2 r ]9 p! x( C
------------------------------------------------*/
7 ?- ?" v& ]% B" _3 Xvoid DelayUs2x(unsigned char t)6 A0 N- c: r6 z7 e' \
{
+ F9 a/ x$ G5 u9 p( x" Z: w& _ while(--t);
: L& }# H2 C& C4 I" t# {' z}; o; |3 L9 X3 Q" [" S
/*------------------------------------------------/ W5 u1 N) ^+ _6 o2 a9 D
mS延时函数,含有输入参数 unsigned char t,无返回值& a6 i) z, I$ `0 \
unsigned char 是定义无符号字符变量,其值的范围是. s% H, K, @- o% m+ t% V
0~255 这里使用晶振12M,精确延时请使用汇编0 G8 {7 f3 e* I8 b5 y0 k% t1 ?
------------------------------------------------*/: v2 n' L; K) X0 ?& [% H5 `- e3 W, c
void DelayMs(unsigned char t)
2 D$ r0 B d2 y9 D) z{
, P8 N/ U E6 K/ M4 \% I0 i( _
4 @9 s4 p/ H9 R6 N3 Q while(t--)
0 a2 Y& v! j) ]) @9 k% q4 Q {: }' F9 n8 H, M% x
$ w2 }& r: y, d# o: y- g5 _
f* i, L$ G' e- W! i9 `* J
…………限于本文篇幅 余下代码请从论坛下载附件…………' l* B; x% U. A7 S7 D/ t& K
3 E/ M' F/ T( Y2 T6 W6 U& a g
2 N3 Q- |( T8 ^' b/ J8 S4 l/ m5 N* F' e! K O0 A; L" W3 F
& Z: j$ l. _5 b( ` |
|