找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1869|回复: 8
打印 上一主题 下一主题
收起左侧

用LCD显示风向传感器测得的风向,求大家帮忙看看单片机程序哪里不对,一直没有现象

[复制链接]
回帖奖励 60 黑币 回复本帖可获得 15 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:796670 发表于 2020-12-3 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用单片机串口获取风向传感器的数据,然后用LCD1602显示,求求各位帮忙看看程序哪里有问题,改了好多遍了,但一直没有现象
这是传感器的说明:


以下为程序:

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <intrins.h>
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8.         
  9. sbit E=P2^2;    //LCD1602使能引脚
  10. sbit RW=P2^1;    //LCD1602读写引脚   
  11. sbit RS=P2^0;    //LCD1602数据/命令选择引脚
  12. uchar table[24]= //用来存储SBUF的数据 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  13. uchar wind_direction[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B};//风向传感器问询帧
  14. uchar wind_direction1;//单片机接收风向数据
  15. uchar strwind[];  //用来把得到的整形数据转为字符串
  16. int flag1;
  17. void delay(uint z)//延时函数
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--);
  21.                 for(y=110;y>0;y--);
  22. }

  23. void wcmd(uchar del)//LCD写命令函数
  24. {
  25.   RS=0;//命令选择端
  26.         delay(10);
  27.         RW=0;//写命令
  28.         delay(10);
  29.         P0=del;  //把命令字写入
  30.         delay(10);
  31.         E=1;//使能
  32.         delay(10);
  33.         E=0;
  34. }

  35. void lcd1602_writedata(uchar dat)//LCD写数据函数
  36. {
  37.   delay(10);
  38.         RS=1;//数据选择端
  39.         delay(10);
  40.         RW=0;//写命令
  41.         delay(10);
  42.         P0=dat;  //把要显示的数据写入
  43.         delay(10);
  44.         E=1;
  45.         delay(10);
  46.         E=0;
  47. }

  48. void lcd1602_init()//LCD初始化
  49. {
  50. wcmd(0x38);
  51. wcmd(0x0C);
  52. wcmd(0x06);
  53. wcmd(0x01);
  54. }

  55. void init()  //系统初始化
  56. {
  57. TMOD=0X20;//定时器T1,方式2,波特率由PCON寄存器的SMOD决定
  58. TH1=0xfa;//设置波特率
  59. TL1=0xfa;
  60. TR1=1;//定时器1中断打开
  61. SCON=0x50;//方式1 SCON是串行口1的串行控制寄存器
  62. PCON=0x00;//各工作方式波特率加倍
  63. IP=0X10;//
  64. REN=1; //串口1接收使能
  65. EA=1;//cpu开放中断
  66. ES=1;//允许串行口中断

  67. }
  68. void main()
  69. {
  70.         uchar m=0;
  71.         flag1=0;//判断风速风向传感器
  72.         init();
  73.   while(1)
  74.         {
  75.                 int i;
  76.                 if(flag1==0)//flag1=0则发送风向数据
  77.         {
  78.         for(i=0;i<8;i++)
  79.                 {
  80.                 SBUF=wind_direction[i];   //发送问询帧
  81.                         while(!TI);  //数据发送结束时TI置1
  82.                         TI=0;
  83.                 }
  84.                 delay(500);
  85.                 strwind[0]=(wind_direction1/10)+'0';   //这里是把整数型数据转为字符
  86.                 strwind[1]=(wind_direction1%10)+'0';
  87.                 lcd1602_init();
  88.                 delay(100);
  89.                 wcmd(0x80);  //LCD第一行第一个位置
  90.                 delay(100);
  91.                 for(m=0;m<3;m++)
  92.                 {
  93.                 lcd1602_writedata(strwind[m]);
  94.                 }
  95.                 delay(500);
  96.   }
  97. }
  98. }

  99. void UART_1() interrupt 4
  100. {
  101.         int i=0;
  102.         //接收完缓冲数据后RI置1
  103.         if(RI)//如果RI为1,即如果收到
  104.         {
  105.           RI=0; //RI置0
  106.                 table[i++]=SBUF;  //  得到的风向数据存在SBUF,把数据给table[i++]
  107.                 if(i>8)  //一个应答帧是9个字节,i>8表示一个风向数据传输完成
  108.                 {
  109.                 wind_direction1=table[6];//风向数据是第七个,即table[6],给wind_direction1[0]               
  110.                  }
  111.         }
  112. }
复制代码


求各位帮忙看看以上程序哪里不太对,尤其是串口通信部分,改了好多遍但最后都没有现象,求大家帮帮忙,谢谢。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:796670 发表于 2020-12-3 20:27 | 只看该作者
球球各位了,调了好多次一直不行,救救孩子吧
回复

使用道具 举报

板凳
ID:592807 发表于 2020-12-4 08:25 | 只看该作者
LCD_Init()放在while(1)里面,LCD被初始化了多少次?
回复

使用道具 举报

地板
ID:213173 发表于 2020-12-4 08:28 | 只看该作者
明日香 发表于 2020-12-3 20:27
球球各位了,调了好多次一直不行,救救孩子吧

楼主的程序有很多基础知识错误。这是给坛友修改的一个甲醛检测示例程序,硬件TX-1C实验板。虽然不能直接解决楼主的问题,但可依照其程序构架、解题思路、书写格式举一反三,就可以轻易解决问题。 串口发收数据串甲醛检测.zip (429.51 KB, 下载次数: 7)

回复

使用道具 举报

5#
ID:592807 发表于 2020-12-4 09:00 | 只看该作者
你说的现象是什么现象:LCD还是串口还是风向传感器?

LCD和串口你可以修改代码让他们打印出其他东西,能打印就不是这两者的问题、
风向传感器,你先确定电路正常否?电压正常否?然后在检测风向变化时它有向单片机发送数据吗?


看了你三个帖子,你一直在问代码问题,你确保你电路没问题吗?
如果你确保电路没问题,你要做的是去找买你传感器的厂家要例程,然后烧录,看哟没有现象。
回复

使用道具 举报

6#
ID:796670 发表于 2020-12-4 13:30 | 只看该作者
黄youhui 发表于 2020-12-4 09:00
你说的现象是什么现象:LCD还是串口还是风向传感器?

LCD和串口你可以修改代码让他们打印出其他东西,能 ...

谢谢指点
回复

使用道具 举报

7#
ID:796670 发表于 2020-12-4 13:30 | 只看该作者
wulin 发表于 2020-12-4 08:28
楼主的程序有很多基础知识错误。这是给坛友修改的一个甲醛检测示例程序,硬件TX-1C实验板。虽然不能直接 ...

谢谢指点
回复

使用道具 举报

8#
ID:592807 发表于 2020-12-4 14:06 | 只看该作者

不客气,
请共同遵守求贴礼仪,问题解决后发帖置顶然后来者学习
回复

使用道具 举报

9#
ID:796670 发表于 2020-12-4 15:22 | 只看该作者
wulin 发表于 2020-12-4 08:28
楼主的程序有很多基础知识错误。这是给坛友修改的一个甲醛检测示例程序,硬件TX-1C实验板。虽然不能直接 ...

感谢指点
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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