|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3D计步器的设计论文下载; K0 j0 p* }6 G* P4 I& g
7 M; m: x9 g/ D2 l
% r L6 x4 ] K3 K* ^6 w3D计步器部分程序:
4 {$ G/ M6 p. V) G3 G# X/ ~. E
' F C X2 [ c$ f4 |0 F
) a( t' b8 U Q! K. |9 j( W#include "reg51.h" + _- P7 @1 i' B! u( C0 e7 k
#include "intrins.h"
) o/ R2 N- x* c" ]$ V- \#include <math.h>
1 R% [- }! N: g& |* a#include <stdio.h> % `5 Z S( }0 ?* o" x. m
#define FOSC 18432000L $ m9 G/ L4 C9 y; z4 v
#define FOSC 11059200L //晶振 11.0592M
E5 ~# ~3 J& i! C#define BAUD 9600 typedef unsigned char BYTE; typedef unsigned int WORD;
2 \/ q9 a/ M/ I: K! I* D#define uchar unsigned char uint unsigned int( [& Y3 R; ]' s3 ^5 s
2 Z, e! d5 j- d4 j
/*Declare SFR associated with the ADC */# w" [* j7 y ?( B
sfr AUXR1 = 0XA2; sfr ADC_CONTR = 0xBC; //ADC control register sfr ADC_RES = 0xBD; //ADC high 8-bit result register sfr ADC_RESL = 0xBE; 2 c4 O& F" e# V( N- y" }
sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register * }5 T) q8 [, m) ^6 R) g$ q0 f% D
sfr P1ASF = 0x9D; //P1 secondary function control register /*Define ADC operation const for ADC_CONTR*/
: L2 A. e" A1 p' j# M6 K! \# V2 O#define ADC_POWER 0x80 //ADC power control bit
- H/ Z& c8 \4 A& G: x3 r* B#define ADC_FLAG 0x10 //ADC complete flag
0 T! l/ s9 e2 h- x" T+ c#define ADC_START 0x08 //ADC start control bit
+ n$ ~4 T& O0 V* s# G#define ADC_SPEEDLL 0x00 //420 clocks
! u! _" V& g. |" h#define ADC_SPEEDL 0x20 //280 clocks
( k- v. M$ G3 Q* v% e3 `% g#define ADC_SPEEDH 0x40 //140 clocks #define ADC_SPEEDHH 0x60 //70 clocks void InitUart(); ) J& n$ Z4 I8 n# B
void InitADC(); , M& y7 S3 i9 b7 Z- g' f7 c
void SendData(BYTE dat);
9 X0 A% H- z; I4 zint GetADCResult(BYTE ch);) L0 w/ P) t8 E4 C% h" |
void Delay(WORD n);
" f5 a4 A( |8 C1 [# R: Nuchar ge,shi,bai,qian,wan;
2 a# f+ w2 d/ f y" z2 NVoidconversion(uint temp_data) { wan=temp_data/10000+0x30 ; temp_data=temp_data%10000; qian=temp_data/1000+0x30 ; temp_data=temp_data%1000; bai=temp_data/100+0x30 ; temp_data=temp_data%100; shi=temp_data/10+0x30 ; temp_data=temp_data%10; ge=temp_data+0x30; }
2 S4 l: B2 ]: p2 T7 k2 c! x9 B7 Y4 I4 o8 y5 ]8 S
//显示变量( n8 {+ y: ], r* H
7 C. k- f C! g% l0 H' Y2 I
//取余运算 //取余运算 //取余运算 //取余运算4 p( I! R! D/ ?" t9 ^
4 y' @ d4 n+ R/*---------------------------Get ADC result ----------------------------*/ # p8 T7 g+ }/ k7 [( s
int GetADCResult(BYTE ch) { int AD10bitResult; ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); //Must wait before inquiry _nop_(); _nop_(); _nop_();6 H+ B& W& M, o2 C, t L
while (!(ADC_CONTR & ADC_FLAG));//Wait complete
/ }% w% J$ `/ a F0 Xflag ADC_CONTR &= ~ADC_FLAG; //Close ADC AD10bitResult=ADC_RES;
8 o9 b! }1 l* P* JAD10bitResult<<=8; AD10bitResult|=ADC_RESL; return AD10bitResult;
5 s9 J' [! U( R6 W
$ F2 ?; Z8 W1 i& I/ M' y; A//Return 10BIT ADC result
) l0 |9 {3 j* K' ~8 I; a5 B3 }1 G- _5 u+ s0 t9 ?! e# v
} /*---------------------------Initial UART ----------------------------*/ void InitUart() { SCON = 0x5a; //8 bit data ,no parity bit TMOD = 0x20; //T1 as 8-bit auto reload TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate TR1 = 1; //T1 start running }
: H& a5 j4 z; ^' O6 \4 A7 m
$ p" N# }) ~: Y
" d2 u) |3 P- F7 K3 C6 ]/ M/*---------------------------Initial ADC sfr ----------------------------*/ void InitADC() { P1ASF = 0xff;) |" l7 _1 t' ]( r8 u: a
! k' c+ B/ z# y9 x) P( q; t0 _//Open 8 channels ADC function X0 S$ _+ {# b4 G: ]# N0 b* g
, j* `6 N* q5 y+ n
AUXR1=AUXR1|0X04; //ad 值左对齐
7 B8 _3 j6 p: ]1 wADC_RES = 0; //Clear previous result
i7 e! P/ m- ~) _ADC_CONTR = ADC_POWER | ADC_SPEEDLL; Delay(2); //ADC power-on and delay } /*---------------------------Send one byte data to PC Input: dat (UART data) Output:----------------------------*/
. S2 O& P! t T# `void SendData(BYTE dat) { while (!TI); TI = 0; SBUF = dat; } /*---------------------------Software delay function ----------------------------*/
0 h9 ^, l; g" X' evoid Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } //***************************************************************************** * void main()
/ u( o# w W" c" O& c# r5 W
+ x5 T, y0 ~5 D* X0 W//Wait for the previous data is sent //Clear TI flag //Send current data
) k$ [6 |$ [0 w1 r/ D8 o4 {8 ]1 z' s. s
{* X* S% h( v( A! K' A' F
- s& U9 p( S: K) p# y' w…………限于本文篇幅 余下代码请从论坛下载附件…………
' I" z( ]6 E! @ }
, \" m! d# F3 q" W5 {" Y. ~ O+ b/ J `( V9 w5 R& `$ g/ B4 b( H
# A: o' y, i( {/ g- M' g1 ^) O/ `3 { |
|