|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机模拟警车发声源程序: j) {# M! S( b+ h0 B
m+ j3 O( p) @) R
2 ^* ~: A( R& B" j \" [/ {8 h7 G单片机源程序: K$ I+ l/ k$ i& y1 P. K: m
/*-----------------------------------------------
& a R: d' L6 ^3 |) f( Z 名称:喇叭
8 y/ w! Z% s0 z: m& \, Q6 W9 l2 s4 Y& B 编写:shifang. B7 ^* V7 A$ {
修改:无* p; Z, K% a: G6 n# m
内容:模拟警车发声8 |+ m1 P9 Y, q: A4 k( x4 b, Y
------------------------------------------------*/8 H$ I r( \2 k! d8 G/ a1 ]2 `
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
( _- w( D) n) _. G V# }9 P- O- ]. Q) ~
6 y* s: v+ u& Ksbit SPK=P1^2; //定义喇叭端口
" ?6 J* V8 b' P: [ Punsigned char frq; # W( o9 N% i; x' g* C- o" q( b! ~) `
7 e' I: A8 B+ n( X( e6 ]- F0 q8 }
1 `9 T: k/ Q( O! v4 I& t# y$ Xvoid DelayUs2x(unsigned char t);//函数声明 % ^: I0 K$ i0 S6 X+ W6 r( C
void DelayMs(unsigned char t);$ h+ m( @* A! v( o2 j
/*------------------------------------------------
7 `( c7 f7 @* Z, w: x, x: T6 i 定时器初始化子程序
U4 m/ q4 |) b5 a# Z! y/ H1 h------------------------------------------------*/ Z! @# p# W$ K: k
void Init_Timer0(void) z, ^- \1 `0 O2 ?* I
{3 I1 ~% X0 x6 E9 i9 D# \
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 # g7 z7 c% K) D' `
//TH0=0x00; //给定初值
: m+ _6 o8 V4 m: y/ l9 s) ] //TL0=0x00;
9 D/ e% |. n. ]- m5 F, [9 a4 N EA=1; //总中断打开
$ x' B @. D6 M1 z) ~" x ET0=1; //定时器中断打开* q: s- y6 R" V3 {* x
TR0=1; //定时器开关打开
9 x' b' P" n/ R1 _}% m: N% i5 \) R Z* F! z
/*------------------------------------------------
' y" L1 \ B3 `- p6 a 主函数
; V5 d- w) L( c: v( Y- D3 \------------------------------------------------*/
; U# P3 ?% U$ |main() H5 Z( ^1 T- U7 J7 N& G
{: f- `( O& w$ S. w
Init_Timer0(); //初始化定时器
: y# |. [. r, @ a! M8 h( B4 j while(1)
1 N' K; Y* O" k! [8 E' l {
6 `4 s+ ^% c/ C8 I- N 8 d. O- y/ T9 C* G! Z
DelayMs(1); //延时1ms,累加频率值: j0 {, [, J, }$ y" @6 L% I
frq++;
& i6 [0 A: a5 B( x5 A% `: A 5 A* N+ b3 Q6 `, D9 D
}; Z m( z8 f, T0 m$ K2 ?
}
. _' D6 _- ~6 i! o* N$ Y/*------------------------------------------------
; s; X0 w% z$ e M3 |3 ^ uS延时函数,含有输入参数 unsigned char t,无返回值) b V+ ]8 J- I& J
unsigned char 是定义无符号字符变量,其值的范围是4 r2 s0 u% x; r: r* I \, Z
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时; q7 I2 A* c1 K8 d
长度如下 T=tx2+5 uS
( f6 q# A( u5 g------------------------------------------------*/
% c: M [' A/ u2 [void DelayUs2x(unsigned char t) b( d+ Q: T: T6 ]% F" O$ `; N
{ # j% f+ p' a9 B# ? z& W2 J( {
while(--t);
1 z- Q. G7 V# e}
% ]% m% Q z2 `/*------------------------------------------------
" W; Z5 Z2 r6 ?, U. n5 ` mS延时函数,含有输入参数 unsigned char t,无返回值' j% ^) p% d ~% Q( M
unsigned char 是定义无符号字符变量,其值的范围是
& Q% o& e. }2 j7 I3 s' d5 f 0~255 这里使用晶振12M,精确延时请使用汇编
0 ^+ e9 }+ [2 q* m7 }2 S------------------------------------------------*/
3 |" z9 g% n" `" n' ~5 vvoid DelayMs(unsigned char t)- i5 y/ ]; ^9 b" Q! d! }+ R3 }
{
9 M$ t, P* T# Y9 ~& G! J 8 K8 s5 U+ E5 Y- g: f, o) L
while(t--)
9 e3 r5 D# m' k1 j3 A- t {
4 `7 Z3 N! l7 v6 B- E$ V( P //大致延时1mS7 g& t! D- S4 Q* r, F( O; V
DelayUs2x(245);; X0 {: q. ^5 k1 [, x* F6 w
& }' d, a8 Y/ b% G
A; X2 o: R9 y, Q! J# d8 c7 c: ?/ k' L( _
…………限于本文篇幅 余下代码请从论坛下载附件…………/ c" K q. F/ ^
7 Y o4 N2 ? k: E# Y! j6 l; |
7 w: {: f' b; D, j- C" D! { |
|