历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2019年11月20日 | 单片机智能窗帘proteus仿真图与代码

2019-11-20 来源:51hei

单片机源程序如下:

/*********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;                //窗帘停止

推荐阅读

史海拾趣

CAMDENBOSS公司的发展小趣事

CAMDENBOSS公司深知人才是企业发展的核心动力。因此,公司注重人才培养和团队建设,通过提供丰富的培训和学习机会,不断提升员工的技能和素质。同时,公司还建立了完善的激励机制和晋升通道,鼓励员工积极创新、勇攀高峰。这些举措不仅增强了员工的归属感和凝聚力,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均基于虚构和假设,并非CAMDENBOSS公司的真实历史。如果您需要了解该公司的真实发展情况,建议查阅相关资料或联系该公司进行了解。

铨力(ALLPOWER)公司的发展小趣事

随着新能源汽车市场的快速发展,铨力公司看到了新的发展机遇。于是,公司开始布局新能源汽车领域,研发和生产新能源汽车所需的电源和充电设备。通过不断创新和拓展市场,铨力在新能源汽车领域也取得了显著的成绩,为公司的发展注入了新的动力。

这五个故事展示了铨力(ALLPOWER)公司在电子行业中的发展历程和取得的成就。从创立初期的太阳能电源产品研发,到技术突破和产品升级,再到国际市场的拓展和产业链整合,以及新能源汽车领域的布局,铨力始终保持着创新的精神和进取的态度,不断推动着公司的发展。

DDK公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。DDK公司深知这一点,因此始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测的每一个环节都严格把控,确保每一件产品都符合高标准、严要求。这种对品质的执着追求,让DDK公司的产品在市场上赢得了良好的声誉,赢得了消费者的信任和忠诚。

Data Translation Inc公司的发展小趣事

Data Translation在追求企业发展的同时,也积极履行社会责任和推动可持续发展。公司关注环境保护和员工福利等方面的问题,通过采用环保材料、节能减排等措施降低生产过程中的环境污染和能源消耗;通过提高员工福利待遇、加强员工培训等方式提升员工的工作满意度和忠诚度。这些举措不仅为公司赢得了良好的社会声誉和形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事仅为概述框架,并未详细展开每个故事的具体情节和细节。在实际编写时,你可以根据Data Translation Inc公司的具体发展历程和业务特点进行进一步的补充和完善。

Anixter Inc公司的发展小趣事

随着公司业务的不断发展,Data Translation开始寻求全球扩张的机会。公司通过设立海外分支机构、与当地企业合作等方式,成功将产品推向全球市场。同时,公司还加大了品牌建设的力度,通过参加国际展会、发布新产品等方式提高品牌知名度。这些举措不仅为公司带来了更多的客户和合作伙伴,还进一步巩固了其在全球数据采集和处理领域的领先地位。

东科半导体(DK)公司的发展小趣事

随着公司产品的不断升级和市场需求的不断增长,东科半导体(DK)公司开始积极拓展国内外市场。公司加强与全球知名企业的合作,产品成功进入苹果、华为、OPPO等一线品牌的供应链。同时,东科还积极参加国际电子展会和论坛,展示公司的最新技术和产品,提升了公司的品牌知名度和影响力。

问答坊 | AI 解惑

ARM入门

详情请见天地全球通?中国网(http://www.heaworld.com)成立于2004年3月,总部位于青岛市高新区,是由神力企业集团及AID、August Capital、HOSCH、VERTOL、欧亚投资、瑞典风险投资等多家国际公司共同合作组建的以服务中小型企业为宗旨的B2B电子商务 ...…

查看全部问答>

stm32 has not field TIM_Channel如可解决。说有ST库更新呀?

在做TIM2方波的时候没有输出。TIM配置如下:   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;   TIM_OCInitTypeDef TIM_OCInitStructure;/**/   TIM_DeInit(TIM2);/**/   /*----配置时间基-------- ...…

查看全部问答>

一个DSP开发者的感受【转载】

我是已经从事DSP开发有几年了,看到许多朋友对DSP的开发非常感兴取,我结合这几年对DSP的开发写一写自己的感受,一家之言,欢迎指教。我上研究生的第一天起根据老板的安排就开始接触DSP,那时DSP开发在国内高校刚刚开始,一台DSP开发器接近一万还是 ...…

查看全部问答>

基于si4420无线数据收发模块的问题

求教各位大虾,对于si4420做的无线数据收发器,若希望支持PCB和外接天线(二者都要支持),电路图该如何画? 天线选择有何要求,该如何选择?求指教? 这几天网上找了很多资料,但是都没有详细讲着方面的,还请各位各位帮下忙,谢谢…

查看全部问答>

WINCE serialusbfn.dll如何加载

在测试WINCE与PC同步时发现不成功,测试发现serialusbfn.dll没有被加载。。相应的组件和注册表项都已经添加了。不知道是不是缺了什么配置或组件?底层的驱动sc2450usbfn.dll已经加载了。 [HKEY_LOCAL_MACHINE\\Drivers\\USB\\FunctionDrivers] &n ...…

查看全部问答>

RS485接收有问题,接收不到数据

我在调RS485。发送是OK的,接收却是一直接收不到数据,我已经使能接收了。 用RS232RS485转接头,一头连PC,一头连板子。 测试发送,在代码里让板子发数据,PC来接,这是OK的。 但是测试接收,让PC来发,板子来接,就接不到数据,我用示波器看了PC ...…

查看全部问答>

如何修复u盘?

我用的是xp系统,插入u盘后无法识别,u盘没有被烧过的痕迹,估计是被病毒破坏了,请问有没有办法修复?…

查看全部问答>

请问在TI图形库基础上在显示器上显示实时波形?

最近想了下,TI的图形库想要实现柱状图,用画方框的方法,做一个函数,如果有多少个量就画多少个。如果实时量的话,最好还是用波形图直接显示,但不知道用什么方法来实现,大家谁做过的,给个建议吧!…

查看全部问答>

小信号频率响应

下图为一个运放的频率响应,x轴为频率,y轴为标准增益,它的曲线图代表什么意思呢? 随着频率的增加,增益在减小,可G= 5,G= 10,又是什么意思呢!增益是常数啊? 有 的不理解,经常阅读数据手册的高手们,请给以指点,在此谢啦!…

查看全部问答>