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

RS232单片机串口实验

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
RS232单片机串口实验0 _7 `/ |0 z9 o- o' c# n" |
( E; s6 o* y* b" f$ N
% d- w  R  g  V0 i; u( l+ b0 Y; T
RS232串口实验,在附件里,一共有4个程序 分别实现4个不同的功能。' ^' I1 I( {0 e' {

( l5 `, l1 c/ X; o* ~) P0 e  bLCD1602显示接收到HEX数据
( Y5 S; q& J/ `+ z数码管显示接收到的HEX数据
3 j& O0 _5 }3 W# v/ B返回接收到的数据
+ S6 c: n6 q/ t1 b; I, E1 q发送数据
9 l% i6 \# K- q$ n. ~/ G
" n1 Z; h8 y. H/ t, W0 m下面是数码管的那个源码:

+ n3 i: g! N' K- n$ w5 z; Y/*******************************************************************************
0 c; M) m9 j" h  h*                 4 s! K2 X9 p: V" x/ v
*                                        普中科技7 U- j; }( e" F8 W4 I& c6 U
--------------------------------------------------------------------------------
" T7 P) @- [7 H* 实 验 名                 : RS232串口试验& J8 P3 _# n+ @" U5 f2 L6 Y
* 实验说明       : 单片机将串口接收到的数据以10进制显示在数码管上。
% B% t1 Q8 Y+ F" ]/ ]( J* 连接方式       : 见连接图7 t9 t) ~4 _7 k! h' |
* 注    意                 :
- f+ S5 z% t" O$ Z0 D- W! v*******************************************************************************/
# E3 k: r9 n) W$ t2 B0 n$ D
. t/ h' Z) Q: \7 x0 U' K#include<reg51.h>
7 ~, B# ]  A  @  A" X3 W" J
3 H2 i+ {/ w2 ~/ O/ s' K3 A//--定义使用的IO--//1 F1 a/ ]5 K# }$ B: ]# z
#define GPIO_DIG P0
8 ^# C9 G: x% P2 t: E
- |$ a) P# @) c& Osbit LSA=P2^2;* n' n- E' K, I7 h4 f
sbit LSB=P2^3;
+ K/ e3 l; D9 z& r9 }% a: ysbit LSC=P2^4;
" C5 t6 z' t8 |8 V$ P6 [  \5 [! u5 _
//--定义全局变量--//. D& }& t" n+ T# G/ m% y
unsigned char code DIG_CODE[17]={' }. O* P5 ]  o- P6 C
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,, a- f' O: h, t- D% U) n/ e8 N3 U, K
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};8 ?8 R9 _6 R0 e- i$ G
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
2 ~! M" F8 ~7 e( `+ F, tunsigned char DisplayData[8];) [6 u7 P6 N* z4 @
//用来存放要显示的8位数的值
# z( ^: Z" y# {
2 E2 M; J' v. c//--声明全局函数--//! P5 X. h: Q! ]9 l: P
void DigDisplay();         //动态显示函数           
4 w' `8 }# F9 Jvoid UsartConfiguration();
8 @6 S- t% Q4 R  @/ y; |: G+ g/ Q+ x! E/*******************************************************************************- Y2 W4 Z9 J" W! O# O4 F6 ^
* 函 数 名         : main
* |+ P' b" C6 A2 k5 V* 函数功能                   : 主函数* G% H6 ]* E9 ~- I3 q4 i( K$ o9 o' W
* 输    入         : 无, B: c& r  `/ q$ S5 b, w& `3 v
* 输    出         : 无, {6 |1 v5 Y, q$ Q9 U. E
*******************************************************************************/
/ m4 m' z5 j" w& i1 A  Z- ]8 `7 b* }7 C$ v  u5 i6 ^% `. Q& R5 ~
void main()
1 g  h, s. D: d* ?4 X& _3 {0 ~1 Q{
  ~; m8 @* b0 k2 B; F  V        unsigned char receiveData;
# C; D# p( U; ~. h  b
' {8 ^- D, `, E% f0 e7 X        UsartConfiguration();
5 S3 {/ C* [% j/ P) b/ X8 c2 T        while(1)' X" l9 w/ \* O1 F+ Q. n( j
        {" M) h1 t) d" g  R, A
                if(RI == 1)                                //查看是否接收到数据
  {7 v- `  K. k: U                {
1 s2 L$ W0 q+ H/ u/ S4 l2 F" a                        receiveData = SBUF;        //读取数据! x6 U( N, v" o$ X1 b
                        RI = 0;                                //清除标志位
' O& h; s9 N+ ]+ G
5 L; q, A5 w3 S* u                        //--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//
8 H: d  u* d9 |/ ?                        DisplayData[0] = 0x00;
7 I5 \5 u' v: p8 i6 b; d5 T' I                        DisplayData[1] = DIG_CODE[receiveData / 100];      // 百位
* D7 _. I) F# p+ Y( h                        DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位1 d2 r  f, R& Q) x5 n
                        DisplayData[3] = DIG_CODE[receiveData % 10];           // 个位1 B: x  C$ R! Z6 K
                        DisplayData[4] = 0x00;$ B" a8 Q% ^$ E5 V7 x# ]) T  d, C
                        DisplayData[5] = DIG_CODE[receiveData / 100];      // 百位
; r1 L$ d0 e4 n" B9 k. |9 ?                        DisplayData[6] = DIG_CODE[receiveData % 100 / 10]; // 十位
6 T6 O9 F' F# W) o  Q                        DisplayData[7] = DIG_CODE[receiveData % 10];3 y5 {& C' k: q9 J4 X
                }5 I. C3 i7 m# d' [$ X
                DigDisplay();
' Y9 D$ _7 F( x% I        }0 y8 p+ l% S) s6 a7 V; T- o3 R1 G
}
5 q6 r; v" C: ?8 j) Q7 K/*******************************************************************************, _0 w2 {& A' v5 R% R+ k9 y/ I
* 函 数 名         :UsartConfiguration()
1 L7 \- Z# E. }, {' d* 函数功能                   :设置串口
, q. p# L1 K# h3 n* 输    入         : 无
8 V7 M* r. n. s. k% W9 t$ Z* 输    出         : 无9 T- {5 P: J* Q( \# R
*******************************************************************************/
9 `/ ^) [1 q" H% r- r+ U& G( Z+ ]0 m+ I3 Z) J
void UsartConfiguration()5 v5 H8 N9 F, i* E4 G( ]
{
+ w: z, ?. @- m: |, B        SCON=0X50;                        //设置为工作方式1! d9 V4 e* R0 B4 e6 {. C8 V
        TMOD=0X20;                        //设置计数器工作方式2
1 X+ m/ P3 D' e- V        PCON=0X80;                        //波特率加倍
7 M" F) y8 x+ t) ~6 g6 e        TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的6 q9 V! z- L8 j9 u! t
        TL1=0XF3;6 G4 `3 s7 I) u2 \- L! R6 w
        TR1=1;                                            //打开计数器
  Y/ K' W; y4 @+ E}
2 |  B. X' J& |4 o3 q/*******************************************************************************
/ {4 g' J$ U* N" g. J9 u* 函 数 名         : DigDisplay, {7 p$ {7 G& M8 f
* 函数功能                   : 使用数码管显示6 ]- j0 t! e. P0 e3 G  S  a
* 输    入         : 无* C; j8 @2 R4 L0 d
* 输    出         : 无3 `2 B3 H0 o: B5 ^- S6 r
*******************************************************************************/  H9 J1 H+ ]9 @4 Z6 s- l
void DigDisplay()
9 M: |7 Y8 r! a. q$ l, @{
# S  P$ L+ K, {: V; \* }. J        unsigned char i;
2 [, [- J4 E- i7 }        unsigned int j;
" S4 M$ i& j- X        for(i=0;i<8;i++)8 ^9 I& \8 N; y: ?0 i+ H6 P& X
        {# a; G2 S8 m' D$ R8 P
                switch(i)         //位选,选择点亮的数码管,
# S- s. k. `9 R1 V/ {% I                {! J. c- O  D5 j+ B* H
                        case(0):
$ Y; L& x7 }8 z) b9 U8 x4 j$ F2 k                                LSA=0;LSB=0;LSC=0; break;//显示第0位, g# N; N& f( W( F" d3 h
                        case(1):
3 X1 @7 q1 r8 T) r                                LSA=1;LSB=0;LSC=0; break;//显示第1位/ p3 K+ J. |- m3 x% ~% F
                        case(2):2 C2 ]" a/ R7 k, b) ~
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
7 s' s1 H* l2 S# K% l0 M) j                        case(3):6 F+ I* S1 @# M+ G/ M7 @  d
                                LSA=1;LSB=1;LSC=0; break;//显示第3位& }; J0 Z( r2 X- i7 G- ?
                        case(4):
2 e( i& ]/ {) z! m- [                                LSA=0;LSB=0;LSC=1; break;//显示第4位
! X& V% ^- ]% {5 |" E& \' o9 ]                        case(5):
! ^5 ~, z1 v/ m0 E1 f' e9 N                                LSA=1;LSB=0;LSC=1; break;//显示第5位  k# p1 |& ~: r: X3 |" H
                        case(6):
5 e( h8 i( z$ B. x1 I0 I* r                                LSA=0;LSB=1;LSC=1; break;//显示第6位" ~2 }( P$ E% c3 x
                        case(7):
2 w' _! B# L! O6 Y% G, w6 z# S                                LSA=1;LSB=1;LSC=1; break;//显示第7位        ) A  c3 y, m3 t  J0 J; b9 m
                }$ h/ A' o" D" V* z" O3 [* J- A
                GPIO_DIG=DisplayData;//发送段码* ^1 b9 g, q# N+ j
                j=10;                                                 //扫描间隔时间设定
8 k& |: s, s6 ?, T( G                while(j--);        
# ?5 _6 x( e% B" a( l                GPIO_DIG=0x00;//消隐0 Q+ ]% m+ J% w! \5 M6 x0 W7 Y
        }
6 N* Q' p8 U) L6 h) ~8 z}
! X8 \% o$ T$ F( R
# l: T( S5 F; I, o% M下载:
: u7 _. n2 a6 M' U
游客,如果您要查看本帖隐藏内容请回复
8 j+ Q$ b9 a4 `" x. l
; W7 L) K8 p7 R" w9 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-11 08:41 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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