智能窗帘设计:51单片机+A/D转换+光敏电阻+LCD1602+步进电机

2019-12-03来源: 51hei关键字:智能窗帘  51单片机  A  D转换  光敏电阻  LCD1602  步进电机

 

单片机源程序如下:

#include          


#define uchar unsigned char

#define uint unsigned int

#define yi 0x80       //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)

#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)


uchar display_digit[]={0,0,0};

uchar yuzhi[]={0,0,0};

uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A

uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D


sbit R_D=P2^0;

sbit W_R=P2^1;        

sbit C_S=P2^2;        


sbit Up=P2^3;                

sbit Down=P2^4;                


sbit rw=P2^5;                 //液晶读写端

sbit rs=P2^6;                 //液晶指令/数据输入控制

sbit en=P2^7;                 //液晶使能端


sbit AD_data=P1;        


sbit bianji=P3^4;

sbit jia=P3^7;

sbit jian=P3^6;


uint adval; 

uint fazhi=180;

uchar state=1;//1为窗帘打开,0为窗帘关闭 

uchar zhuangtai=1;//1为窗帘打开,0为窗帘关闭


void  Time_init()                

{

        EA=1;

        TMOD=0x11;

        TH0=0xf8;        

        TL0=0xcc;

        ET0=1;

        TR0=0;

}


void delay(uint time)          

{

        uint x,y;                         

        for(x=time;x>0;x--)

        for(y=110;y>0;y--);        

}


void qiangdushuzhi()                

{

        C_S=0;                                  

        W_R=0;                 //启动AD转换

        delay(1);

        W_R=1;

        C_S=1;

        delay(10);

        P1=0xff;                //读取AD转换值前,先把P1口置1                

        C_S=0;

        R_D=0;                         //AD读使能

        delay(1);                  

        adval=P1;                  //把AD转换好的值,赋给 adval

        R_D=1;

        C_S=1;                         //置1后,为下次AD转换做准备

        delay(1);

        

        display_digit[0]=adval/100;

        display_digit[1]=adval%100/10;                   //取得十位数字

        display_digit[2]=adval%10;                   //取得个位数字

}                


void write_1602com(uchar com)

{

        rs=0;                //数据/指令选择置为指令

        rw=0;                //读写选择置为写

        P0=com;              //送入数据

        delay(1);

        en=1;                //拉高使能端,为制造有效的下降沿做准备

        delay(1);

        en=0;                //en由高变低,产生下降沿,液晶执行命令

}


void write_1602dat(uchar dat)

{

        rs=1;               //数据/指令选择置为数据

        rw=0;               //读写选择置为写

        P0=dat;             //送入数据

        delay(1);

        en=1;               //en置高电平,为制造下降沿做准备

        delay(1);

        en=0;               //en由高变低,产生下降沿,液晶执行命令

}


void write_1602str(uchar *s)  //写字符串

{

        while(*s)

                {

                        write_1602dat(*s++);

    }

}


void lcd_init()

{

        write_1602com(0x38);         //设置液晶工作模式,

        write_1602com(0x0c);         //开显示不显示光标

        write_1602com(0x06);         //整屏不移动,光标自动右移

        write_1602com(0x01);         //清显示

  delay(5);

        write_1602com(yi+5);         //固定符号从第一行第1个位置之后开始显示

        write_1602str("WELCOME");      

        delay(1000);

        write_1602com(0x01); 

}


void display( )

{

        yuzhi[0]=fazhi/100;

        yuzhi[1]=fazhi%100/10;

        yuzhi[2]=fazhi%10;

        write_1602com(yi+0);

        write_1602str(" TARGET:");

  if(yuzhi[0]==0)

        {

                write_1602dat(0x30+yuzhi[1]);

                delay(5);

                write_1602dat(0x30+yuzhi[2]);

                delay(5);

        }

  if(yuzhi[0]!=0)

        {

                write_1602dat(0x30+yuzhi[0]);

                delay(5);

                write_1602dat(0x30+yuzhi[1]);

                delay(5);

                write_1602dat(0x30+yuzhi[2]);

                delay(5);

        }

        write_1602com(er+0);       //er是头文件写的值0x80+0x40

        delay(5);

        write_1602str("CURRENT:");   

        delay(5);

        if(display_digit[0]==0)

        {

                write_1602dat(0x30+display_digit[1]);      //数字+30得到该数字的LCD1602显示码

          delay(5);

          write_1602dat(0x30+display_digit[2]);      //数字+30得到该数字的LCD1602显示码                        

    delay(5);        

                write_1602str(" ");      //数字+30得到该数字的LCD1602显示码                        

    delay(5);        

        }

        if(display_digit[0]!=0)

        {

                write_1602dat(0x30+display_digit[0]); 

          delay(5);

          write_1602dat(0x30+display_digit[1]);      //数字+30得到该数字的LCD1602显示码

          delay(5);

          write_1602dat(0x30+display_digit[2]);      //数字+30得到该数字的LCD1602显示码                        

    delay(5);

        }

        if(zhuangtai==1)

        {

                write_1602com(yi+12);

                write_1602str("OPEN");

        }

        if(zhuangtai==0)

        {

                write_1602com(er+11);

                write_1602str("CLOSE");

        }

}


