|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机音乐喷泉程序
, T5 I3 H0 G3 ~5 |1 z1 |: g4 `6 C$ U1 P+ e2 f) \: S' i% [
6 C5 M+ e8 D/ r1 V单片机音乐喷泉程序源码:
) g6 N/ v1 ?: ~# e- P#include<reg51.h>
3 G: y- @) P7 ]% |#define uchar unsigned char
! ^+ H$ s7 x% c3 u1 U- u#define uint unsigned int) ?# u) [7 }3 a; @' @3 `
sbit out=P3^7;
& ^* n* h, W# i, n1 j5 X2 Vsbit led1=P0^0;
* V$ g) q( m3 N; r" ksbit led2=P0^1;
+ U1 L2 `2 Q; _8 d/ o1 `. {6 zsbit led3=P0^2;3 J- V, B% x6 C6 C( y7 k$ }
sbit led4=P0^3;
' x G* }8 o! p3 U, ]6 z. wsbit led5=P0^4;
g& K, R, K/ V1 c3 ?+ p; h; C dsbit led6=P0^5;
. u+ t" Q8 } Z1 v9 Usbit led7=P0^6; O6 |. k* u$ Z, D' ~
sbit led8=P0^7;
4 x2 U+ J) Z) J' \7 b7 g: s8 D0 M. A8 [$ W' [2 v: p" F
6 |. ?+ p# Y/ Q3 c& m* Esbit SCL=P1^2; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚! m9 w1 z) F9 i$ w7 g9 s, x/ u/ M
sbit DO=P1^3; //DO定义为P1口的第4位脚,连接ADC0832DO脚# J, M( E: P5 v6 }4 I' s4 W, }
sbit CS=P1^0; //CS定义为P1口的第4位脚,连接ADC0832CS脚: p0 ]/ {8 w$ _6 ]* j4 r8 s! m
8 O. }, I8 T7 }3 b
: Z) G z8 y) y( @5 ]3 R# ^
* |8 h s# h' x8 C
: X. n' G: {- P7 F4 {' f; q! F# Q% e/ ~) h
+ P4 _! @8 I- V- b
uchar h1,date;# q# N8 @0 _( s7 _% f) p* A S
unsigned char adval;' H% F" @" c) ^/ m4 Z4 j
void delay(uint z): K. t( y% o; m( P0 s
{; S8 I' p$ C' w. i
uchar y;
9 T l; @3 `' e, x( C- c, U for(;z>0;z--)
1 b* X) C9 ^0 H- R for(y=5;y>0;y--);! o/ [2 O% D& P& f
}/ }6 D4 s, h7 d6 }
3 r" I- N9 \3 `: [
' _+ Z1 q2 r3 U$ Z* j- L
: C) @& p9 Y% ?, W% B4 p2 C/ O3 p9 \) y0 {8 M9 U$ R! W
/***********读数模转换数据********************************************************/ & g! E& G' w9 f
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
6 U. q, w0 Q" `7 y // 1 1 0 通道, m3 Z: }" x9 M
// 1 1 1 通道 & ]& \: y3 k; t
unsigned char ad0832read(bit SGL,bit ODD)* w8 Z" N0 Z4 ?: y- ^- j8 ?; A
{
& a5 g% b6 ~9 {- L unsigned char i=0,value=0,value1=0; 7 R( X+ e( z- ^% C
SCL=0;
* n6 j: l) [: S' J: A6 u, a DO=1;
! `+ r$ m7 a! a; J2 F CS=0; //开始2 U, U# Q$ m/ h' t) D! l! O5 e
SCL=1; //第一个上升沿
7 R9 n% v- Y# f# F7 b) @/ p+ C SCL=0;
$ H; L1 T7 K2 s* Y1 W' t DO=SGL;1 i5 L7 I6 o9 D, v
SCL=1; //第二个上升沿
+ |, a. ?9 T# \: S SCL=0;: Q" n3 @! R* b% j1 R
DO=ODD;3 P6 K% c$ [% M2 G8 ^
SCL=1; //第三个上升沿
8 X5 }- S/ ]/ }- U7 Y7 M) g* { SCL=0; //第三个下降沿
9 l, U7 v$ b# Z$ e7 d2 } DO=1;% E A/ ? y1 e
for(i=0;i<8;i++)+ ~! \# _5 h$ b4 @7 x Z
{
7 e' b# ]8 v2 A. h SCL=1;: L8 o- \5 }, V8 a: C, B, n
SCL=0; //开始从第四个下降沿接收数据% _( d% T8 J6 k3 B! A+ h
value<<=1;
( u, k1 F2 m& v% w2 s2 x0 {- T- g6 K s if(DO)* k p. ~7 d- I3 ?+ g' p4 H
value++; & r- X2 w9 M" }3 G+ ^3 m* y
} Q" `0 w ?6 F A2 F" z) [8 {
for(i=0;i<8;i++)" @& W1 i& [+ ~
{ //接收校验数据. C* I- _& v6 h4 u7 c: q, D$ T
value1<<=1;) t- A9 s8 z2 N/ I; q
if(DO)7 W2 L4 [1 e1 l4 |1 B4 V( r
value1+=0x80;2 F) e; M h+ ~5 `& w, L+ `
SCL=1;
# F8 }+ a0 l1 z SCL=0;
5 C0 i" @$ N, ^4 `; S: f }% \- [+ A/ H: J! Z1 B
CS=1;
8 V- R! c/ Y2 p7 v% i0 I! m SCL=1; ' g i* W, @/ f% t, s
if(value==value1) //与校验数据比较,正确就返回数据,否则返回0 - |4 |* f( H& W9 I
return value;
# L. s+ b$ f/ h I8 k% [( ~ return 0; c# z% `% w2 u1 H+ W! c* f
}
3 I. |1 {( P- P2 Y; k, X5 U- b! l! f& A
" ~+ g+ q$ `: P O7 t. [void penquan() //PWM调压
$ a. j a) V' J" s% z* X' f{$ `5 {/ O1 j+ o7 S1 P0 t
date=ad0832read(1,0);; y& `6 g. q1 `& c8 l4 `
5 U2 ?- x" }- O/ S4 `: E! f5 G" {
h1=(255-date);
- w) x7 c6 V6 q out=0;
! r! t3 E; I9 e4 A! r1 W' ^( t delay(h1);
# A& p1 F: A5 w5 e if(h1>30) led1=1; else led1=0;
: m6 A* K2 Z/ _/ u4 c 1 B5 h5 M! `0 `" o
3 o4 N9 T8 C" ^5 `1 a
1 @: u" f% r/ y" F8 d
# M6 n, r) ^7 J t6 H9 t$ F# g h0 {+ l
…………余下代码请下载附件…………
/ Q( n. A6 D( r: {( z3 T6 r! K- M% V+ P: W* a0 d6 F2 Q3 x; x% s6 n
下载:
* p; c3 e2 z; H- d1 Z- t/ [$ h$ a# p3 @
1 a. ~3 O6 x, W& Q
|
|