找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2112|回复: 1
收起左侧

stc15单片机1602串口显示北斗定位数据程序

[复制链接]
ID:476348 发表于 2019-3-13 09:39 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. #include "MAIN.H"
  2. #include "DELAY.H"
  3. #include "lcd1602.h"
  4. #include "uart.h"
  5. #include<string.h>
  6. #define Uart1_Buf_Max 70//串口数据缓存长度
  7. #define Uart2_Buf_Max 70
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. /*************        本地常量声明        **************/
  11. write_com(unsigned char);

  12. /*************        本地变量声明        **************/
  13. u8 count = 0;
  14. u8 idata  Rec_Buf[Uart1_Buf_Max];  //串口数据缓存
  15. u8 point1 = 0;             //绶存指针
  16. u8 a,flag;
  17. u8 xdata  Uart2_Rec_Buf[Uart2_Buf_Max];  //串口数据缓存
  18. u8 point2 = 0;     
  19. /*************        本地函数声明        **************/



  20. /*************  外部函数和变量声明 *****************/
  21. bit        B_TX2_Busy = 0;        


  22. /******************** IO配置函数 **************************/
  23. void        GPIO_config(void)
  24. {
  25.         P5M0 &= ~(1<<5);                //设置P5.5为准双向口
  26.         P5M1 &= ~(1<<5);
  27. }






  28. /******************** 主函数 **************************/
  29. void UartInit(void)                //9600bps@11.0592MHz
  30. {
  31. //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
  32. //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
  33. //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  34. //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5

  35.         PCON &= 0x7F;                //波特率不倍速
  36.         SCON = 0x50;                //8位数据,可变波特率
  37.         AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
  38.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  39.         TMOD &= 0x0F;                //清除定时器1模式位
  40.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  41.         TL1 = 0xDC;                //设定定时初值
  42.         TH1 = 0xDC;                //设定定时器重装值
  43.         ET1 = 0;                //禁止定时器1中断
  44.         TR1 = 1;                //启动定时器1


  45.         S2CON = 0x50;                //8位数据,可变波特率
  46.         AUXR |= 0x04;                //定时器2时钟为Fosc,即1T
  47.         T2L = 0xE0;                //设定定时初值
  48.         T2H = 0xFE;                //设定定时初值
  49.         AUXR |= 0x10;                //启动定时器2

  50.         UART2_INT_ENABLE();
  51.         ES = 1;
  52.         EA = 1;
  53. }

  54. /*----------------------------
  55. 发送串口数据
  56. ----------------------------*/
  57. void SendData(unsigned char ch)
  58. {
  59.     SBUF = ch;                 //写数据到UART数据寄存器
  60.                 while(TI == 0);
  61.                 TI = 0;
  62. }

  63. /*----------------------------
  64. 发送字符串
  65. ----------------------------*/
  66. void SendString(char *s)
  67. {
  68.     while (*s)                  //检测字符串结束标志
  69.     {
  70.         SendData(*s++);         //发送当前字符
  71.     }
  72. }
  73. void Send(unsigned char *s,unsigned int len)
  74. {
  75.     for(a = 0;a<len;a++)
  76.         {
  77.           SendData(*s++);           // *s指向ReBuf[0],*s指向下一个ReBuf[1];
  78.         }

  79. }

  80. bit Hand(unsigned char *a)                   // 串口命令识别函数
  81. {
  82.     if(strstr(Rec_Buf,a)!=NULL)
  83.             return 1;
  84.         else
  85.                 return 0;
  86. }

  87. void CLR_Buf(void)                           // 串口缓存清理
  88. {
  89.         memset(Rec_Buf, 0, Uart1_Buf_Max);      //清空

  90.        point1 = 0;                 
  91. }


  92. /*----------------------------
  93. 通过串口2发送串口数据
  94. ----------------------------*/
  95. void Uart2SendData(unsigned char ch)
  96. {
  97.         while(B_TX2_Busy);        //不忙后发送数据
  98.     S2BUF = ch;                 //写数据到UART数据寄存器
  99.         B_TX2_Busy = 1;
  100. }

  101. /*----------------------------
  102. 通过串口2发送字符串
  103. ----------------------------*/
  104. void Uart2SendString(char *s)
  105. {
  106.     while (*s)                  //检测字符串结束标志
  107.     {
  108.         Uart2SendData(*s++);         //发送当前字符
  109.     }
  110. }

  111. bit Uart2Hand(unsigned char *a)                   // 串口命令识别函数
  112. {
  113.     if(strstr(Uart2_Rec_Buf,a)!=NULL)
  114.             return 1;
  115.         else
  116.                 return 0;
  117. }

  118. void Uart2CLR_Buf(void)                           // 串口缓存清理
  119. {
  120.         memset(Uart2_Rec_Buf, 0, Uart2_Buf_Max);      //清空
  121.         
  122.     point2 = 0;
  123.         
  124. }



  125. void main(void)
  126. {
  127.                 unsigned char add;
  128.         unsigned char hh;
  129.         hh=Uart2_Rec_Buf[20],10;
  130.         GPIO_config();
  131.         UartInit();
  132.         Init_LCD1602();
  133.         LCD1602_write_com(0x80);                //指针指向第1行第0个位置
  134.         LCD1602_write_word("weidu ");

  135.          
  136.             
  137.             
  138.                         
  139.         
  140.         LCD1602_write_com(0x80+0x40);        //指针指向第2行第0个位置
  141.         LCD1602_write_word("jingdu ");
  142.         Send(&Uart2_Rec_Buf[32],11);
  143.         
  144.         
  145.         hh=Uart2_Rec_Buf[32];

  146.         LCD1602_write_word("hh  ");
  147.         write_com(0x80+0x40+add);
  148.         

  149. write_date(0x30+hh);
  150.         delay_ms(200);
  151.         
  152.         while(1)
  153.         {
  154.                
  155.                
  156.                 SendString("\r\n");
  157.                         Send(&Uart2_Rec_Buf[0],70);
  158.                                                   
  159.                         SendString("\r\nweidu:\r\n");
  160.                         Send(&Uart2_Rec_Buf[20],10);        
  161.                         
  162.                         SendString("\r\nnanbeibanqiu:\r\n");
  163.                         Send(&Uart2_Rec_Buf[30],1);
  164.                         SendString("\r\n");
  165.                         
  166.                         SendString("jindu:\r\n");
  167.                         Send(&Uart2_Rec_Buf[32],11);
  168.                         SendString("\r\n");

  169.                         
  170.                         SendString("dongxibanqiu:\r\n");
  171.                         Send(&Uart2_Rec_Buf[43],1);
  172.                         SendString("\r\n");


  173.                         SendString("shijian(shi fen miao):\r\n");
  174.                         Send(&Uart2_Rec_Buf[7],6);
  175.                         SendString("\r\n");        
  176.         
  177.                         SendString("shijian(nian yue ri):\r\n");
  178.                         Send(&Uart2_Rec_Buf[61],2);
  179.                         Send(&Uart2_Rec_Buf[59],2);
  180.                         Send(&Uart2_Rec_Buf[57],2);
  181.                         SendString("\r\n");        
  182.         
  183.                         
  184.                         SendString("dimiansudu:\r\n");
  185.                         Send(&Uart2_Rec_Buf[45],6);
  186.                         SendString("\r\n");        
  187.         
  188.                         SendString("dimianhangxiang:\r\n");
  189.                         Send(&Uart2_Rec_Buf[51],6);
  190.                         SendString("\r\n");        


  191.                         SendString("cipianjiaofangxiang:\r\n");
  192.                         Send(&Uart2_Rec_Buf[66],1);
  193.                         SendString("\r\n");        
  194.                         
  195.                    /*
  196.                         flag = 0;                        
  197.                         point1=0;
  198.                         point2=0;
  199.                          ES = 1;   */

  200.                                 clrStruct();
  201.                          SendString("\r\n");
  202.                         Send(&Uart2_Rec_Buf[0],70);
  203.                                                   
  204.                         SendString("\r\nweidu:\r\n");
  205.                         Send(&Uart2_Rec_Buf[20],10);        
  206.                         
  207.                         SendString("\r\nnanbeibanqiu:\r\n");
  208.                         Send(&Uart2_Rec_Buf[30],1);
  209.                         SendString("\r\n");
  210.                         
  211.                         SendString("jindu:\r\n");
  212.                         Send(&Uart2_Rec_Buf[32],11);
  213.                         SendString("\r\n");

  214.                         
  215.                         SendString("dongxibanqiu:\r\n");
  216.                         Send(&Uart2_Rec_Buf[43],1);
  217.                         SendString("\r\n");


  218.                         SendString("shijian(shi fen miao):\r\n");
  219.                         Send(&Uart2_Rec_Buf[7],6);
  220.                         SendString("\r\n");        
  221.         
  222.                         SendString("shijian(nian yue ri):\r\n");
  223.                         Send(&Uart2_Rec_Buf[61],2);
  224.                         Send(&Uart2_Rec_Buf[59],2);
  225.                         Send(&Uart2_Rec_Buf[57],2);
  226.                         SendString("\r\n");        
  227.         
  228.                         
  229.                         SendString("dimiansudu:\r\n");
  230.                         Send(&Uart2_Rec_Buf[45],6);
  231.                         SendString("\r\n");        
  232.         
  233.                         SendString("dimianhangxiang:\r\n");
  234.                         Send(&Uart2_Rec_Buf[51],6);
  235.                         SendString("\r\n");        


  236.                         SendString("cipianjiaofangxiang:\r\n");
  237.                         Send(&Uart2_Rec_Buf[66],1);
  238.                         SendString("\r\n");
  239.                
  240.                
  241.         }
  242. }
  243. void Usart2() interrupt 8 using 1
  244. {
  245.         UART2_INT_DISABLE();        
  246.         
  247.         if(RI2)
  248.     {
  249.                 CLR_RI2();                               //清除RI位
  250.                 Uart2_Rec_Buf[point2] = S2BUF;
  251.                 if(Uart2_Rec_Buf[0]!=


  252. )
  253.                 {        
  254.                         point2=0;
  255.                         return;         
  256.                 }
  257.                 point2++;               
  258.                 if(point2>=Uart2_Buf_Max)         
  259. ……………………

  260. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
08.LCD1602液晶显示.zip (41.51 KB, 下载次数: 35)
回复

使用道具 举报

ID:1 发表于 2019-3-13 15:26 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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