资源简介
这是基于STC12C5A60S单片机的一个成功测试程序 应用于1602 和DHT11温湿度 初学者使用
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^2;
sbit RW=P2^1;
sbit EN=P2^0;
sbit da=P2^3;
uchar code z1[]=“shidu:“;
uchar code z2[]=“wendu:“;
uchar b0b1b2b3b4b5b6b7b8b9;
uchar M0[5]={“0““0““0““0“};
uchar M[5]={“0““0““0““0“};
uchar S[2]={“0“}RJYD1; //J计时R判断1的正确与否D1数据的暂时存储空间 D1必须全局变量
void delayms(int a)
{
int ij;
for(i=0;i {
for(j=0;j<122;j++);
} //1.001ms
}
void delay5us()
{
uchar b;
b--;
b--;
b--;
b--;
b--; //5.00um
}
void delays(uint o)
{
uint ij;
for(i=0;i for(j=0;j<800;j++);
}
void wd(uchar d) //写数据
{
delayms(1);
RS=1;
RW=0;
EN=0;
P0=d;
delayms(1);
EN=1;
delayms(1);
EN=0;
}
void wc(uchar c) //写指令
{
delayms(1);
RS=0;
RW=0;
EN=0;
P0=c;
delayms(1);
EN=1;
delayms(1);
EN=0;
}
void lcdr()
{
delayms(1);
wc(0x38);
delayms(1);
wc(0x06); //每写一字符指针移动
delayms(1);
wc(0x0c); //开显示无光标
}
void lcd1()
{
uint i;
wc(0x80); //第一行最左边
delayms(1);
for(i=0;i<6;i++)
{
wd(z1[i]);
delayms(1);
}
wc(0x80+0x40);
for(i=0;i<6;i++)
{
wd(z2[i]);
delayms(1);
}
}
void D() //单次取值 D1是数据的存储空间
{
uint i;
for(i=0;i<8;i++)
{
J=2;
while((!da)&&J++); //2.043ms P10是1的时候出来
delay5us();
delay5us();
delay5us();
delay5us();
delay5us(); //45us(28-70)
R=0;
if(da) //如果低电平(50微秒低电平数据的标志)
R=1;
D1<<=1;
D1|=R;
J=2;
while((da)&&J++);
}
}
void CD() //传递 信号的主控制
{
delays(250);
da=0; //开始信号
delayms(19); //大于18ms 18.925ms
da=1;
J=2; //开始信号结束
while((da)&&J++); //主机拉高20us结束
if(!da) //有低电平响应可读取DHT11的响应信号p10=0出
{
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us(); //90us
J=2;
while((da)&&J++); //低电平出
D();
M[0]=D1;
D();
M[1]=D1;
D();
M[2]=D1;
D();
M[3]=D1;
D();
M[4]=D1;
da=1; //注意DHT11温度 湿度的小数部分为0(来自官方PDF)
}
Y=M0[0]+M0[1]+M0[2]+M0[3];
if(Y=M0[4])
{
M[0]=M0[0];
M[1]=M0[1];
M[2]=M0[2];
M[3]=M0[3];
}
}
void danzifu(int k) //转换成单字符
{
S[0]=M[k]/10;
S[1]=M[k]%10;
}
void lcd2() //显示温度数值
{
int i;
wc(0x80+7); //第一行
delayms(1);
danzifu(0);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(‘%‘);
wc(0x80+0x40+7);//第二行
danzifu(2);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(0xdf);
wd(‘c‘);
}
void main()
{
CLK_DIV=0x02;
lcdr();
lcd1();
while(1)
{
CD();
lcd2();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-18 13:10 DHT11温湿度液晶1602显示\
文件 6376 2009-05-07 14:37 DHT11温湿度液晶1602显示\STARTUP.A51
文件 14064 2012-03-18 13:04 DHT11温湿度液晶1602显示\STARTUP.LST
文件 749 2012-03-18 13:04 DHT11温湿度液晶1602显示\STARTUP.OBJ
文件 19736 2012-03-18 13:04 DHT11温湿度液晶1602显示\text
文件 2891 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.c
文件 2292 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.hex
文件 41 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.lnp
文件 8654 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.LST
文件 15685 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.M51
文件 21039 2012-03-18 13:04 DHT11温湿度液晶1602显示\text.OBJ
文件 567 2012-03-18 13:10 DHT11温湿度液晶1602显示\text.plg
文件 57112 2012-03-18 13:10 DHT11温湿度液晶1602显示\text.uvopt
文件 13395 2012-03-17 09:38 DHT11温湿度液晶1602显示\text.uvproj
文件 57762 2012-03-17 09:38 DHT11温湿度液晶1602显示\text_uvopt.bak
文件 0 2012-03-17 08:37 DHT11温湿度液晶1602显示\text_uvproj.bak
文件 2885 2012-03-17 08:49 DHT11温湿度液晶1602显示\新建文本文档.txt
- 上一篇:安徽县级shp文件2013
- 下一篇:xUtils实用工具包
相关资源
- HX711完整单片机程序+图
- VL53l0x的51单片机程序
- 马达测试单片机程序
- 51单片机蜂鸣器音乐实验(致爱丽丝)
- 大气压强传感器BMP280单片机程序
- 松翰单片机程序
- 基于STC12C5A60S2的DS18B20温度显示工程
- 基于STC12C5A60S2自带AD转换和TL5615芯片完
- 单片机程序DS18B20-液晶1602显示温度和
- 51单片机程序1602LCD液晶秒表
- 血压计单片机程序C51
- 光电编码器-单片机程序(ATmega16).
- hmc5883l 电子罗盘430单片机程序
- DAC 单片机程序
- DS3231+12864 0.96oled 51单片机程序
- 51单片机程序.zip
- ISD1700语音芯片 51单片机程序
- modbus RTU单片机程序编写
- NRF905无线PC控制台操作界面及单片机程
- USB转串口驱动源代码及单片机程序
- 单片机程序加密的几种实用方法
- ds2781单总线avr单片机程序
- 时间片轮转算法在单片机程序设计中
- SPIFlash W25Q64 新唐单片机程序
- STC 89C51/52单片机程序150例程
- 基于51单片机的VL53L0X激光测距传感器
- ESP8266控制51单片机程序
- GPRS模块 AT指令配置连接服务器 单片机
- PIC单片机程序全集
- 单片机程序生成器 软件
评论
共有 条评论