|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机音乐喷泉程序
/ d5 F$ h7 ^! s1 v& l3 D5 L9 {$ s9 b% @
% t. X6 z8 ~. G9 ]# E单片机音乐喷泉程序源码:
+ W. q5 c9 C+ j0 q; R#include<reg51.h>! N" {( v$ q8 Z. B9 W
#define uchar unsigned char5 D y4 K' e5 g8 R2 e: d7 j e
#define uint unsigned int4 Z1 u4 C& }# G1 o5 k3 A5 ^7 ^
sbit out=P3^7;) I' a& @- {1 ^0 L
sbit led1=P0^0;- M" y5 `! `1 o
sbit led2=P0^1;
$ f z0 {' p7 {9 [- l6 O0 X7 csbit led3=P0^2;7 S5 y1 }9 M; Y2 U6 N, f5 j2 g$ q2 p
sbit led4=P0^3;4 \: |. X* x, r
sbit led5=P0^4;
3 j2 i4 X, O2 ^# @4 {sbit led6=P0^5;
' {& E! ]9 ?- S! ?& E1 M8 E2 Nsbit led7=P0^6;6 o0 a+ R: y$ E3 N1 l. k6 ]
sbit led8=P0^7;
, a+ v" Z$ v: c+ k6 S' }* E u4 ^3 b' g; j& W
+ o( u" a( Z# i7 h* C6 r5 {
sbit SCL=P1^2; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚
, R+ x+ k5 s. r+ g8 C9 Osbit DO=P1^3; //DO定义为P1口的第4位脚,连接ADC0832DO脚% |; ?0 v; J# y
sbit CS=P1^0; //CS定义为P1口的第4位脚,连接ADC0832CS脚+ {2 Y9 h$ j, T+ ^- c5 r7 U, A' k" M
; Y, k) I' G0 H+ m0 y( q9 o! D
$ U6 j, G! Y) m2 @8 {- r, T6 h
6 i/ S3 \" ?+ r; {" S
( j& J( K6 w6 T% g* b/ v! R: D: A! {. k- x8 U
+ |+ B% S* e8 i( P8 U4 B+ b; I# zuchar h1,date;- }. B- o) D: x) P7 G7 u# c$ t
unsigned char adval;% D5 {! k$ G v% X( [
void delay(uint z)
7 S: j8 y+ h" c, `{
. K3 {3 I# J! p1 p+ r7 B uchar y;
, E2 V' U: R5 e/ T8 a) t# G for(;z>0;z--)- ?7 P4 O" b# k% _- _3 W" ]1 j
for(y=5;y>0;y--);
+ {$ w: \" d7 x6 c}; j) l w4 G6 V) | t7 S$ T- B0 c2 r
8 `# E7 u, U2 X4 X5 M8 F+ E
1 \' @7 U6 ]. }; b5 m0 k1 v2 _6 ?8 t% G1 B. D6 y
* Q+ }2 r$ a5 I, e/***********读数模转换数据********************************************************/ - ?& b. |( d, s8 K
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
' C# x! m4 P# o // 1 1 0 通道5 D& ]. L4 V. f% n9 }
// 1 1 1 通道
9 E6 t7 w% ~2 junsigned char ad0832read(bit SGL,bit ODD). }: {. @+ Z1 v7 o* I4 w
{. h! ]" Z6 H+ w6 {# D
unsigned char i=0,value=0,value1=0;
" U$ B- _$ y' d; y SCL=0;8 K# F4 K3 P3 M. s4 S
DO=1;: z* G) S1 J- x+ M: h
CS=0; //开始
2 e9 E# J' r* c w SCL=1; //第一个上升沿
& t8 y" N) e4 e SCL=0;
, Q* S8 Y9 X I6 X3 `7 a4 d3 x DO=SGL;1 g3 }1 y* |0 j3 P5 h" s
SCL=1; //第二个上升沿 w. p1 M# ~2 B8 P6 @2 J
SCL=0;' b; f2 ~, i0 r7 o5 Q% p! s' e
DO=ODD;) P4 X0 S5 v& X X$ d; }0 e
SCL=1; //第三个上升沿/ Z5 {9 B' w- ]" ~
SCL=0; //第三个下降沿
m3 E) O* g& k: p, O+ M( H DO=1;
% k9 E- g9 m3 |0 r1 D, Y- z0 ` for(i=0;i<8;i++)
0 F5 z3 g; i1 `! P {
7 r- h+ x' y& h& n$ D# F2 e SCL=1;( u3 M, o% Z: Q9 p$ |& j
SCL=0; //开始从第四个下降沿接收数据: Y) i& Z) `6 M; G; C6 R
value<<=1;6 _( ]2 A: r1 v& n
if(DO)
N8 w9 C: C7 o! g0 c* b value++;
( u% O" `5 A) I4 @" z }
' [8 `; H# M+ R3 M! x for(i=0;i<8;i++)% }1 j2 ], m* T
{ //接收校验数据
1 n6 t) D: H9 w" E/ A value1<<=1;9 z6 v! v8 p; j! ?: x+ @0 S& ]! {" u3 ?
if(DO)
2 t* S0 I# v- M# O: R, w5 r x value1+=0x80;
! ]! ^, K: t8 G. Z( k SCL=1;" ~+ ]2 _4 I, r( `2 q3 J$ f" R
SCL=0;& f$ [$ H @; |
}
' Z5 e: s: ^3 L) k% E5 @2 r4 U CS=1;
# [& q( A. }1 K: h SCL=1; " d$ \4 ~: u, x1 h( P
if(value==value1) //与校验数据比较,正确就返回数据,否则返回0 2 q% S, S3 F, O- @5 F4 @& f
return value;
3 |- T1 [1 F: B) X: e* ^2 b return 0;
" S, X* c1 r1 T0 ?0 R/ m" h# p}+ k; `; ] t" Q7 _
7 O1 z7 Y( M) K" m3 @$ J; l6 P1 ]& _, w
void penquan() //PWM调压+ H% t+ d; p% g* \
{
0 U. R! Z' g A5 B2 }/ T4 a6 v date=ad0832read(1,0);
( W5 K/ F: L9 U F1 E3 f1 ~/ t+ w
! M3 _: f/ r0 h$ Z6 q; s h1=(255-date);- g; p; x/ G; Q/ W; s
out=0;& h0 }2 [, x# a/ x& h
delay(h1);
# S. W3 h% q4 _1 g; o if(h1>30) led1=1; else led1=0;
6 K+ e5 @% g1 u# G( b
& X4 r! N$ |! K, m
7 m/ x" D+ F4 K- @' s& l
7 k1 s2 q( s8 y9 B8 m6 G' }% O- ^$ D s& T1 A" `, g( y0 ]: ~
6 O- o9 b0 p, K" ~! L& @% S0 z
…………余下代码请下载附件…………
) X# l8 {1 n0 u+ }0 V( P8 n' o
; m* h( ~( D7 U( e+ ~$ C; E& {/ O: J下载:& q% j- _4 g: W2 N
z0 c' h2 Q0 f# T! f, \$ q6 h) g8 W9 z4 J X9 u5 \
|
|