本作品采用STC89C52RC单片机最小系统和0.96寸OLED显示屏(IIC)设计,基于DHT11的温湿计(单总线)。实测通过,完美运行。
部分源码:完整源码见文尾附件
- void main()
- {
- DHT11_delay_ms(4500);
- OLED_init();//初始化OLED(内存地址模式默认使用水平地址模式,可在初始化程序中更改)
-
- while(1)
- {
- //打印BMP图片(图片数组,选择图片的取模方式(水平取模:0x00或垂直取模:0x01),是否反色(填0或1))
- OLED_print_BMP(BMP0,0x00,0);
- Delay1000ms();
- OLED_clear();//清屏
- DHT11_receive();
- OLED_print_text(0,0,"湿",0);
- OLED_print_text(0,2,"度",0);
- OLED_print_text(0,6,"温",0);
- OLED_print_text(0,8,"度",0);
- //OLED_print_text(1,0,rec_dat,0);
- OLED_print_char(1,0,rec_dat[0],0);
- OLED_print_char(1,1,rec_dat[1],0);
- OLED_print_char(1,2,rec_dat[2],0);
- OLED_print_char(1,3,rec_dat[3],0);
- OLED_print_char(1,4,rec_dat[4],0);
- OLED_print_char(1,5,rec_dat[5],0);
- OLED_print_char(1,6,rec_dat[6],0);
- OLED_print_char(1,7,rec_dat[7],0);
- OLED_print_char(1,8,rec_dat[8],0);
-
- Delay1000ms();
- OLED_clear();//清屏
-
- }
- }
- OLED.C
- #include <intrins.h>
- #include "public.h"
- #include "OLED.h"
- #include "ASCII.h"
- #include "text.h"
- #include "port.h"
- //使用位操作加快IIC读写速度
- u8 bdata Byte_data;
- sbit Byte_data7=Byte_data^7;
- sbit Byte_data6=Byte_data^6;
- sbit Byte_data5=Byte_data^5;
- sbit Byte_data4=Byte_data^4;
- sbit Byte_data3=Byte_data^3;
- sbit Byte_data2=Byte_data^2;
- sbit Byte_data1=Byte_data^1;
- sbit Byte_data0=Byte_data^0;
- void OLED_delay500ms()//12.000MHz
- {
- u8 i,j,k;
- i=23;
- j=205;
- k=120;
- do
- {
- do
- {
- while (--k);
- }while (--j);
- }while (--i);
- }
- //IIC通信开始
- void IIC_start()
- {
- OLED_CLK=1;
- OLED_SDA=1;
- OLED_SDA=0;
- OLED_CLK=0;
- }
- //IIC通信停止
- void IIC_stop()
- {
- OLED_CLK=1;
- OLED_SDA=0;
- OLED_SDA=1;
- }
- //IIC写入一个字节(字节)
- void IIC_write_Byte(u8 Byte)
- {
- OLED_CLK=0;
- Byte_data=Byte;
-
- OLED_SDA=Byte_data7;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data6;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data5;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data4;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data3;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data2;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data1;OLED_CLK=1;OLED_CLK=0;
- OLED_SDA=Byte_data0;OLED_CLK=1;OLED_CLK=0;
- OLED_CLK=1;//IIC应答
- OLED_CLK=0;
- }
- //MCU向OLED写入一个字节(字节数据,选择字节为命令还是数据)
- void MCU_write_OLED_Byte(u8 Byte,u8 command_or_data)
- {
- IIC_start();//IIC通信开始
- IIC_write_Byte(0x78);//从机地址
- IIC_write_Byte(command_or_data);
- IIC_write_Byte(Byte);
- IIC_stop();//IIC通信停止
- }
- //光标的位置,0到7行,0到127列(行,列)
- void OLED_cursor_location(u8 row,u8 column)
- {
- MCU_write_OLED_Byte(0xB0+row,OLED_COMMAND);//设置行(0~7)
- MCU_write_OLED_Byte(0x10|(column&0xF0)>>4,OLED_COMMAND);//设置显示位置大列(0~7)
- MCU_write_OLED_Byte(0x00|(column&0x0F),OLED_COMMAND);//设置显示位置小列(0~7)
- }
- //设置内存地址模式(使用水平地址模式:0x00或垂直地址模式:0x01)
- void OLED_set_memory_address_mode(u8 mode)
- {
- MCU_write_OLED_Byte(0x20,OLED_COMMAND);//设置内存地址模式(使用水平地址模式或垂直地址模式)
- MCU_write_OLED_Byte(mode,OLED_COMMAND);//水平地址模式:0x00,垂直地址模式:0x01,页地址模式:0x02
- MCU_write_OLED_Byte(0x21,OLED_COMMAND);//设置显示位置列初始地址和终止地址
- MCU_write_OLED_Byte(0x00,OLED_COMMAND);//列初始地址
- MCU_write_OLED_Byte(0x7F,OLED_COMMAND);//列终止地址
- MCU_write_OLED_Byte(0x22,OLED_COMMAND);//设置显示位置页初始地址和终止地址
- MCU_write_OLED_Byte(0x00,OLED_COMMAND);//页初始地址
- MCU_write_OLED_Byte(0x07,OLED_COMMAND);//页终止地址
- }
复制代码 完整源码:
OHT11 OLED(iic).zip
(74.83 KB, 售价: 2 E币)
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|