void zhengzhuan(uchar step)  //上升

{

        uchar i,j,k;

        if(zhuangtai==0)

        {

                write_1602com(0x01); 

                write_1602com(yi+6);

write_1602str

[1] [2] [3]
关键字:智能窗帘  51单片机  A  D转换  光敏电阻  LCD1602  步进电机 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481788.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于51单片机的简易电子琴课程设计
下一篇:新手必看(STC89C52)单片机寻迹避障蓝牙四轮小车的简单实现

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机智能窗帘proteus仿真图与代码
单片机源程序如下:/*********51单片机智能窗帘设计*********//*************JJ电子直营店*************//***************原创设计***************/#include <REGX52.H>                                  //头文件#define uchar unsigned char#define uint unsigned int#define
发表于 2019-11-20
单片机智能窗帘proteus仿真图与代码
宜家推出了一款智能窗帘,还能用智能语音助手操控
宜家作为老牌的家居品牌,一直都在推进家居产品的智能化改造,例如此前的 TRADEFRI 系列灯具,而去年更是宣布与小米达成合作,将全系智能照明产品接入小米 IoT 平台,通过 ZigBee 协议与小米网关直连。最近,宜家的德国网站中出现了两款新品,分别是代号为 KADRILJ(半透明)和 FYRTUR(不透明)的智能窗帘,并提供多种尺寸选择。据官网的视频显示,这两款智能窗帘通过安装在左上角的电池供电,而配对的过程则需要用到配件中的遥控元件完成配对。值得一提的是,除了可以通过官方 app 来控制这两款窗帘,像 Amazon Alexa、HomeKit、Google Assitant 等智能语音助手也能够进行操控。宜家官网显示,这两款
发表于 2019-01-08
宜家推出了一款智能窗帘,还能用智能语音助手操控
Zigbee电动智能窗帘系统理想解决方案
随着社会经济结构、家庭人口结构以及信息技术的发展变化以及人类对家居环境的安全性、舒适性、效率性要求的提高,造成家居智能化的需求大大增加,同时越来越多的家庭要求智能家居产品不仅要满足一些基本的需求,更要求智能家居系统在功能扩展、外延甚至服务方面能够做到简单、方便、安全。智能家居系统采用技术介绍智能窗帘系统是智能家居系统的组成部分,所以其技术也与智能家居系统相同。虽然智能家居的概念很早就出现,市场需求也一直存在,但长期以来智能家居的发展由于受制于相关技术的突破,一直没有得到大规模的应用普及。目前市场存在的智能家居技术介绍如下:1)有线方式这种方式所有的控制信号必须通过有线方式连接,控制器端的信号线更是多得吓人,一但遇到问题排查也相当
发表于 2018-05-07
Zigbee电动智能窗帘系统理想解决方案
Zigbee电动智能窗帘系统理想解决方案
随着社会经济结构、家庭人口结构以及信息技术的发展变化以及人类对家居环境的安全性、舒适性、效率性要求的提高,造成家居智能化的需求大大增加,同时越来越多的家庭要求智能家居产品不仅要满足一些基本的需求,更要求智能家居系统在功能扩展、外延甚至服务方面能够做到简单、方便、安全。智能家居系统采用技术介绍智能窗帘系统是智能家居系统的组成部分,所以其技术也与智能家居系统相同。虽然智能家居的概念很早就出现,市场需求也一直存在,但长期以来智能家居的发展由于受制于相关技术的突破,一直没有得到大规模的应用普及。目前市场存在的智能家居技术介绍如下:1)有线方式这种方式所有的控制信号必须通过有线方式连接,控制器端的信号线更是多得吓人,一但遇到问题排查也相当
发表于 2018-05-04
数据的加密传输——单片机上实现TEA加密解密算法
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性。常用的加密解密算法比如DES、RSA等,受限于单片机的内存和运算速度,实现起来比较困难,但一种叫TEA的加密算法特别适合单片机使用。TEA(Tiny Encryption Algorithm)是一种简单高效的加密算法,以加密解密速度快,实现简单著称。算法很简单,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。目前我只知道QQ一直用的是16轮TEA。我之前做过一个数字的无线对讲机,把语音数据加密后
发表于 2019-12-11
单片机+ULN2003A步进电机控制系统(正反转+加减速)
51单片机步进电机的正反转。加减速控制电路原理图如下:仿真原理图如下 单片机源程序如下:#include<reg52.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit RS = P2^4;//1602数据/命令选择端(H:数据寄存器L:指令寄存器) sbit RW = P2^5;//1602读/写选择端 sbit E  = P2^6;//1602使能信号端sbit key1=P3^0;//用户按键sbit key2
发表于 2019-12-11
单片机+ULN2003A步进电机控制系统(正反转+加减速)
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved