找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5545|回复: 7
收起左侧

1602LCD显示GY-30光强数值

[复制链接]
ID:183779 发表于 2017-5-2 08:12 | 显示全部楼层 |阅读模式
买回来的GY-30用商家提供的程序烧录进去单片机,单片机的LCD无任何显示,我感觉是商家LCD程序的问题,请各位坛友帮忙看看,我提供了两个程序一个是商家下载的,一个是Easy Board 51单片机自带的LCD时钟程序(可用)。
回复

使用道具 举报

ID:82765 发表于 2017-5-2 18:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:183779 发表于 2017-5-2 19:52 | 显示全部楼层
cjjcjj1 发表于 2017-5-2 18:00
你好!你的两个程序呢?发上来帮你看看

现在LCD可以显示,但是数据显示为00000,光强度模块没有起到应有的作用,麻烦你看一下
  1. #include<reg52.h>
  2. #include<math.h>
  3. #include<stdio.h>
  4. #include<intrins.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit lcden=P2^4;
  8. sbit lcdrs=P2^5;
  9. sbit lcdwr=P2^6;
  10. sbit sda=P1^1;
  11. sbit scl=P1^0;
  12. uchar ge,shi,bai,qian,wan;           //显示变量
  13. uchar buffer[8];                                   //接收数据缓冲区
  14. int s;                        //变量
  15. void chaizi(uint temp)     //拆字程序
  16. {
  17.         wan=temp/10000+0x30 ;
  18.     temp=temp%10000;   //取余运算
  19.         qian=temp/1000+0x30 ;
  20.     temp=temp%1000;    //取余运算
  21.     bai=temp/100+0x30;
  22.     temp=temp%100;     //取余运算
  23.     shi=temp/10+0x30;
  24.     temp=temp%10;      //取余运算
  25.     ge=temp+0x30;         
  26. }
  27. void delay_us()     //延时5us
  28. {;;}
  29. void delay_ms(uint t)     //延时t毫秒
  30. {
  31.   uchar i,j;
  32.   for(i=0;i<t;i++)
  33.   {
  34.   for(j=0;j<121;j++)
  35.   {;}};
  36. }

  37. /************I2C总线通讯************/
  38. void BH1750_start() //开始信号
  39. {
  40.     sda=1;
  41.         scl=1;
  42.         delay_us();
  43.         sda=0;
  44.         delay_us();
  45.         scl=0;
  46. }
  47. void BH1750_stop()                 //停止信号
  48. {
  49.         sda=0;
  50.         scl=1;
  51.         delay_us();
  52.         sda=1;
  53.         delay_us();
  54. }
  55. void send_respons(bit ack)    //写答应信号
  56. {
  57.      sda=ack;                     //写应答信号
  58.          scl=1;                                 //拉高时钟线
  59.          delay_us();
  60.          scl=0;
  61.          delay_us();
  62. }
  63. bit get_respons() //接受答应信号
  64. {
  65.      scl=1;
  66.          delay_us();
  67.          CY=sda;
  68.          scl=0;
  69.          delay_us();
  70.          return CY;
  71. }

  72. void send_byte(uchar date)    //向IIC总线发送一个字节数据
  73. {
  74.   uchar i;
  75.   for(i=0;i<8;i++)
  76.   {
  77.            date<<=1;
  78.          sda=CY;           //CY为PWS的最高位
  79.          scl=1;
  80.          delay_us();
  81.          scl=0;
  82.          delay_us();
  83.   }
  84.    get_respons();

  85. }
  86. uchar get_byte()  //从IIC总线接收一个字节数据
  87. {
  88.   uchar j;
  89.   uchar k=0;
  90.   sda=1;       //此时并不知道sda的状态,说以应该释放总线
  91.   for(j=0;j<8;j++)
  92.   {        
  93.      k<<=1;
  94.      scl=1;
  95.          delay_us();
  96.          k|=sda; //k左移一位,与sda位或;不管sda是0还是1;读取的数据都存在最低位
  97.          scl=0;                   //为下一次更好读数据,scl拉低
  98.          delay_us();
  99.   }
  100.   return k;
  101. }
  102. void write_add(uchar date)
  103. {
  104.          BH1750_start();
  105.          send_byte(0x46);  //ADD接地,地址默认为0x46
  106.          send_byte(date);   
  107.          BH1750_stop();
  108. }
  109. void read_BH1750(void)         //连续读出BH1750内部数据
  110. {
  111.      uchar i;
  112.          BH1750_start();
  113.          send_byte(0x46+1);
  114.          for(i=0;i<3;i++)
  115.          {
  116.              buffer[i]=get_byte();
  117.                  if(i == 3)                 
  118.                     {
  119.                          send_respons(1);
  120.                          }                 
  121.                  else
  122.                     {
  123.                      send_respons(0);
  124.                          }
  125.          }
  126.           BH1750_stop();
  127.             delay_ms(5);
  128. }
  129. void BH1750_init()
  130. {
  131.    write_add(0x01);
  132. }
  133. /************LCD显示************/
  134. void wait_enable(void)
  135. {
  136.    P0=0xff;
  137.    lcdrs=0;
  138.    lcdwr=1;
  139.    delay_us();
  140.    lcden=1;
  141.     delay_us();
  142.    while(P0&0x80);
  143.    lcden=0;
  144. }
  145. void lcd_command(uchar command,uchar shuxin)//写入指令
  146. {
  147.    if(shuxin)
  148.      wait_enable();
  149.      lcdrs=0;
  150.          lcdwr=0;
  151.          delay_us();
  152.          P0=command;//单片机上lcd的接口设置在P0口
  153.          delay_us();
  154.          lcden=1;
  155.          delay_us();
  156.          lcden=0;
  157. }
  158. void lcd_writebyte(uchar byte)//写入数据
  159. {
  160.          wait_enable();
  161.          lcdrs=1;
  162.          lcdwr=0;
  163.          delay_us();
  164.          P0=byte;
  165.          delay_us();
  166.          lcden=1;
  167.      delay_us();
  168.          lcden=0;

  169. }
  170. /*void lcd_set_xy(uchar x,uchar y)//设置显示坐标
  171. {
  172.      uchar address;
  173.      if(y==0)       //判断是是否为第一行
  174.         address=0x80+x;
  175.      else
  176.         address=0xc0+x;
  177.         lcd_command(address);
  178. }*/                                       
  179. void lcd_display(uchar x,uchar y,uchar h)     //lcd字符显示
  180. {
  181.    y&=1;                                                
  182.    x&=15;                                                
  183.    if(y)x|=0x40;                                       
  184.    x|=0x80;                        
  185.     lcd_command(x,0);               
  186.     lcd_writebyte(h);
  187. }
  188. /*void lcd_clean()      //lcd清屏
  189. {
  190.      lcd_command(0x01);
  191.          delay_us();
  192. }*/
  193. void lcd1602_init()
  194. {
  195.          lcd_command(0x38,1);
  196.          lcd_command(0x08,1);
  197.          lcd_command(0x01,1);
  198.          lcd_command(0x06,1);
  199.          lcd_command(0x0c,1);
  200. }

  201. void main()
  202. {
  203.      
  204.      float result;
  205.          delay_ms(100);
  206.          
  207.          BH1750_init();        
  208.          lcd1602_init();
  209. while(1)
  210.      {
  211.          write_add(0x01);   
  212.      write_add(0x10);   

  213.      delay_ms(180);              //延时180ms
  214.     read_BH1750();       //连续读出数据,存储在BUF中
  215.     s=buffer[0];
  216.     s=(s<<8)+buffer[1];//合成数据,即光照数据
  217.    
  218.     result=(float)s/1.2;

  219.     chaizi(result);         //计算数据和显示
  220.         lcd_display(0,0,'L');
  221.         lcd_display(1,0,'i');
  222.         lcd_display(2,0,'g');
  223.         lcd_display(3,0,'h');
  224.         lcd_display(4,0,'t');
  225.     lcd_display(5,0,':');
  226.    
  227.         lcd_display(7,0,wan);
  228.     lcd_display(8,0,qian);  
  229.     lcd_display(9,0,bai);
  230.     lcd_display(10,0,shi);
  231.         lcd_display(11,0,ge);

  232.         lcd_display(13,0,'l'); ////显示数单位
  233.         lcd_display(14,0,'x');

  234.     lcd_display(0,1,'s');  
  235.     lcd_display(1,1,'u');
  236.         lcd_display(2,1,'n');
  237.         lcd_display(3,1,'>');
  238.         lcd_display(4,1,'2');
  239.         lcd_display(5,1,'0');

  240.         lcd_display(9,1,'m');
  241.         lcd_display(10,1,'o');
  242.         lcd_display(11,1,'o');
  243.         lcd_display(12,1,'n');
  244.     lcd_display(13,1,'<');
  245.         lcd_display(14,1,'2');
  246.         lcd_display(15,1,'0');      
  247.          }
  248. }
复制代码
回复

使用道具 举报

ID:251922 发表于 2017-12-5 22:36 | 显示全部楼层
你们搞好了吗?
回复

使用道具 举报

ID:251922 发表于 2017-12-5 22:41 | 显示全部楼层
非黄腾达 发表于 2017-5-2 19:52
现在LCD可以显示,但是数据显示为00000,光强度模块没有起到应有的作用,麻烦你看一下

你们这个搞好了吗,能发个程序给我不
回复

使用道具 举报

ID:351969 发表于 2018-10-30 19:45 | 显示全部楼层
你的程序好了么i
回复

使用道具 举报

ID:351969 发表于 2018-10-30 19:45 | 显示全部楼层
程序搞好了么?我也遇到难得地方
回复

使用道具 举报

ID:540270 发表于 2019-5-26 19:11 | 显示全部楼层
楼主弄好了吗,我也是一样的问题啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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