历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2020年12月21日 | 用GY30,LCD,89C52单片机显示光照强度

2020-12-21 来源:51hei

#include          

#include      //Keil library  

#include     //Keil library        

#include 

#define   uchar unsigned char

#define   uint unsigned int        

#define   DataPort P0         //LCD1602数据端口

sbit          SCL=P1^0;      //IIC时钟引脚定义

sbit            SDA=P1^1;      //IIC数据引脚定义

sbit      LCM_RS=P1^2;   //LCD1602命令端口               

sbit      LCM_RW=P1^3;   //LCD1602命令端口               

sbit      LCM_EN=P1^4;   //LCD1602命令端口


#define          SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改

                              //ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8

typedef   unsigned char BYTE;

typedef   unsigned short WORD;


BYTE    BUF[8];                         //接收数据缓存区              

uchar   ge,shi,bai,qian,wan;            //显示变量

int     dis_data;                       //变量


void delay_nms(unsigned int k);

void InitLcd();

void Init_BH1750(void);


void WriteDataLCM(uchar dataW);

void WriteCommandLCM(uchar CMD,uchar Attribc);

void DisplayOneChar(uchar X,uchar Y,uchar DData);

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(BYTE dat);         //IIC单个字节写

BYTE BH1750_RecvByte();                 //IIC单个字节读


//-----------------------------------


//*********************************************************

void conversion(uint temp_data)  //  数据转换出 个,十,百,千,万

{  

    wan=temp_data/10000+0x30 ;

    temp_data=temp_data%10000;   //取余运算

        qian=temp_data/1000+0x30 ;

    temp_data=temp_data%1000;    //取余运算

    bai=temp_data/100+0x30   ;

    temp_data=temp_data%100;     //取余运算

    shi=temp_data/10+0x30    ;

    temp_data=temp_data%10;      //取余运算

    ge=temp_data+0x30;         

}


//毫秒延时**************************

void delay_nms(unsigned int k)        

{                                                

unsigned int i,j;                                

for(i=0;i{                        

for(j=0;j<121;j++)                        

{;}}                                                

}


/*******************************/

void WaitForEnable(void)        

{                                       

DataPort=0xff;               

LCM_RS=0;LCM_RW=1;_nop_();

LCM_EN=1;_nop_();_nop_();

while(DataPort&0x80);        

LCM_EN=0;                                

}                                       

/*******************************/

void WriteCommandLCM(uchar CMD,uchar Attribc)

{                                       

if(Attribc)WaitForEnable();        

LCM_RS=0;LCM_RW=0;_nop_();

DataPort=CMD;_nop_();        

LCM_EN=1;_nop_();_nop_();LCM_EN=0;

}                                       

/*******************************/

void WriteDataLCM(uchar dataW)

{                                       

WaitForEnable();               

LCM_RS=1;LCM_RW=0;_nop_();

DataPort=dataW;_nop_();        

LCM_EN=1;_nop_();_nop_();LCM_EN=0;

}               

/***********************************/

void InitLcd()                                

{                        

WriteCommandLCM(0x38,1);        

WriteCommandLCM(0x08,1);        

WriteCommandLCM(0x01,1);        

WriteCommandLCM(0x06,1);        

WriteCommandLCM(0x0c,1);

}                        

/***********************************/

void DisplayOneChar(uchar X,uchar Y,uchar DData)

{                                                

Y&=1;                                                

X&=15;                                                

if(Y)X|=0x40;                                       

X|=0x80;                        

WriteCommandLCM(X,0);               

WriteDataLCM(DData);               

}                                                


/**************************************

延时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 BH1750_Start()

{

    SDA = 1;                    //拉高数据线

    SCL = 1;                    //拉高时钟线

    Delay5us();                 //延时

    SDA = 0;                    //产生下降沿

    Delay5us();                 //延时

    SCL = 0;                    //拉低时钟线

}


/**************************************

停止信号

**************************************/

void BH1750_Stop()

{

    SDA = 0;                    //拉低数据线

    SCL = 1;                    //拉高时钟线

    Delay5us();                 //延时

    SDA = 1;                    //产生上升沿

    Delay5us();                 //延时

}


/**************************************

发送应答信号

入口参数:ack (0:ACK 1:NAK)

**************************************/

void BH1750_SendACK(bit ack)

{

    SDA = ack;                  //写应答信号

    SCL = 1;                    //拉高时钟线

    Delay5us();                 //延时

推荐阅读

史海拾趣

Digilent公司的发展小趣事

作为电子行业的领军企业之一,DIALIGHT始终将技术创新作为公司发展的核心驱动力。公司拥有一支高素质的研发团队和先进的研发设施,不断推出具有创新性和竞争力的LED产品。同时,DIALIGHT还积极与高校、科研机构等合作,共同推动LED照明技术的进步和应用。

得力(deli)公司的发展小趣事

得力公司最初以文具制造起家,但在电子科技快速发展的时代,公司意识到必须转型升级以适应市场需求。于是,得力决定进军专业门槛高、技术壁垒深的打印机产业。经过数年的科研攻坚,得力成功研发出首台激光工程机,并在随后几年内,发展成为国内唯一一家同时掌握激光、喷墨打印核心技术研发、生产能力的企业。这一跨越不仅展现了得力公司在科技创新方面的决心和毅力,也为其在电子行业树立了新的里程碑。

Diodes Incorporated公司的发展小趣事

近年来,Diodes Incorporated的财务表现稳步提升。根据公司公布的财报数据显示,公司归母净利润持续增长,营业收入也保持着稳定的增长态势。这一成绩的取得,得益于公司对产品质量的严格把控、对市场需求的精准把握以及对新技术的持续投入。同时,公司还通过优化生产流程、降低生产成本等措施,进一步提升了盈利能力。

Communications公司的发展小趣事

在全球化的大背景下,一家名为“全球通信”的公司积极实施国际化发展战略,成功拓展了海外市场。他们不仅将产品和技术推向全球,还积极参与国际标准和规范的制定,提升了公司在国际通信行业的影响力。

通过与海外企业的合作与交流,“全球通信”不断吸收国际先进技术和管理经验,提升了自身的竞争力。同时,他们还积极参与国际公益事业,树立了良好的企业形象。

Astec [Astec America, Inc]公司的发展小趣事

随着全球环保意识的不断提高,Astec也开始关注绿色环保和可持续发展问题。公司积极采用环保材料和节能技术,推出了一系列绿色电源产品。同时,Astec还加大了对环保技术的研发力度,努力在保持产品性能的同时,降低生产过程中的能耗和排放。这些举措不仅有助于公司应对环保法规的挑战,还提升了公司的社会形象。

EDI [Electronic devices inc.]公司的发展小趣事

在1950年代,Eclipse Magnetics公司决定将他们的磁铁涂上红色,并与马蹄形标志和公司颜色相匹配。这个简单的改变在当时看似微不足道,但却成为了一个重要的转折点。红色磁铁不仅提升了产品的视觉吸引力,还增强了品牌识别度。随着红色磁铁的广泛应用,Eclipse Magnetics开始逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

有高手会:单片机如何与摄像头进行连接,及其的连接电路和软件编程吗??

单片机如何与摄像头进行连接,及其的连接电路和软件编程?? 其实可以不用单片机的。。。ARM也可以的。。但是最好用单片机(我就对单片机熟悉点) 迷茫啊。。。。在网上找了好多天都找不到。。。有哪个高手有经验的给点灵感啊。。 呵呵。。。我 ...…

查看全部问答>

求上海试验机-上位机软件经验人士合作

这里有一个试验机电控板的项目,准备实现其电子部分及上位机部分;电子部分已经有人可以做了。 现找一位有试验机上位机软件的人士合作,其要求为: 1. 有过试验机项目上位机软件经验 2. 上海地区 请符合要求的有意向人士,联系: Email: leyon ...…

查看全部问答>

SIM300接线问题

谁有GPRS模块SIM300的接线图呀?共享下?谢过了先!…

查看全部问答>

发挥您的想像力,ARM2410开发板+GPRS MODEM无线上网在现代社会上的应用.

1.做一个工业上采集数据的设备,可以把采集到的设备上传到网上,还可以收发短信. 2.车载设备上的无线上网??. 欢迎大家踊跃参与,顶者有分.…

查看全部问答>

关于CF卡的移植问题,高手们给点意见

s3c2440的WINCE系统下,将SMDK2440的BSP包中的CF卡驱动,移植到SMDK2440A中。开发板是优龙公司的YL2440开发板,该开发板本身的BSP包SMDK2440是有CF卡驱动的,但是想在该开发板上运行SMDK2440A的BSP包,需要将SMDK2440的CF卡驱动移植到SMDK2440A上。 ...…

查看全部问答>

关于WINCE编译平台的问题

编译完wince平台后,下载image文件到模拟器中运行.模拟器一直黑屏.下面是DEBUG信息: 望高人指点!   0 PID:0 TID:0 RTC - Status Reg B - 0x02       0 PID:0 TID:0 PCIBIOS:: BIOS Address static map to addr= ...…

查看全部问答>

如果您还没觉得这个问题烦,请帮帮我^_^

象很多人一样,我只是弄个WINCE系统出来用用,用DOS+LOADCEPC+BN.BIN 已经可以成功解包,进入WINCE系统了. 但,用bootloader +nk.bin的方式,我一直没办法成功进入系统. 我的方法是:在public/common/oak/csp/x86/biosloader/doskimages点击setupdisk1 ...…

查看全部问答>

问个弱弱的问题!!但是决定我以后的路!

现在有两个公司同意录用我,一个搞嵌入式开发可能是基于Arm的,好像听他们说是双mcu的,外加os的植入等,这个钱少;另一个是搞基于moto系列的单片机开发,可能还能学点关于蓝牙,红外方面的知识,钱稍多点。 两方面我都不行,初学。问问各位老大, ...…

查看全部问答>

请教!想买块ARM7的开发版,不知道选型.大家给点意见.

小可,新手,想买块ARM7的开发板用于学习,但是这东西上网一搜,到处是,不知道哪种适合我的.还有,配合介绍的开发板,有什么配套的教材和实验教程,让我来练习练习.…

查看全部问答>

FIR滤波器具体应用的问题

最近在学怎么使用FIR滤波器,看了几天有点儿意思了,但具体怎么用不太明白啊。我说一下应用,请大侠们指点一二啊     我做测量的,主要测量交流电,想把采样的信号通过数字滤波器再进行后续计算。现在比如我采集到了128个点,也设计出了 ...…

查看全部问答>