#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code table[] = {'0','1','2','3','4','5','6','7','8','9'};
uchar num=0;
uint number;
uchar WAN,QIAN,BAI,SHI,GE;
void timero(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
void delay(uint x)
{
uchar i;
while(x--)
for(i=125;i!=0;i--);
}
void init()
{
//P2=table[0];
//P1=0x00;
TMOD=0x51;
TH0=-50000/256;
TL0=-50000%256;
ET0=1;
TR0=1;
TR1=1;
EA=1;
}
sbit int1=P3^3; //定义管脚功能
sbit cs=P3^5;
sbit wr=P3^7;
sbit rd=P3^6;
#define LCD_data P0
sbit LCD_RS=P2^7;
sbit LCD_RW=P2^6;
sbit LCD_EN=P2^5;
sbit LCD_PSB=P2^4;
//sbit LCD_RST=P0^6;
unsigned int date;
void delay_ms(uint x)
{
int i,j;
for(j = 0; j < x; j++)
{
for(i = 0; i < 110; i++)
{
;
}
}
}
void delay10ms(void) //延时10ms
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void write_cmd(uchar cmd)//写入指令
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_ms(5);
LCD_EN=1;
delay_ms(5);
LCD_EN=0;
}
/*设定显示位置*/
void lcd_pos(uchar X, uchar Y)
{
uchar pos;
if(X == 0)
{
X = 0x80;
}
else if(X == 1)
{
X = 0x90;
}
else if(X == 2)
{
X = 0x88;
}
else if(X == 3)
{
X = 0x98;
}
pos = X + Y;
write_cmd(pos); //显示地址
}
/*写显示数据到LCD*/
/*
RS=H ——表示DB0-DB7为显示数据
RW=L ——RW=L,E='H-L',DB0-DB7数据被写到IR或DR
E=高脉冲
DB0-DB7=显示数据
*/
void write_dat(uchar dat)//写入数据
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_ms(1);
LCD_EN=1;
delay_ms(1);
LCD_EN=0;
}
/*LCD初始化*/
void lcd_init()
{
// LCD_RST=1;// 禁用LCD复位
LCD_PSB=1;//并口方式
write_cmd(0x30);//基本操作指令
delay_ms(1);
write_cmd(0x0c);//打开显示,光标关闭
delay_ms(1);
write_cmd(0x01);//清除LCD显示类容,执行要4.6ms。
delay_ms(5);
write_cmd(0x06);//光标右移,整体不移
}
void display_init()
{
uint i;
uchar dis1[]={"湿度:"};
lcd_pos(0,0);
i=0;
while(dis1[i]!='\0') //
{
write_dat(dis1[i]);
i++;
}
}
void dis_refresh() //BCD码
{
lcd_pos(0,3);
write_dat(table[date/1000]); //显示千位
write_dat(table[date%1000/100]);
write_dat(table[date%100/10]);
write_dat(table[date%10]);
}
void main()
{
init();
lcd_init();//液晶初始化
display_init();//液晶显示
while(1)
{
if(num>=20)
{
num=0;
number=TH1*256+TL1;
TH1 = 0;
TL1 = 0;
if(( 5623<= number)&&( number<=6852) )//相对湿度在有效范围内(0%--100%)
{
if(( 6734<number)&&( number<= 6852) )
{ SHI = 0; GE =(6852 -number)*10/118; }
if( (6618<number)&&( number<= 6734) )
{ SHI = 1; GE =(6734 -number)*10/116; }
if( (6503<number)&&( number<= 6618 ) )
{ SHI = 2; GE =(6618 -number)*10/115; }
if( (6388<number)&&( number<= 6503 ) )
{ SHI = 3; GE =(6503 -SHI)*10/115; }
if( (6271<number)&&( number<= 6388 ) )
{ SHI = 4; GE =(6388 -number)*10/117; }
if( (6152<number)&&( number<= 6271 ) )
{ SHI = 5; GE =(6271 -number)*10/119; }
if( (6029<number)&&( number<= 6152 ) )
{ SHI = 6; GE =(6152 -number)*10/123; }
if( (5901<number)&&( number<= 6029 ) )
{ SHI = 7;GE =(6029 -number)*10/128; }
if( (5766<number)&&( number<= 5901 ))
{ SHI= 8; GE =(5901 -number)*10/135; }
if( (5623<number)&&(number<= 5766))
{ SHI = 9; GE =(5766 -number)*10/143; }
}
else
{
GE = 0; SHI = 0;
}
}
date=SHI*10+GE; //读出数据湿度
dis_refresh(); //BCD码
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
HS1101湿度计(PCB+原理图)
共28个文件
opt:3个
pcb:2个
c:2个
5星 · 超过95%的资源 需积分: 49 143 下载量 116 浏览量
2011-09-15
20:01:16
上传
评论 15
收藏 162KB ZIP 举报
温馨提示
这是大二CDIO时用HS1101做的湿度计,用的是湿度传感器HS1101和NE555组成的振荡电路,通过单片机测频率的方法做的,里面包括电路图,和51的源代码,代码里面有一部分是1602液晶的代码,不需要的可以删掉
资源推荐
资源详情
资源评论
收起资源包目录
HS1101湿度计.zip (28个子文件)
湿度计
Backup of PCB1.PCB 94KB
shidu.opt 48KB
shidu.dsw 535B
hs1101改
sssssss.Opt 1KB
shidu.c 3KB
shidu.Opt 718B
新建文件夹.zip 26KB
sssssss_Uv2.Bak 2KB
sssssss.hex 3KB
wendu.OBJ 10KB
sssssss 9KB
sssssss_Opt.Bak 1024B
wendu.LST 8KB
sssssss.plg 162B
shidu.Uv2 2KB
sssssss.M51 12KB
sssssss.lnp 29B
新建文件夹
shidu1.LST 8KB
Debug
vc60.pdb 28KB
vc60.idb 33KB
Previous Backup of PCB1.PCB 94KB
shidu.C 4KB
wet.ddb 490KB
Previous Backup of Sheet1.Sch 16KB
Backup of Sheet1.Sch 16KB
shidu.plg 777B
shidu.dsp 3KB
shidu.ncb 33KB
共 28 条
- 1
memecaoyu
- 粉丝: 9
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页