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

RS232单片机串口实验

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
RS232单片机串口实验: z! O* O0 O. z: o7 n- N5 M( O

+ d6 Q3 `7 L* G6 s7 g, Z
# w9 u2 ?$ e. C7 }# B$ p6 q8 Q
RS232串口实验,在附件里,一共有4个程序 分别实现4个不同的功能。! k* F1 y7 l8 k9 a- n) Z0 i" Q

, I& _7 D: S0 O" |- m) \3 N. NLCD1602显示接收到HEX数据* Q8 o: P* d: ?1 r8 r) Q) u& g. M
数码管显示接收到的HEX数据4 W2 d" T) x! Y$ R
返回接收到的数据/ V' o. q# v. e: c
发送数据 5 g! A$ D: G; @
7 |/ J) p* s3 W' j5 L
下面是数码管的那个源码:
1 I" h) @/ Q4 ^3 z. S
/*******************************************************************************4 [: D! e& S+ L- ?& F( e% M% O- H3 E
*                 
/ t+ P8 Y( l3 ?; I1 G*                                        普中科技
/ w) A& c7 v/ P# ?, ]--------------------------------------------------------------------------------
! A1 ~, T+ M4 b  k! G& ~6 z* 实 验 名                 : RS232串口试验
- C; {& c$ A5 A; N  B0 B* G' B* 实验说明       : 单片机将串口接收到的数据以10进制显示在数码管上。( I. c( \9 n8 N7 W* a* B& ^
* 连接方式       : 见连接图
( q3 r% {. X! N. ^9 k& r" \% @) x* 注    意                 :
# w- ^6 M- N& m( r1 V( U*******************************************************************************/% A3 ?" B6 D0 i, v
, @9 D1 M; o' e* A& ~# O
#include<reg51.h>( j8 {' V& ?. C) p& Y0 f: Q

  e! W8 X$ V7 a5 A7 Y3 j//--定义使用的IO--//+ @; d8 m# @* h* z
#define GPIO_DIG P0
1 M$ n/ J; E3 x( I5 P# W6 l/ ?1 A' D7 M1 T  }/ G: l- b6 E
sbit LSA=P2^2;
5 Q' [( k% {9 B" x* L- esbit LSB=P2^3;4 B% ~( y* [/ Y- ?
sbit LSC=P2^4;
1 R) U# f. \( k4 F
. m' t, D" J5 M" u//--定义全局变量--//; @( y3 Y$ X3 ?7 p; [0 }
unsigned char code DIG_CODE[17]={3 l2 {7 c5 W! v0 d3 C
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,) @0 @$ I' |5 ~! b+ ^5 @
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
6 O# C( ?4 R. P3 f9 [# h0 T' ]. r1 a//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码9 f  d6 ^; t  L: Z  X9 C
unsigned char DisplayData[8];
" t6 Y) @, j* ?6 E/ u- H; I* F) b//用来存放要显示的8位数的值
% y) I# A; {4 r$ w9 H! T$ r2 I$ i' F. F
//--声明全局函数--//' u- y* d) _* ?8 X( \( a: u0 r
void DigDisplay();         //动态显示函数           7 v; y6 [4 J, b) O% L/ z$ M
void UsartConfiguration();3 w# a1 v/ ?9 L! `1 G
/*******************************************************************************0 A9 |' w7 w4 V& e! I" y
* 函 数 名         : main
6 d3 X9 D  f7 A0 t3 x0 q* 函数功能                   : 主函数
! G  V+ z6 y& T' c* 输    入         : 无
! o. r2 v. O0 k8 l5 U/ q* 输    出         : 无$ |; k6 {# k7 [2 U
*******************************************************************************/
- e- U' |1 ?" i& J9 c" e$ h( ?* L$ Y
. b0 J/ L; D! v' ^' kvoid main()
- [9 s( e5 L' N{
/ s) ~. L; k: l" p) a8 ]! `" b8 ^        unsigned char receiveData;
  p. T5 z8 P! q5 w! N4 g7 P
7 V/ s* r  n$ g; r) Y- |% g' r        UsartConfiguration();5 F4 s( o2 I' J+ W! J% O
        while(1)
" s4 R+ t1 K( I% ?- E        {
$ o6 e% B8 ~) V: W3 g# q                if(RI == 1)                                //查看是否接收到数据
% i/ r' w+ w0 h  |                {
7 w& r; M  @# V, F: T                        receiveData = SBUF;        //读取数据, x1 S  M2 X  w7 s8 m1 ]
                        RI = 0;                                //清除标志位4 x- s+ c6 C* {, E% n

1 Y$ `- O! z% ]' J/ X% Q( |4 w                        //--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//
1 b/ `2 A  U# h" J5 a                        DisplayData[0] = 0x00;
% u* F7 k- C6 B$ F) t0 j) f0 I- E                        DisplayData[1] = DIG_CODE[receiveData / 100];      // 百位
1 f7 I: D6 w% ?$ t  _3 ?( F                        DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位3 B7 y1 S4 \$ L2 R& Y
                        DisplayData[3] = DIG_CODE[receiveData % 10];           // 个位
1 E8 U  G+ S' c7 e" p( ^' ?                        DisplayData[4] = 0x00;7 l/ N9 _& x& a& j% f" s; ?5 m
                        DisplayData[5] = DIG_CODE[receiveData / 100];      // 百位. ~3 Q' Y2 |% d% Y
                        DisplayData[6] = DIG_CODE[receiveData % 100 / 10]; // 十位
0 ~: G9 u8 y% y  I" |                        DisplayData[7] = DIG_CODE[receiveData % 10];
1 R$ t0 E0 i( U/ b2 ?: a2 j                }
3 i9 R  {) \! r% b8 f                DigDisplay();
1 ^" c) Q# E  _        }0 c5 m! O4 P& j* M' J, O0 ?: R9 j
}$ R; e, `" t4 V" A9 l2 J
/*******************************************************************************
2 f, N* t! X* n% b* 函 数 名         :UsartConfiguration()5 e# t: O& \; T* D5 \
* 函数功能                   :设置串口
7 R9 G3 _0 \9 P* 输    入         : 无) ?: C% a" P  k. t  H/ u0 _' V
* 输    出         : 无
6 s& c' g/ ^$ M$ `+ y*******************************************************************************/
; {9 @9 A# f$ Y3 h! j7 Q7 z1 t; y- I8 s# b8 c
void UsartConfiguration()# f  D& J) A) y5 }* j& I
{; I# F' ]/ _! J. @2 F
        SCON=0X50;                        //设置为工作方式1( P4 S# ?( l$ z! z+ f
        TMOD=0X20;                        //设置计数器工作方式29 ]7 x, ]2 H0 U3 @) q. g
        PCON=0X80;                        //波特率加倍
* T4 z3 Y$ d, v& x; H' j3 w3 i        TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的( s6 l8 |3 n9 O: B
        TL1=0XF3;7 l; |# K7 o( {: _1 C4 \8 T7 e
        TR1=1;                                            //打开计数器
, U7 S$ f) m2 g}( B, n- [$ \1 H- W/ J% ^% \
/*******************************************************************************
1 W0 D/ l- H. F( t% `* 函 数 名         : DigDisplay; r' x( m. U: k3 }+ g: w7 X& u
* 函数功能                   : 使用数码管显示
/ e& J: @8 ~- @% Z0 ]+ d- J9 S* 输    入         : 无
$ {. d( g0 e! x7 y# h1 k* 输    出         : 无
, u3 y7 |. Q" Q' d*******************************************************************************/
3 e6 z0 _9 S1 Xvoid DigDisplay()
- G: e( y0 o+ c! p7 S; z7 v{% ?( Q, d0 g+ W# [, O$ D9 \" y0 w. T. {
        unsigned char i;& q8 l1 K3 f6 x; G
        unsigned int j;
" x7 ^9 O" c$ J' Q6 d        for(i=0;i<8;i++)
: @  p* ~! u9 m# z; a2 y! w        {3 h9 @( O& e6 S; |) ]; T; p
                switch(i)         //位选,选择点亮的数码管,
9 }6 v2 b; q' e5 t' k9 S                {$ T0 I) L) S7 V5 V9 U( A9 s% Q
                        case(0):8 a; Y' {) [; C# [3 C! m; a
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
% y/ w! C+ I/ r8 _9 [% [2 I                        case(1):
  n) Q  ~4 B$ v- n9 c                                LSA=1;LSB=0;LSC=0; break;//显示第1位
& f: h+ ~& {& v; A2 z5 _                        case(2):9 W% X- s, q, }- h% C
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
# ~& @, z; n0 i. Y" D8 c% o                        case(3):4 N% H4 e1 |7 z$ G' a
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
) ~1 t  @# K. Q' k                        case(4):
$ {# W( A" P1 E" Q7 D% Y5 ~. A                                LSA=0;LSB=0;LSC=1; break;//显示第4位! j5 |' H( P6 v& x9 [
                        case(5):
4 m) i* M% C7 S2 Z5 D1 I                                LSA=1;LSB=0;LSC=1; break;//显示第5位- S4 f+ d* h( y) @0 V9 M
                        case(6):
2 k0 N. E. O) |( I6 z5 l                                LSA=0;LSB=1;LSC=1; break;//显示第6位
. i* t$ W2 f  f                        case(7):
, ^, F9 r1 _- N: E                                LSA=1;LSB=1;LSC=1; break;//显示第7位        ( ]# S" d/ I. m8 R" \
                }" _" R6 c. p  K0 U6 h. O
                GPIO_DIG=DisplayData;//发送段码) V* b, B: J1 z  e: V  F3 k* s/ H1 y
                j=10;                                                 //扫描间隔时间设定
& Y2 b. l/ k4 d# B                while(j--);        3 g- V9 M& U4 D7 z, E
                GPIO_DIG=0x00;//消隐
' |5 J& D& d; e( o+ S1 o; T: M        }1 ]3 W; Z6 A# Z% d5 O$ H1 z
}
- y3 B7 T, v) V1 L% H4 @2 s8 c' h. U; h$ M
下载:
5 q  V* E' G: ]0 _
游客,如果您要查看本帖隐藏内容请回复
6 i* ?$ |& R0 O# Y

$ \  {" @5 c, s# n( K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 05:59 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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