一 LCD1602输出一个字符 参考手册配置 注意类型
1在什么位置输出(lcd手册最高位置1)0x80+0x05;
2 输出什么内容'c'
3手册 lcd初始化配置
4 函数调用传位置和字符,写操作分为:RS 为寄存器选择,高电平时选择数据(data----字符)寄存器、低电平时选择指令(cmd---位置 地址)寄存器。
5要先检测是否在忙(读操作 初始化都是在忙 定义一个tmp 循环扫描P0并赋值给tmp判断是否在忙)
二 LCD1602显示字符串
1 底层逻辑不变 在主函数中调用一个函数传过去 (行 列 “字符串”)
2 在函数lcd1602_show中 依据传过来的 行swiitch case 1/2 列:位置函数(即cmd指令)字符串通过不断扫描和偏移(weite_DATA(*string)指令)、
三 温湿度模块、
1根据手册DHT数据线的电平判断模块是否正常(正常会把电平拉低 通过LED的亮灭来判断)
2根据手册配置模块,数据发送前配置 和发送时的配置,在发送前都要配置DHT (通过卡电平的方式),用一个char datas【5】来存放 for i for j来遍历 一个标志位来表示是高电平还是低电平(用高电平(持续实践)来表示高低电平)用char tmp来存放读取的数据 tmp=tmp《《1,tmp |=标志位 datas【i】 = tmp
3通过串口的方式将温湿度的数据传送到电脑端(串口初始化--pcon--scon--TMOD--SMOD--TH1--TL1配置串口 定时器 波特率 计时器开始)(发送字符串---遍历 偏移---调用字符存放在SBUF中 需要软件给TI发送标志复位)
将data【i】的值放入wen_du数组中 lcd1602调用、string调用、data【2】大于23给继电器低电平、蜂鸣器低电平、也可以通过串口(配置)中断来发送open/clase来开关灯和控制风扇
void LCD1602_Show(char hang,char lie,char *string){//行 列 显示
switch(hang){
case 1:Write_CMD(0x80+lie);//显示位置
while(*string){ //显示字符串 字符串偏移 lcd会给位置
Write_DATA(*string);//显示数据
string++;
}
break;
case 2:Write_CMD(0x80+0x40+lie);
while(*string){
Write_DATA(*string);
string++;
}
break;
}
}
void UART_Handle() interrupt 4{
static char i = 0; //静态变量只会执行一次
if(RI == 1){ //打开接收中断
RI = 0; //手册 软件复位
light[i] = SBUF; // 读移位寄存器里面的值
i++;
if(i == size){
i = 0;
}
if(strstr(light,"en")){ //在ligth数组中查找是否有en 有执行
D5 = 0; //输入的字符为O 点亮D5
ji_dian_qi = 0;//有en风扇响
memset(light,'\0',size); //初始化light数组 里面放空,放的大小为sizeof(light)
i = 0; //i回到0 从新开始增加灵敏度
}
if(strstr(light,"se")){
D5 = 1; //输入的字符为C 熄灭D5
ji_dian_qi = 1;
memset(light,'\0',size);
i = 0;
}
}
}
void sendByte(char data_msg){
SBUF = data_msg;
while(!TI);
TI = 0;
}
void sendString(char * str){
while(*str != '\0'){
sendByte(*str);
str++;
}
}
void fa_song_shi_DHT(){
char i;
char j;
char biao_zhi_wei;
char tmp;//tmp里面可以存放0000 0000
fa_song_qian_DHT();//每次都要配置发送前 不然会进入休眠
for(i=0;i<5;i++){
for(j=0;j<8;j++){
while(!DHT);//DHT=1 动作后DHT=0需要取反保持1(一直为低电平) 进入工作模式并延时50us
Delay40us();//在延时50us后再延时40毫秒看是
if(DHT == 1){//延迟44us后是1 则说明是高电平 并while(DHT)让dht走完
biao_zhi_wei = 1;
while(DHT);
}
else{ //否则是低电平
biao_zhi_wei = 0;
}
tmp = tmp<<1;//可以存放0000 0000
tmp |= biao_zhi_wei;//随机的tmp0000 0000 |= 标志位的0000 0001/0000
}
datas[i] = tmp;
}
}
void wen_shi_du_String(){ //把datas【i】中的数据放在字符串数组wen_du、shi_du中
shi_du[0] = 'S';
shi_du[1] = 'D';
shi_du[2] = ':';
shi_du[3] = datas[0]/10+0x30;
shi_du[4] = datas[0]%10+0x30;
shi_du[5] = '.';
shi_du[6] = datas[1]/10+0x30;
shi_du[7] = datas[1]%10+0x30;
shi_du[8] = '\0';
shi_du[8] = '%';
wen_du[0] = 'W';
wen_du[1] = 'D';
wen_du[2] = ':';
wen_du[3] = datas[2]/10+0x30;
wen_du[4] = datas[2]%10+0x30;
wen_du[5] = '.';
wen_du[6] = datas[3]/10+0x30;
wen_du[7] = datas[3]%10+0x30;
wen_du[8] = '\0';
wen_du[8] = 'C';
}