单片机智能窗帘proteus仿真图与代码

发布者:RadiantBlossom最新更新时间:2019-11-20 来源: 51hei关键字:单片机  智能窗帘  proteus 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

/*********51单片机智能窗帘设计*********/

/*************JJ电子直营店*************/

/***************原创设计***************/


#include                                  //头文件

#define uchar unsigned char

#define uint unsigned int


#define CS        P3_0                //ADC0804 CS端口

#define RD        P3_1                //ADC0804 RD端口

#define WR        P3_2                //ADC0804 WR端口

#define g_kz        P2_5         //数码管个位控制

#define s_kz        P2_4        //数码管十位控制

#define b_kz        P2_3        //数码管百位控制

#define q_kz        P2_2        //码管千位控制

#define SMG_XS        P0                //数码管显示端口

#define AD_data        P1                //ADC0804输出端口

#define Up                P2_1        //上限限位开关端口

#define Down         P2_0        //下限限位开关端口

#define Key1        P3_3        //手动/自动切换 按键

#define Key2        P3_4        //定时/光控功能切换 按键

#define Key3        P3_5        //设置 按键

#define Key4        P3_6        //加 按键 (手动模式:打开窗帘 定时模式:定时打开窗帘)

#define Key5        P3_7        //减 按键 (手动模式:关闭窗帘 定时模式:定时关闭窗帘)


#define IA                P2_7        //直流电机控制端口

#define IB                P2_6        //直流电机控制端口


int adval;                 //ADC 输出变量

int j;                        //定义循环变量 i j

uchar flag=0;        //显示标志位(0:正常显示 1:上限光照度设置(调时) 2:下限光照度设置(调分)                                 

bit flag_gd=0;        //光控/定时标志位(0:当前光照度 1:定时时间 )        

bit ms=0;                //模式(0:手动模式 1:自动模式)

bit move=0;                //定时时间到标志位(0:时间未到 1:时间到)

bit OFF_ON=0;        //电机正反转标志位,表示窗帘打开或关闭(0:窗帘关闭 1:窗帘打开)

bit Time_OFF_ON=0;//定时时间到执行窗帘打开或关闭(0:定时关闭窗帘 1:定时打开窗帘)


char hour=12,min=0;sec=0; //定义时间 “时 分 秒”变量 上电默认12.00.00

char num=0;        //时间基数

uint H_GM=240;        //定义上限光敏度设置变量,上电默认200

uint L_GM=100;        //定义下限光敏度设置变量,上电默认100

uchar t=1;                 //数码管动态扫描延时参数

                

uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        

//数码管显示数组      0    1    2    3    4    5    6    7    8    9


void delay(uint time)                   //延时函数

{

        uint x,y;                         //定义临时变量 x y

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

        for(y=110;y>0;y--);        //空操作

}


void  Time_init()                //定时器初始化

{

        EA=1;

        TMOD=0x11;


        /*定时器0初始化(产生PWM控制电机转速)*/        

        TH0=0xf8;        //定时2ms

        TL0=0xcc;

        ET0=1;                //使能T0中断

        TR0=0;                //先不启动定时器0

        /*定时器1初始化(产生50ms定时时间)*/

        TH1=0x4c;                 //50ms

        TL1=0x00;

        ET1=1;

        TR1=0;                //先不启动定时器1        

}


void Key_cl()

{

        static bit keybuf1=1;          //Key1值暂存,临时保存按键扫描值

        static bit backup1=1;          //Key1值备份,保存前一次的扫描值

        static bit keybuf2=1;         //Key2值暂存,临时保存按键扫描值        

        static bit backup2=1;        //Key2值备份,保存前一次的扫描值

        static bit keybuf3=1;        //Key3值暂存,临时保存按键扫描值

        static bit backup3=1;         //Key3值备份,保存前一次的扫描值

        static bit keybuf4=1;        //Key4值暂存,临时保存按键扫描值

        static bit backup4=1;         //Key4值备份,保存前一次的扫描值

        static bit keybuf5=1;        //Key5值暂存,临时保存按键扫描值

        static bit backup5=1;         //Key5值备份,保存前一次的扫描值

        keybuf1=Key1;                          //把Key1当前值扫描值暂存

        if(keybuf1!=backup1)        //Key1当前值与前次值不相等,说明Key1按键有动作

        {

                delay(1);                        //延时去抖

                if(keybuf1==Key1)        //判断Key1扫描值有没有发生变化,即按键抖动

                {

                        if(backup1==1)        //Key1按键按下有效

                        {

                                move=0;                   //重置时间标志位为0(时间未到)

                                TR0=0;                //关闭定时器0

                                ms=~ms;                // 模式取反

                                q_kz=1;b_kz=1;s_kz=1;g_kz=1;//关闭数码管显示

                                IA=0;IB=0;        //窗帘停止        

                        }

                        backup1=keybuf1; //更新备份Key1当前值,以备进行下次比较

                }

        }

        if(ms==0)                          //手动模式下

        {

                if(Key4==0)                //当打开窗帘按键 按下

                {

                        delay(10);        //延时去抖

                        if(Key4==0)        //再判断按键是否按下

                        {

                                move=0;                                //重置时间标志位为0(时间未到)

                                OFF_ON=1;                         //窗帘打开

                                TR0=1;                                //开启定时器0

                                SMG_XS=table[1];         //数码管显示"1"

                                q_kz=1;b_kz=1;s_kz=1;g_kz=0;        //个位显示

                                while(Key4==0);        //等待按键松开

                                TR0=0;                        //关闭定时器0

                                IA=0;IB=0;                //窗帘停止

[1] [2] [3] [4] [5] [6] [7] [8] [9]
关键字:单片机  智能窗帘  proteus 引用地址:单片机智能窗帘proteus仿真图与代码

上一篇:51单片机实现三相六拍的步进电机控制
下一篇:51单片机一个nop代表意思

推荐阅读最新更新时间:2024-11-16 23:07

平头哥宣布开源MCU芯片设计平台
阿里造芯,路人皆知。如今,阿里的芯片野心已经暴露出来。刚刚,在互联网大会上,阿里平头哥宣布开源MCU芯片设计平台,这是平头哥继推出含光800和玄铁910后,又一大重量级产品。平头哥成为国内首家开源芯片设计平台的公司,对于国内MCU技术落后的局面有所改观和警醒。 MCU是把中央处理器的频率与规格做适当缩减,并将内存、计数器、A/D转换、UART、PLC等周边接口都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。开源MCU芯片设计平台是为了让芯片设计和专业的芯片IP供应商以及高校等,更便捷的进行芯片设计工作,从而更快设计更好的芯片。此前,平头哥推出的玄铁910实现性能突破的关键技术包括,采用3发射8执行的复杂
[嵌入式]
11种常见的单片机电路设计模块
1、双路232通信电路 3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232. 2、三极管串口通信 本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。 3、单路232通信电路 三线方式,与上面的三级管搭的完全等效。 4、USB 采用的是PL2303HX,价格便宜,稳定性还不错。 5、SP706S复位电路 带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 6、SD卡模块电路(带锁) 本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和3.3V。但是要注意,有些
[单片机]
11种常见的<font color='red'>单片机</font>电路设计模块
51单片机 LCD1602显示
引脚图 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define out P0 sbit RS=P2^7; sbit RW=P2^6; sbit E=P2^5; void lcd_initial(void); //LCD初始化函数 void check_busy(void); //检查是否忙碌函数 void write_command(uchar com); //写命令函数 void write_data(uchar dat); //写数据函数 void string(
[单片机]
51<font color='red'>单片机</font> LCD1602显示
初学51单片机——简单的流水灯程序
#include reg52.h #include intrins.h //调用库函数 #define uint unsigned int #define uchar unsigned char void delay(uint);//延时函数 uchar a,b; void main() { a=0xfe; while(1) { P1=a; delay(500); a=_crol_(a,1);//利用库函数实现流水灯的左移 } } void delay(uint z) { uint i,j; for(i=z;i 0;i--) for(j=110;j 0;j--); }
[单片机]
单片机与TA8435联接控制步进电机原理图
单片机与TA8435联接控制步进电机原理图 图4是单片机与TA8435相连控制步进电机的原理图,引脚M1和M2决定电机的转动方式:M1=0、M2=0,电机按整步方式运转;M1=1、M2=0,电机按半步方式运转;M1=0、M2=1,电机按1/4细分方式运转;M1=1、M2=1,电机按1/8步细分方式运转,CW/CWW控制电机转动方向,CK1、CK2时钟输入的最大频率不能超过5KHz,控制时钟的频率,即可控制电机转动速率。REFIN为高电平时,NFA和NFB的输出电压为0.8V,REFIN为低电平时,NFA和NFB输出电压为0.5V,这2个引脚控制步进电机输入电流,电流大小与NF端外接电阻关系式为:IO=Vref/Rnf。图4中
[模拟电子]
<font color='red'>单片机</font>与TA8435联接控制步进电机原理图
avr单片机按键程序
  什么是avr单片机   AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。AVR单片机是 Atmel 公司 1997 年推出的 RISC 单片机。RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。RISC 并非只是简单地去减少指令,而是通过使计算机的结构更加简单合理而提高运算速度的。   RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周
[单片机]
avr<font color='red'>单片机</font>按键程序
51单片机RS485通讯程序仿真与MODBUS RTU静止时间详解
仿真原理图如下 由于MODBUS-RTU 要求每帧信息中的数据间隔时间不得超过1.5字符的静止时间。 因此: (1)、当串口产生接收中断后,立即重装“超时定时器”的初始值。(注:超时定时器的初始值和波特率有关) 问题如下:  (a)、由于要求在串口接收中断中重装超时定时器初始值,那么,该超时定时器就只能采用“溢出模式”,而不能采用“CTC模式” (b)、超时定时器必须在程序初始化时就一直开启。 我的理解对吗? (2)两帧之间的3.5字符的静止时间该如何实现呢? 接收到每个字节的时候,初始化定时器就行,最后一个字节后,定时器就溢出了 利用单独的软件定时器,来判断一帧接收报文结束,可以防止若报文接收不完整,该帧通信任务无
[单片机]
51<font color='red'>单片机</font>RS485通讯程序仿真与MODBUS RTU静止时间详解
基于微控制器MSC1210的CSR电源控制系统设计
  摘要:MSC1210是美国TI 公司生产的24位Δ-ΣA/D转换的51兼容单片机。文章介绍了MSC1210的结构特点和工作原理,并给出了在CSR电源控制系统中的硬件电路和软件程序。   关键词:MSC1210; 模数转换器; 电源;控制系统   引言   MSC1210美国德州仪器公司(TI)生产的高集成混合信号处理器件。它集成了一个增强型8051内核,8路24位高精度Δ-ΣA/D转换,21个中断源,16位PWM,全双工UART(并兼容有SPI功能),32K字节FLASH,片内SRAM可达1.2K字节。MSC1210具有高的模拟和数字集成度,体积小,测量精度高,应用灵活等特点,因而该芯片可广泛应用于工业控制过程、智能发射
[安防电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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