|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机音乐喷泉程序; E5 b$ `+ s9 e" J: k6 x! f- ]
' w6 h# G8 q1 z6 ^ _+ @8 p2 c q5 r
单片机音乐喷泉程序源码:( k* H1 h+ M5 n( e6 r1 W
#include<reg51.h>
L% q. D M6 D' Q2 h2 Y6 u#define uchar unsigned char
- P6 I' z3 t4 P3 h6 G' j#define uint unsigned int
& D3 ]) v9 ]; ~$ Fsbit out=P3^7;- \- R% Z0 c0 i# t0 p
sbit led1=P0^0;
~5 w' n; Y5 |) bsbit led2=P0^1;
1 ~2 q: x' M1 usbit led3=P0^2;
+ a6 t h7 I# M+ h! w( B9 }$ asbit led4=P0^3;
5 t/ w# M$ y0 t0 M* A" d- {$ Z% `sbit led5=P0^4;) w, d! R1 K! r' o$ Z
sbit led6=P0^5;
" J* P. E8 ~& W# R' k! Wsbit led7=P0^6;7 s: I7 I. l% J2 X9 D3 X+ C
sbit led8=P0^7;
8 A, P8 v* x" ^$ K
+ z2 [( u4 E8 ]( X& n" Y4 [, G- P4 \; U* i+ L8 L. K
sbit SCL=P1^2; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚$ R; \2 B( s E/ q
sbit DO=P1^3; //DO定义为P1口的第4位脚,连接ADC0832DO脚
/ p% I6 @+ B3 {* hsbit CS=P1^0; //CS定义为P1口的第4位脚,连接ADC0832CS脚( V" a0 X0 v* s' ~% k& e
6 z( w# q9 }5 C( W' H$ R5 y
+ Y; T- x2 U' r+ Z+ E6 W, a# Z. v" b4 Z' @: W) g! f
) C& M) Y$ K! u; a+ k: H/ `7 d( Q S2 X* y
7 w" C; J" p; r2 Q/ G# E/ Xuchar h1,date;" v9 v: `1 e6 w" n2 M+ _. N
unsigned char adval;3 f8 }% K8 l: v- x/ n, ^
void delay(uint z)$ _* A4 z" q: \4 \6 Z* T
{- M/ @4 F0 i7 I9 c! o3 d
uchar y;6 A' W& E* c/ K9 K" s( n
for(;z>0;z--)& O% X% s3 d2 h. D2 \
for(y=5;y>0;y--);
3 x5 e5 m+ c" R5 F( `4 M}
* {+ K- s. ?5 P5 O3 G s
. Y+ X8 Y4 d$ ~: L8 F; e8 ^( G; m& w% P( T- \
# u) ]' A& w* ~1 @$ g
2 R, T7 S1 w4 G* {; O1 J/ }/***********读数模转换数据********************************************************/ 2 l. v& l! F% t5 N# [3 u/ r
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的8 ?8 X8 g2 L3 Z( S! D# d% G# G
// 1 1 0 通道6 i: W5 w7 a, N
// 1 1 1 通道
5 C" J: m6 W6 E. _* vunsigned char ad0832read(bit SGL,bit ODD)1 z$ A. `+ T9 w; L5 X! v
{
% K& Q. w; c3 ^ unsigned char i=0,value=0,value1=0;
: L5 k. G8 o% w# m2 c. t SCL=0;/ s, Z- w6 }" y$ v, @ I
DO=1;
# X2 Y. d; L O2 k: D3 ~3 ] CS=0; //开始2 L/ S- \, O$ ~: {9 u+ E6 W
SCL=1; //第一个上升沿 4 [: A" D+ o2 n2 y
SCL=0;
: t, ~! R) h( M, G. Z4 P) e+ F DO=SGL;/ Y& P2 Q0 {- w
SCL=1; //第二个上升沿
! s j3 A4 G8 T7 J5 t/ v SCL=0;
1 F7 t% Y4 M8 e: _6 P: W- ^ DO=ODD;0 O) W/ ^1 G M9 z$ ~
SCL=1; //第三个上升沿
) l3 _' M4 i5 V6 O! `( _8 x- b SCL=0; //第三个下降沿
' y9 A" _; _& X0 i: ^1 I: @% ^& L- Z DO=1;
4 s) \. G) [/ r1 B' ] for(i=0;i<8;i++)
: `3 Y0 U" c+ W# M# U, ~3 m {0 }: ^) B5 L! G9 ^8 a4 K
SCL=1;
& l3 F6 j& D0 z3 t6 ^. ?# U SCL=0; //开始从第四个下降沿接收数据
! M! [! v6 G9 b$ X. t9 i value<<=1;4 M R+ i2 u+ `9 P: ^" u! v
if(DO)
, I# {- |2 b- _4 j! t1 r; K value++; * {- A: ?3 s- i P1 B3 A1 F
}
8 J4 n* t d' @1 I' L$ H for(i=0;i<8;i++)
- V5 @ g: R7 _4 M! j, e; T, W; C# ^ { //接收校验数据* Q9 n$ Z" h* b0 s5 f3 ^4 @
value1<<=1;
& M1 f) P: |9 [1 M1 e. K if(DO)
/ g: y- L5 b* T4 W7 ~) t2 l value1+=0x80;8 |4 V0 W6 r( u- Y5 h/ D
SCL=1;- F* T6 _: Y2 p5 f7 \ r
SCL=0;+ C' U9 X9 y* i2 W L+ k: R
}
2 X2 e, Y3 G( `; u0 m; x8 |# R CS=1;
: G% D0 D, F6 j0 ^5 h1 X) C SCL=1; ; m9 f r& u+ ?' e& K
if(value==value1) //与校验数据比较,正确就返回数据,否则返回0 7 L. m7 T- p2 E4 t9 l
return value;8 T0 V- w4 p( S( F
return 0;
" K8 |+ N2 j" u, z) x9 |! ?. x6 p}. a0 G* ^6 R; x+ L6 P
1 L: L& z3 E ~9 K' V, e7 a, k
5 @0 X! O# ~8 @% `; e
void penquan() //PWM调压, \0 M% e4 V4 N2 ?, h# o( O- B
{/ ~, m2 w3 a( u, |+ l7 R" C
date=ad0832read(1,0);* W' G. z8 @/ B- V7 g6 A2 Z
# b8 K9 U: X( v5 V h1=(255-date);
% H% R' P. U! f" I! P out=0;( u2 Z4 V& ~5 J1 U! o) P
delay(h1);
* W' K1 | A5 u- k- G. O if(h1>30) led1=1; else led1=0;7 i1 i% s! D, Q. I( _# G
' E- p; C7 l1 @# |. F3 ?
- x4 N6 i. F& c" e1 M: k
) y4 M" m% q, x+ s a0 b p& L" d2 t F. J- R
) L' k E8 F# e7 {! B…………余下代码请下载附件…………
p p, A, g, N( Z* u- m
' s( c' t7 H- J& v下载:. Z- G- c6 X" t' ~$ ~
. j$ z- I. N: ~: ~0 s
1 X+ G2 s, h) i4 o |
|