77范文网 - 专业文章范例文档资料分享平台

基于51单片机的低成本多路程控定时插座设计与制作 - 图文(3)

来源:网络收集 时间:2019-04-13 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

*/

}

} { }

} { }

P0=num[i]; /*将要显示的数字i作为七段码表

的序号(段码数组下标),取出显示码送显示*/

if(k==1) /*如果送显示的LED为分的个位*/ P0=num[i] | 0x80; /*则将分的个显示码附加小数

delay(100);

点*/

/*显示延时,让LED充分点亮*/

else /*后90次消隐*/

P0=num[10];/*送LED消隐段码*/

if(k==1) /*如果要消隐的是分的个位*/ P0=num[10] | 0x80;

/*则将分的个位后的小数

点点亮(小数点不闪烁)*/

P2=tv[k]; /*送消隐的位码(即哪个LED需要闪delay(100);

/*消隐延时,让其充分消隐*/

烁)*/

else /*如果送显示的位不调整的位,则不需要闪烁显示*/

i=led[k]; /*将该LED位需要显示的数存于i中*/ P0=num[10]; /*该LED位不显示(短时消隐),送消隐P2=tv[k]; /*送需要显示的LED位码*/ delay(10); P0=num[i];

/*短时消隐延时,有利于显示位的切换/*将要显示的数字i作为七段码表的序

段码*/

号(段码数组下标),取出显示码送显示*/

if(k==1) /*如果送显示的LED为分的个位*/ { P0=num[i] | 0x80;}/*则将分的个显示码附加小数点*/

delay(100);

/*显示延时,让LED充分点

亮*/

else /*如果不是处在设置模式,则正常显示*/

{ load_LED(h_data, m_data); /*调用将实际时间代码装LED显示区的子程

i=led[k];

/*将该LED位需要显示的数存于i中*/

/*该LED位不显示(短时消隐),送消隐段

11

序,分离个位和十位*/

P0=num[10];

码*/

/********************************************************************************************************/

void adjust(void)

{

if(P3_0==0)

{

delay(100);

while(P3_0==0) {flag1++; display();} /*当调整键按下时,延时消抖,flag1控制

/*调整函数定义*/

}

delay(100);

/*显示延时,让LED充分点亮*/

}

P2=tv[k]; delay(10); P0=num[i]; if(k==1)

/*送需要显示的LED位码*/

/*短时消隐延时,有利于显示位的切换*/ /*将要显示的数字i作为七段码表的序号(段

}

码数组下标),取出显示码送显示*/

/*如果送显示的LED为分的个位*/ /*则将分的个显示码附加小数点*/

{ P0=num[i] | 0x80;}

延迟时间*/

if(flag1>50)

{

flag1=0;

flag++; /*用flag对调整键按下次数计数,目的是通过一个按键实现

多种功能 */

if(flag>=10) {flag=0;} }

}

/*************************************************************************************/

if(P3_1==0) /*移位控制键,在4个LED上来回移动,选择需要设置的LED

{

delay(100); display();

/*当flag不等于0时,说明处于调整状态,此时通过移位键 /*消抖*/

位*/

while(P3_1==0)

if(flag)

{

选择调整哪一个LED*/

12

**/

}

w=w+1; /*移位键控制w加1,用于修改位码,w代表4个LED

数码管的某一位*/

if(w>=4) w=0; }

/*****************************************************************************

if(P3_2==0) /*加1操作*/

if(flag) /*当处于调整模式时,对所选择的LED进行加1*/

{

switch(flag)

{

case 1:{ if(w==0) {h_data=H1_set(h_data);display();} /*校准时间的

}

if(w==0) {hdata1_on=H1_set(hdata1_on);display();} /*if(w==1) {hdata1_on=H0_set(hdata1_on);display();} if(w==2) {mdata1_on=M1_set(mdata1_on);display();} if(w==3) {mdata1_on=M0_set(mdata1_on);display();} break;

if(w==0) {hdata1_off=H1_set(hdata1_off);display();} /*if(w==1) {hdata1_off=H0_set(hdata1_off);display();} if(w==2) {mdata1_off=M1_set(mdata1_off);display();} if(w==3) {mdata1_off=M0_set(mdata1_off);display();} break;

13

{

/*消抖*/

delay(100); display();

while(P3_2==0)

时、分*/

if(w==1) {h_data=H0_set(h_data);display();} if(w==2) {m_data=M1_set(m_data);display();} if(w==3) {m_data=M0_set(m_data);display();} break;

case 2: {

}

设置开关1开启时间的时、分*/

case 3: {

设置开关1关断时间的时、分*/

}

}

if(w==0) {hdata2_on=H1_set(hdata2_on);display();} if(w==1) {hdata2_on=H0_set(hdata2_on);display();} if(w==2) {mdata2_on=M1_set(mdata2_on);display();} if(w==3) {mdata2_on=M0_set(mdata2_on);display();} break;

case 4: {

}

/*设置开关2开启时间的时、分*/

case 5: {

}

if(w==0) {hdata2_off=H1_set(hdata2_off);display();} /*if(w==1) {hdata2_off=H0_set(hdata2_off);display();} if(w==2) {mdata2_off=M1_set(mdata2_off);display();} if(w==3) {mdata2_off=M0_set(mdata2_off);display();} break;

设置开关2关断时间的时、分*/

default:{TR0=1;break;} }

}

}

void timer0() interrupt 1 /*定时器中断1服务子程序*/

{

counter++; {

s_data++; /*个位秒向十位秒进位*/ counter=0; }

/*如果秒计满60则向分进位,并将秒清0*/

s_data=0; /*秒清0*/ m_data++;

/*分进位 */

{ }

/*如果分计满60则向时进位,并将分清0*/

14

/*counter对定时中断进行计数,10000次中断为1秒*/

if(counter==10000

if(s_data==60)

if(m_data==60)

{

} {

}

m_data=0; h_data++;

/*分清0*/ /*时进位 */

if(h_data==24)

{ }

/*如果时计满24则将时清0*/

/*时清0*/

h_data=0;

main(void)

IE=0x8a; /*EA|-|-|ES|ET1|EX1|ET0|EX0=10001010中断允许控制*/

TMOD=0x02; /*GATE1|C/T|M1|M0|GATE0|C/T|M1|M0=00000010只由TR0来启动T0,TH0=176/*计数常数寄存器设置,中断定时时间为(256+200)x12/f0 */ TL0=-176/*定时计数器装初值*/

TR0=1; /*启动定时器T0,TCON为TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0*/ P3_6=1; /*关断定时开关1*/ P3_7=1; /*关断定时开关2*/ {

adjust(); /*调用调整函数*/

/*以下程序语句作用是:将设定的开启时间和关断时间分别跟当前时间进行比较, 当大于开启时间小于关断时间则在P3.6或P3.7输出低电平使开关接通,否则输出

K1_on=h_data>hdata1_on&&h_data

T0工作于方式2,(自动再装入的8位计数器)*/

while(1) /*以下为死循环*/

高电平使开关断开*/

m_data>=mdata1_on&&m_data=mdata1_on&&m_data

K2_on=h_data>hdata2_on&&h_data

m_data>=mdata2_on&&m_data=mdata2_on&&m_data

}

}

if(K1_on) P3_6=0; else P3_6=1; if(K2_on) P3_7=0; else P3_7=1;

15

display();

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于51单片机的低成本多路程控定时插座设计与制作 - 图文(3)在线全文阅读。

基于51单片机的低成本多路程控定时插座设计与制作 - 图文(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/586304.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: