历史上的今天
今天是:2024年12月21日(星期六)
2020年12月21日 | 用GY30,LCD,89C52单片机显示光照强度
2020-12-21 来源:51hei


#include #include #include #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(); //延时
上一篇:51单片机自动红外洗手器程序
下一篇:基于51单片机的流水灯实验
史海拾趣
|
有高手会:单片机如何与摄像头进行连接,及其的连接电路和软件编程吗?? 单片机如何与摄像头进行连接,及其的连接电路和软件编程?? 其实可以不用单片机的。。。ARM也可以的。。但是最好用单片机(我就对单片机熟悉点) 迷茫啊。。。。在网上找了好多天都找不到。。。有哪个高手有经验的给点灵感啊。。 呵呵。。。我 ...… 查看全部问答> |
|
这里有一个试验机电控板的项目,准备实现其电子部分及上位机部分;电子部分已经有人可以做了。 现找一位有试验机上位机软件的人士合作,其要求为: 1. 有过试验机项目上位机软件经验 2. 上海地区 请符合要求的有意向人士,联系: Email: leyon ...… 查看全部问答> |
|
发挥您的想像力,ARM2410开发板+GPRS MODEM无线上网在现代社会上的应用. 1.做一个工业上采集数据的设备,可以把采集到的设备上传到网上,还可以收发短信. 2.车载设备上的无线上网??. 欢迎大家踊跃参与,顶者有分.… 查看全部问答> |
|
s3c2440的WINCE系统下,将SMDK2440的BSP包中的CF卡驱动,移植到SMDK2440A中。开发板是优龙公司的YL2440开发板,该开发板本身的BSP包SMDK2440是有CF卡驱动的,但是想在该开发板上运行SMDK2440A的BSP包,需要将SMDK2440的CF卡驱动移植到SMDK2440A上。 ...… 查看全部问答> |
|
编译完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的开发板用于学习,但是这东西上网一搜,到处是,不知道哪种适合我的.还有,配合介绍的开发板,有什么配套的教材和实验教程,让我来练习练习.… 查看全部问答> |
|
最近在学怎么使用FIR滤波器,看了几天有点儿意思了,但具体怎么用不太明白啊。我说一下应用,请大侠们指点一二啊 我做测量的,主要测量交流电,想把采样的信号通过数字滤波器再进行后续计算。现在比如我采集到了128个点,也设计出了 ...… 查看全部问答> |




