历史上的今天
今天是: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; //窗帘停止
下一篇:51单片机一个nop代表意思
史海拾趣
|
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开发器接近一万还是 ...… 查看全部问答> |
|
求教各位大虾,对于si4420做的无线数据收发器,若希望支持PCB和外接天线(二者都要支持),电路图该如何画? 天线选择有何要求,该如何选择?求指教? 这几天网上找了很多资料,但是都没有详细讲着方面的,还请各位各位帮下忙,谢谢… 查看全部问答> |
|
在测试WINCE与PC同步时发现不成功,测试发现serialusbfn.dll没有被加载。。相应的组件和注册表项都已经添加了。不知道是不是缺了什么配置或组件?底层的驱动sc2450usbfn.dll已经加载了。 [HKEY_LOCAL_MACHINE\\Drivers\\USB\\FunctionDrivers] &n ...… 查看全部问答> |
|
我在调RS485。发送是OK的,接收却是一直接收不到数据,我已经使能接收了。 用RS232RS485转接头,一头连PC,一头连板子。 测试发送,在代码里让板子发数据,PC来接,这是OK的。 但是测试接收,让PC来发,板子来接,就接不到数据,我用示波器看了PC ...… 查看全部问答> |
|
最近想了下,TI的图形库想要实现柱状图,用画方框的方法,做一个函数,如果有多少个量就画多少个。如果实时量的话,最好还是用波形图直接显示,但不知道用什么方法来实现,大家谁做过的,给个建议吧!… 查看全部问答> |




