|
66黑币
- 板子是自己焊接的,1602调试可用,图片中与五根杜邦线相连的器件就是GY-30。程序是直接烧入在芯片中,所以下载器只接了正负极,给板子供电。
- 问题是插上usb接口后本来显示GY-30数据的四位都显示成黑线,请问是程序的问题还是焊接的问题呢?如是程序,请帮忙改改吧。程序如下:
主程序:
- #include <reg52.h>
- #include <intrins.h>
- #include <math.h>
- #include <stdio.h>
- #include "GGYY.H"
- #include "lcdd.h"
- #define uint unsigned int
- #define uchar unsigned char
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- BYTE BUF[8];
- uchar code ge,shi,bai,qian;
- int dis_data;
- void Single_Write_BH1750(uchar REG_Address);
- void delay_nms(unsigned int k);
- void Init_BH1750(void);
- void Multiple_Read_BH1750();
- void conversion(uint temp_data);
- void LCD_disp_char(uchar x,uchar y,uchar dat);//??????????????,X(0-15),y(1-2)
- void LCD_disp_str(uchar x,uchar y,uchar *str);
- void LCD_init(void);
- //毫秒延时**************************
- void delay_nms(unsigned int k)
- {
- unsigned int i,j;
- for(i=0;i<k;i++)
- {
- for(j=0;j<121;j++)
- {;}}
- }
- /**************************************
- 延时5微秒(STC90C52RC@12M)
- 不同的工作环境,需要调整此函数,注意时钟过快时需要修改
- 当改用1T的MCU时,请调整此延时函数
- **************************************/
- void Delay5us()
- {
- _nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();
- }
- /**************************************
- 延时5毫秒(STC90C52RC@12M)
- 不同的工作环境,需要调整此函数
- 当改用1T的MCU时,请调整此延时函数
- **************************************/
- void Delay5ms()
- {
- WORD n = 560;
- while (n--);
- }
-
- void main()
- {
- float temp;
- delay_nms(100); //延时100ms
- LCD_init(); //初始化LCD
- Init_BH1750(); //初始化BH1750
-
-
- Delay5ms();
- while(1) //循环
- {
- Single_Write_BH1750(0x01); // power on
- Single_Write_BH1750(0x10); // H- resolution mode
- delay_nms(180); //延时180ms
- Multiple_Read_BH1750(); //连续读出数据,存储在BUF中
- dis_data=BUF[0];
- dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据
-
- temp=(float)dis_data/1.2;
- conversion(temp); //计算数据和显示
-
-
- LCD_disp_str(9,0,"L:");
-
- LCD_disp_char(11,0,qian); //显示数据
- LCD_disp_char(12,0,bai);
- LCD_disp_char(13,0,shi);
- LCD_disp_char(14,0,ge);
- LCD_disp_str(15,0,"l"); ////显示数单位
-
-
-
- }
-
- }
复制代码
GY-30函数体:
GY-30头文件:
- #ifndef _GY30_H
- #define _GY30_H
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCL=P1^0; //IIC时钟引脚定义
- sbit SDA=P1^1; //IIC数据引脚定义
- void delay_nms(unsigned int k);
- void Init_BH1750(void);
- void conversion(uint temp_data);
- void Single_Write_BH1750(uchar REG_Address); //单个写入数据
- uchar Single_Read_BH1750(uchar REG_Address); //单个读取内部寄存器数据
- void Multiple_Read_BH1750(); //连续的读取内部寄存器数据
- //------------------------------------
- void Delay5us();
- void Delay5ms();
- void BH1750_Start(); //起始信号
- void BH1750_Stop(); //停止信号
- void BH1750_SendACK(bit ack); //应答ACK
- bit BH1750_RecvACK(); //读ack
- void BH1750_SendByte(uchar dat); //IIC单个字节写
- uchar BH1750_RecvByte(); //IIC单个字节读
- #endif
复制代码
液晶屏1602部分
- #include <reg52.h>
- #include <intrins.h>
- #include <math.h>
- #include <stdio.h>
- #include "lcdd.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD_DB P0 //数据口
-
- void delay_n10us(uint n) //延时
- {
- uint i;
- for(i=n;i>0;i--)
- {
- nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- }
- /*void WaitForEnable(void)
- {
- LCD_DB=0xff;
- LCD_RS=0;LCD_RW=1;_nop_();
- LCD_E=1;_nop_();_nop_();
- while(LCD_DB&0x80);
- LCD_E=0;
- }*/
- void LCD_init(void)
- {
- delay_n10us(10);
- LCD_write_command(0x38);//??8???,2?,5x7
- delay_n10us(10); LCD_write_command(0x0c);//???,???,???
- delay_n10us(10); LCD_write_command(0x06);//??????,?????
- delay_n10us(10); LCD_write_command(0x01);//??????
- delay_n10us(100); //????,????,???n?10us
- }
- void LCD_write_command(uchar dat)
- {
- delay_n10us(10);
- LCD_RS=0; //??
- LCD_RW=0; //??
- LCD_E=1; //??
- LCD_DB=dat; delay_n10us(10); //????,??LCD1602?,?for??1???????????
- LCD_E=0; delay_n10us(10); //????,??LCD1602?,?for??1???????????
- }
- void LCD_write_data(uchar dat)
- {
- delay_n10us(10);
- LCD_RS=1; //??
- LCD_RW=0; //??
- LCD_E=1; //??
- LCD_DB=dat; delay_n10us(10);
- LCD_E=0; delay_n10us(10);
- }
- void LCD_disp_char(uchar x,uchar y,uchar dat)
- {
- uchar address;
- if(y==0)
- address=0x80+x;
- else
- address=0xc0+x;
- LCD_write_command(address);
- LCD_write_data(dat);
- }
- void LCD_disp_str(uchar x,uchar y,uchar *str)
- {
- uchar address;
- if(y==0)
- address=0x80+x;
- else
- address=0xc0+x;
- LCD_write_command(address);
- while(*str!='\0')
- {
- LCD_write_data(*str);
- str++;
- }
- }
复制代码
液晶屏头文件
- #ifndef _LCDD_H
- #define _LCDD_H
- #include <reg52.h>
- #define LCD_DB P0
- #define uchar unsigned char
- sbit LCD_RS=P2^7;
- sbit LCD_RW=P2^6;
- sbit LCD_E=P2^5;
- void LCD_init(void); //?????
- void LCD_write_command(uchar command); //?????
- void LCD_write_data(uchar dat); //?????
- void LCD_disp_char(uchar x,uchar y,uchar dat);//??????????????,X(0-15),y(1-2)
- void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602???????
- #endif
复制代码
比较着急,希望懂的人帮帮我吧,谢谢大家了
|
|