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

单片机使用LCD1602接收串口数据

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-3 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
单片机使用LCD1602接收串口数据8 G2 J# D5 e- y1 E
( }4 M; y* F' X5 B( M8 ~
8 b1 O" `0 Y5 H! S/ l. n
/*1 m  O3 P" d! Y8 k" X, z( ^
晶振12MHz,波特率1200,6 n; E, C% \% ]! H4 p" i0 E3 X
程序启动后单片机主动发出Hello Server,) r' H6 ~) E: _: S( B( Q( N
PC使用串口助手应答单片机,# M2 [4 w0 w2 U' }
单片机收到数据后,不做任何修改返回PC。
/ ~. y3 g+ H9 y4 A  Z, `0 P使用LCD1602显示单片机接受到的数据
5 O% R/ Q# t! V; e6 v*// E2 y( d" J& y& n7 W9 I2 {
#include<reg51.h>
: T% ]# t/ y- U( D! C#define uchar unsigned char' y7 Z2 {# F6 T6 o7 d
#define uint unsigned int
, L# H5 i4 D2 K( v, auchar code data1[]="Hello Server";
) E4 {$ M9 B) o* I1 K3 O! T6 [sbit EN = P3 ^ 4;                //液晶使能端2 _: `& U4 _( w5 L
sbit RS = P3 ^ 5;                        //液晶数据命令选择端9 T, i% F1 Y5 T. G& ]* S. J
sbit RW = P3 ^ 6;                                //读/写选择端(H/L)4 B$ C  E/ H, `& j- l) }# ^

; a/ G3 ~* r/ ^5 m; Uuchar num;
! z7 H) i2 Z# Q. o" Juchar count=0;+ J# a  a0 c) J8 e! ^3 N/ \
char a;
' w) S' X) ]5 \. p! j& Kchar old_CNT;
6 p/ L3 W1 T5 a$ N1 echar CNT = 0;, f7 s1 i" b# Q: v  x( Q
bit flag;/ U; X' }3 l$ n
char temp[16];
& y! O9 I5 a/ m# f: P6 l0 k& R3 Z0 q8 M//作用:延时 z ms
! V( q7 I, ]9 \/ _9 Q//参数:z
- T& o0 b8 }7 M1 o//返回值:
' J/ G/ }' {$ h3 X( B5 s! ]+ Uvoid delay(uint z)
' C! Q$ x$ V' V{9 [! f. {9 }/ f/ O2 D+ z& Y
        uint x, y;
4 [7 f+ E9 Q( s4 X7 f        for (x = z; x>0; x--)! o2 _: Q! z9 U$ h
        for (y = 110; y>0; y--);: c; \, M* `6 ~/ d  c. n  j
}; E0 j4 Q/ b( F) D
* D7 e# ]6 ^: d1 K
//作用:写命令
  P  m; f) T$ n" s+ i6 H9 }+ _//参数:& y" s2 p/ B% a0 k9 J
//返回值:1 C, G4 _6 R9 G. E# a
void write_com(uchar com)4 c# a* d* v1 m+ T) @, f
{- R2 o% ~3 @% J) q6 g# ^; P
        RS = 0;        //命令选择8 |9 {+ t" _+ i1 x& M) K2 o
        RW = 0;
1 g% n2 c/ ]! r" I        P0 = com;
( f( M" [6 C6 f) \% X( y4 F0 R        delay(5);8 \/ ~: U* \: o) w  u1 g% u
        EN = 1;        //使能E开
: ~; z9 h" A7 k) z2 g9 [        delay(5);
" @, A8 X! q1 _4 k3 {( M        EN = 0;        //使能E关
3 o$ \% B  c6 i! s        delay(5);
, T% n" f  W0 n- `}
* {% z) V0 e% t) j6 e$ e* ]# q% R, R/ w
//作用:写数据
! c& Y  G7 |) u5 P2 U1 ]//参数:
* S. f- c1 k; @' C3 c# m$ A//返回值:
, i1 ~. a1 ]3 v, T0 {( v/ cvoid write_date(uchar date)
  Y' Z, X) W- d3 `8 E0 a{
- U( R$ k% z- P* ?9 L; @        RS = 1;        //数据选择. U: l9 Z& V! P% a/ M
        RW = 0;
+ K  C2 s2 Y6 l: n) z        P0 = date;
. i! u4 |9 c1 b- t( s        delay(5);
' v" Z- i# H% o( |9 y        EN = 1;        //使能E开
1 [* d, |: r8 {, Z' W        delay(5);
& W4 V4 w) g+ B1 }( X        EN = 0;        //使能E关
: d1 Q( ]0 t9 p  N4 \! ]9 e) j}
" W! I0 l/ z8 _# J+ q9 x& `- C9 |# ?, s
//作用:LCD初始化6 G8 }1 s/ n: M3 d; N5 h# H
//参数:! c' G9 f% |! u
//返回值:3 z: @6 i1 Q( J, c7 p
void init_LCD()
) D, T4 R  l3 }8 x. ^& K{
2 t8 C2 C, z/ F9 M$ H        EN = 0;
! {& x: E8 g4 W4 E5 s( A        write_com(0x38);        //设置16x2显示,5x7点阵,8位数据接口
6 k" i0 q( c# K4 ]        write_com(0x0c);        //设置开显示,不显示光标1 i  _) Y6 V; N' S  d# d
        write_com(0x06);        //写一个字符后,地址指针加1/ n# t4 S% w& |" W8 U! m
        write_com(0x01);        //显示清0,数据指针清0
, }! F% E- k9 L5 }8 U        write_com(0x80);
0 f. o# M" \) B0 g) h}; [$ U  Z) }5 T! S8 t) R
//作用:串口中断初始化
5 p9 m% _% q3 y7 I//参数:  G) K5 J4 J- B* G) l9 k& Z
//返回值:
- G6 Q1 U/ m7 v% c" kvoid init_Serial()! [, r) h+ `3 k6 ]$ J: P$ \% B- U
{3 c0 T" `6 V& l: C7 e9 }7 ]8 y$ G
    SCON=0X50;        //工作方式1,允许接收
, M1 `* _0 U6 B        //SM0 = 0;5 q9 b/ o! a* Z& x  }/ D
        //SM1 = 1;
1 F5 Z: C: a; E' w+ A. H8 s- l  h        //REN = 1;
0 {+ F) u2 G+ i5 w    TMOD=0X20;        //定时器 工作方式28 y2 l# s4 P6 Z
    TH1=TL1=230;//波特率为1200
, k  o1 ~9 P) R; Y( ^' j$ w3 O    EA=1;                                        //开总中断6 m% q, ]. M! p. ~, _0 s' P$ i
    TR1=1;                                //T1启动. O6 U$ G! s8 N" N- u. s6 q
    SBUF=data1[count];
6 o) u/ Z. U2 V    ES=1;                                    //开串口$ A( L& K% a$ j0 m9 W
}
0 r1 n* W0 B2 ~- f, l//作用:串口中断服务程序
4 a4 e8 k; Y& G# q//参数:1 E% n7 }$ ?3 y. A9 n
//返回值:7 T- N$ l, k$ D
void S_proc() interrupt 45 P3 j0 }  F; H2 R& q! t8 }
{
$ @8 ?6 F0 m/ r2 F    if(TI)                //发送结束
& w: j9 q2 u, X1 T4 m    {
5 H$ I: [, M# Y( w0 ]  D        TI=0;
: @4 u0 Q8 U7 S% \, a        if(count<12)
. _7 S. S, B: S' g        {1 ]5 N, }# H( q$ m4 f3 h  s
            SBUF=data1[++count];, w4 ~' w/ o, a! ~" s3 M0 I# l
        }
+ g: H; r* Z) d% H, ]    }, t9 |  N: i) f2 R* h. O
    else                //接收结束
; h( r( e* s& C5 ?( i) Z% A    {
7 q9 i% U. ~4 T, h        RI=0;- j0 i. V) w# v+ L
        a=SBUF;                //存数据3 A4 B7 h7 z# x! O
        SBUF=a;                //发送数据
: o; W& z* C) t5 L' Z$ b        while(!TI);        //等待发送完成: d7 J- \: k& \2 t8 G+ P2 m
                                TI=0;
' i8 O' A2 M- d, n6 w/ Y4 D                                temp[CNT++]=a;% a3 y; @3 a" w$ w0 s2 Q1 [& A
                                flag = 1;+ k! J- A% J" d
    }* C- }8 i- ?  _& k- ?0 t
}
; M( K# y# [& l0 F, V7 r* o8 j//作用:主函数
! H# v, _8 ~( D! H0 z- a; ]//参数:0 m) K/ ^1 V0 m
//返回值:
& `8 N; B5 d1 c. i% Y" Jvoid main()& W  M: X/ F- ]. F$ _8 B5 P' p
{
8 A) F6 U/ r; s                int i;
7 x1 f3 o4 G. A7 |" B5 x                init_Serial();
3 e9 T1 A; Z  K+ T5 k0 n9 p                init_LCD();1 P1 v' J9 i  R; G0 B* o9 I; q
    while(1)
$ M: X4 ~" M- h6 Z" @* a                {3 W: g; V: J: V; R3 Z! w2 W- n
                                // LCD显示: J+ N6 j9 W. A1 J' p, D6 B
                                write_com(0x80);6 v! I3 E4 r2 G3 E, n) P
                                if(flag). z# g3 ]! ^$ {  L' r- B3 |' m! z. G1 o
                                {2 T# C7 A9 n* Z( H
                                                //write_com(0x01);
( [6 Q- ^& K/ @* ?  p, }" F- \& I                                                for(i=0; i<CNT; i++)4 p1 B! P# w5 n4 d7 w0 E  {
                                                {
/ s" ?, Z' ]4 g                                                                write_date(temp);
4 I7 e: @) n/ b7 k0 L                                                                // temp = ' '; temp != '\0'
& j1 L/ b& k7 S. q                                                                delay(5);! t5 l9 E! C- j% D
                                                }) v; Q9 h4 Q- K# _; M
                                }- A% F5 w5 V7 S! w
                                old_CNT = CNT;
6 {4 ^9 H: C. t4 v' o$ [# r                                delay(100);9 B, U& J4 }; k, o
                                if(old_CNT == CNT)  e7 \) `  L+ _+ }
                                {7 e  _$ s  h# Z) r8 V% v
                                                CNT = 0;, i- o6 F  {# S; R
                                                flag = 0;
" F5 U) n) U* s" S7 W6 i7 C3 O4 u                                }+ A0 o7 e1 ?: G. w! R& r$ d. x3 j6 ]
                }
0 ~5 K0 R: Y* \% s}/ C  i: a, [5 P% o. B5 c
游客,如果您要查看本帖隐藏内容请回复

0 w+ E$ Q: n, y- a
! d7 X- h4 a. l4 r( v1 O3 h; f

该用户从未签到

2#
发表于 2018-12-3 14:13 | 只看该作者
学习一下  参考

该用户从未签到

3#
发表于 2019-2-26 11:38 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 07:10 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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