|
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
復制代碼
比較著急,希望懂的人幫幫我吧,謝謝大家了
|
|