|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RS232单片机串口实验4 ]+ _/ x/ z. F* S4 K% y
. j- N, m9 J! m1 ~5 k
3 J! w( T& A9 g: @RS232串口实验,在附件里,一共有4个程序 分别实现4个不同的功能。
* o& d7 O3 T- n! K5 H J' U% E9 Q. o; R$ x9 o2 ^) @2 a: \
LCD1602显示接收到HEX数据- q( b! ^. S3 v# p4 l) K0 ?
数码管显示接收到的HEX数据
) n2 l% H e4 m: j) K2 |# ^, h返回接收到的数据# I8 V Y/ {1 N
发送数据
) c. S; g: t$ R: d$ _, ^& V& e' X, u
下面是数码管的那个源码: ~6 F2 V% S- p* O
/*******************************************************************************
2 j2 H Y7 X: L. \% P* ) r1 t4 C. c' c0 Z& q. D: L/ i. X' }9 ^
* 普中科技
$ \. J1 P# Q1 u* ?: X& e1 i" V3 A--------------------------------------------------------------------------------4 k, ]& ~8 U" L+ X7 V) {$ N: T
* 实 验 名 : RS232串口试验" Z( g$ p# ]+ F9 ~. S% L
* 实验说明 : 单片机将串口接收到的数据以10进制显示在数码管上。
- b' U$ n. [* p. u d* 连接方式 : 见连接图
7 _2 }* |, `+ S9 \* 注 意 :
6 l1 B4 G* e8 [4 u" M*******************************************************************************/: \& ?9 D6 ^+ |7 u0 p% q2 T
# Z% c6 r! @0 i! j. Z7 R2 ]
#include<reg51.h>
- D5 A8 W0 V% G: W) `1 ]% E, q2 g6 Q' X9 _, w* u. {
//--定义使用的IO--//
% [& ~( x1 {$ u* ]3 }; W( m3 z/ s#define GPIO_DIG P0% r% j4 `" }; B& c
7 i9 T3 h# E/ U2 u8 X) k
sbit LSA=P2^2;
` }2 S0 v1 M" Esbit LSB=P2^3;# g3 f# `* @1 D' V6 z {) g: F2 n
sbit LSC=P2^4;7 v& m) b3 a4 r, } U& [
. O+ F# [3 w8 G
//--定义全局变量--//# U% e0 i! X; X' i
unsigned char code DIG_CODE[17]={
$ R. G* g+ o' T3 P) E, ^0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
u' I2 w2 _1 f$ u6 v% I& D9 T' o0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; U! F ~* c7 H//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
' b# n/ Y. S, Punsigned char DisplayData[8];8 X1 y1 U: v. x* a: q
//用来存放要显示的8位数的值5 }# }2 |% |4 v
& x+ Y. j8 n/ k2 H
//--声明全局函数--//7 r- Y* r/ D9 }
void DigDisplay(); //动态显示函数
) H5 s7 I. Y, V) T# G0 _3 B8 E! bvoid UsartConfiguration();. A2 C, X3 c, H/ i/ _
/******************************************************************************** R7 t0 W; O) k! @" p* E
* 函 数 名 : main) k& ?' @ w/ j# Y
* 函数功能 : 主函数
+ V2 E% d& a3 ~" y: V8 z2 x p' |* 输 入 : 无
0 V3 m, |; s6 S* 输 出 : 无9 [) o7 i2 d. Q: y# H
*******************************************************************************/3 I5 Q9 S2 y. b3 y& F \
G0 e' [" W( v( u& N) Jvoid main()
! Q: G! _3 R" F{% q# e1 x* a$ C) } ~3 H* v
unsigned char receiveData; R; `7 Z% T0 f; P% S4 d
4 E( U5 H, E1 a: i
UsartConfiguration();+ @& |2 ^: o2 Y2 T
while(1): Q0 m4 ~5 o0 z/ B
{( f2 A9 o: y* j c$ R+ Y) k/ r6 P
if(RI == 1) //查看是否接收到数据$ {) I7 ~0 J4 }+ J. G% Y
{
7 f( c6 E- Q% q+ f; q8 b receiveData = SBUF; //读取数据6 d' M) G' P/ e4 D+ Z2 {. @
RI = 0; //清除标志位
! v8 o9 C: `& m0 n' C* Q# ^/ P" A3 l- W3 I( G% ~# C7 j" d+ Q
//--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//
% X) |- F- {! n u DisplayData[0] = 0x00;
! l2 g" u* G j7 H) @ DisplayData[1] = DIG_CODE[receiveData / 100]; // 百位# Q# g/ ]$ _' x+ b" \+ E
DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位
0 z* x/ f8 O5 \3 _% C7 h DisplayData[3] = DIG_CODE[receiveData % 10]; // 个位( u& N, V0 F% B c4 N5 f
DisplayData[4] = 0x00;' Z. _& p& F( {( h/ N8 m
DisplayData[5] = DIG_CODE[receiveData / 100]; // 百位
# G1 \; @# ^0 @5 E* ~" R/ t DisplayData[6] = DIG_CODE[receiveData % 100 / 10]; // 十位2 F3 F j) e( j; c
DisplayData[7] = DIG_CODE[receiveData % 10];# t- E; Z! ~% C. U3 c$ i9 M
}
5 m8 Y$ |$ F% V& z$ t DigDisplay();+ a3 n3 }% b5 W) H$ j
}
% o5 V5 ^1 ?& O9 _/ E}# t: h# x% M8 E1 s, b
/*******************************************************************************
2 V3 B5 e, H: ]# `' Y7 w* C2 M* 函 数 名 :UsartConfiguration()
7 k' a y1 _0 C2 \1 p' D* 函数功能 :设置串口7 X; ^" }8 g0 B; P _7 P
* 输 入 : 无
5 A# \$ K: |2 W: |- U* 输 出 : 无- I! {$ t4 q/ l" Q
*******************************************************************************/
1 t2 X3 w# z* u3 E& U' [3 {' R7 f
6 F Y- A) _ I5 vvoid UsartConfiguration()2 b& \4 k9 l+ a$ m' T6 y. U
{& z% V( l( }* t
SCON=0X50; //设置为工作方式19 n# z8 [" K+ D+ O8 v8 S
TMOD=0X20; //设置计数器工作方式2 r4 \' n, a' n2 X3 \( ^' j1 h
PCON=0X80; //波特率加倍1 u9 l8 @* f' q: p) o! w/ N7 I8 w- ~
TH1=0XF3; //计数器初始值设置,注意波特率是4800的1 B2 ~& e. j# i8 r4 K
TL1=0XF3;* B# j/ k$ R6 {* R
TR1=1; //打开计数器
# f+ a9 l! ? F. G2 M6 F4 f}8 I. C$ n2 G! z0 ^6 |
/*******************************************************************************
h& @" G f3 O' t; }* 函 数 名 : DigDisplay7 Q4 T) Z$ q# Y& C% L7 i
* 函数功能 : 使用数码管显示
`! G: A& ~8 [/ y( ~# l0 `2 R: j* 输 入 : 无
$ V6 s3 j+ N. Y8 K$ A4 B: h* 输 出 : 无+ }$ p6 h9 M' Z6 f6 [
*******************************************************************************/
0 {8 n8 K6 ^' A9 ?% h [void DigDisplay()
5 x; U9 O% y! D8 u P- r5 P2 l# ?{$ h% l: X- o+ [- T: H
unsigned char i;
D7 X" a% @7 T3 b/ j& s( Y unsigned int j;
$ U1 r! O5 g6 S& R( G for(i=0;i<8;i++)
7 m% ~9 ]$ L: X& ^/ g# Y8 X* T" ? {7 S" b- ~% z! @1 R1 U# a2 S0 `+ T
switch(i) //位选,选择点亮的数码管,2 f" {# J! W; [7 K5 D& J4 b
{
0 k S: i9 h; b- w' Y, C3 A case(0):- r9 `% j* K8 A9 k9 E* h- W7 {5 p' E$ ?+ `
LSA=0;LSB=0;LSC=0; break;//显示第0位
# b4 E% L# s; s- W" H$ V case(1):
- X- u' \: a/ [4 M+ n* T LSA=1;LSB=0;LSC=0; break;//显示第1位
0 @0 K: C O0 c+ o: p' z& M1 r' U) u case(2):
( H+ X4 \3 B7 h' E7 T' C( a LSA=0;LSB=1;LSC=0; break;//显示第2位* N. E: Q% c( ?
case(3):8 M3 P& q i. S2 r
LSA=1;LSB=1;LSC=0; break;//显示第3位" D, E/ N2 c6 X/ G. h
case(4):
1 N- W7 S' N+ e' D% `4 @* L LSA=0;LSB=0;LSC=1; break;//显示第4位
# C) k& G# i: w, F case(5):
* R% Q2 S: q0 Z! c" o7 g, l% H' \ LSA=1;LSB=0;LSC=1; break;//显示第5位
# g; Q: l# X* a% s- ~' G case(6):
+ V1 \- f5 [6 k% } LSA=0;LSB=1;LSC=1; break;//显示第6位
( W3 a1 }1 F# E3 P, r1 G case(7):
+ e' o7 k6 e7 |$ |& ` LSA=1;LSB=1;LSC=1; break;//显示第7位
i9 C, h2 W6 ^5 F! U }
& U* j, H! B3 ]+ Y- N' W/ V( [ J GPIO_DIG=DisplayData;//发送段码
1 r% V6 {+ ~* G j=10; //扫描间隔时间设定
; J: S! w. D' h2 Y1 i while(j--);
4 E2 r- o+ }7 S# X GPIO_DIG=0x00;//消隐
1 n8 e/ [/ o: M1 D# U t( v7 Q }
$ p* {# F% X9 K% v- b, I}
m. P4 M' J/ U( x- c2 A( v- Z4 X {4 u' O4 M- ~( l) h8 n% D
下载:8 x1 F1 k7 W r
! m D8 m: E& K8 v8 v' I: K* y
$ N0 L A* V- \8 q( J |
|