找回密码
 注册
关于网站域名变更的通知
查看: 379|回复: 1
打印 上一主题 下一主题

RS232单片机串口实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-16 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 00:05 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表