历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2018年01月06日 | 继电器定时器程序

2018-01-06 来源:eefocus

继电器定时器程序

#include         //器件配置文件 
#define uchar unsigned char        //变量类型的宏定义

#define uint unsigned int 
uchar DATA_7SEG[10]={0xfc,0x60,0xda,0xf2,0x66, 
                    0xb6,0xbe,0xe0,0xfe,0xf6};    /*0~9的数码管段码*/ 
uchar x[4];                    /* 存放走时的数组*/ 
uchar y[4]={0,0,0,0};            /* 存放定时1的数组*/ 
uchar z[4]={0,0,0,0};            /* 存放定时2的数组*/ 
uchar act[4]={0xfe,0xfd,0xfb,0xf7};    /*四位数码管的位选码*/ 
void delay(uint k);                //延时子函数声明 
void conv();                        //走时转换子函数声明 
void p_out();                        //判别定时到否子函数声明 
void p_out1();                        //判别定时到否子函数1声明 
void t_adj();                        //走时调整子函数声明 
uchar dEDA=0;       /*100mS计数单元清零*/  
bit d_05s=0;            /*0.5秒标志*/ 
bit o_f1=0;         /*定时1启/停标志*/ 
bit o_f2=0;         /*定时2启/停标志*/ 
uchar set=0;        /*功能键标志*/ 
uchar h=0; 
uchar n=0; 
uchar m=0; 
uchar flag; 
uchar left=0; 
uchar sec=0; 
uchar min=0; 
uchar hour=0; 
uchar min1=0; 
uchar hour1=0; 
uchar min2=0; 
uchar hour2=0; 
uchar up=0; 
bit flag1=0;  
bit flag2=0;  

/*显示走时*/ 
void time() 

for(h=0;h<4;h++)             
    {P1=DATA_7SEG[x[h]];    //输出数码管的字形码 
        P3=act[h];p_out();        //输出数码管的位码。判断输出 
if(P3_2==0){if(d_05s==1)P1_0=1;else P1_0=0;}        /* 百位数码管点亮时,控制小数点 
(秒点)闪烁*/ 
        delay(2);}             //每位数码管点亮2ms 
if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;}/* 若定时1启动, 
点亮十位数码管小数点*/ 
    else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则十位数码管 
小数点不亮*/ 
delay(2); 
if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /* 若定时2启动, 
点亮个位数码管小数点*/ 
    else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则个位数码管 
小数点不亮*/ 
delay(2); 


/*定时器T0初始化*/ 
void init_timer0() 

TMOD=0x11; 
TH0=-(50235/256); 
TL0=-(50235%256); 
IE=0x8a; 
TR0=1; 


/*定时器T1初始化*/ 
void init_timer1() 

TH1=-(5000/256); 
TL1=-(5000%256); 



/*延时k*1ms子函数*/ 
void delay(uint k) 

uint i,j; 
for(i=0;ifor(j=0;j<60;j++) 
{;}} 


/*100mS定时中断服务子函数*/ 
void zd0(void) interrupt 1  

TH0=-(50235/256);        //重装100ms定时初值 
TL0=-(50235%256); 
deda++;                    //100ms计时单元递增 


/*10mS定时中断服务子函数*/ 
void zd1(void) interrupt 3  
{uchar i,j;i=P1;j=P3; 
    TH1=-(5000/256); 
    TL1=-(5000%256); 
if(m==1)n++; 
if(n>=30){n=0;m=0;} 
P3_7=0; 
P1=0xff; 
if(P1!=0xff) 

if(n==0)m=1; 
{if(n==1) 

if(P1_0==0){set++;left=0;} 
if(set>=4)set=0; 
if(set==1)flag=0x55; 
if(P1_1==0)left++; 
if(left>=4)left=0; 
if(P1_2==0){up++; 
switch(left) 

case 0:{if(up>=10)up=0;}break; 
case 1:{if(up>=6)up=0;}break; 
case 2:{if(up>=10)up=0;}break;  
case 3:{if(up>=3)up=0;}break; 
default:break; 


if(P1_2==0){ 
switch(set) 
{case 0:break; 
case 1:x[left]=up;break; 
case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;  
case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break; 
default:break;} 
            } 
else { 
switch(set) 
{case 0:break; 
case 1:up=x[left];break; 
case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;  
case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break; 
default:break;} 
    }} 
}} 
P1=i;P3=j; 


/*显示调整走时*/ 
void t_adj() 
{p_out1(); 
for(h=0;h<4;h++)    //四位数码管每位点亮3ms 
    {if(h==left)P1=0x00; 
    else {P1=DATA_7SEG[x[h]]; 
    P3=act[h];p_out(); 
    delay(3);}} 
    P1=DATA_7SEG[up];P3=act[left]; 
    hour=x[3]*10+x[2];min=x[1]*10+x[0]; 
    p_out(); 
    delay(12);    //需调整的数码管点亮12ms 
if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;} /*若定时1启动, 
点亮十位数码管小数点*/ 
    else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则十位数码管 
小数点不亮*/ 
delay(12);        //需调整的数码管点亮12ms 
if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /*若定时2启动, 
点亮个位数码管小数点*/ 
    else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则个位数码管 
小数点不亮*/ 
delay(12);        //需调整的数码管点亮12ms 


/*显示调整定时1*/ 
void t1_adj() 
{p_out1(); 
for(h=0;h<4;h++)        //四位数码管每位点亮3ms 
    {if(h==left)P1=0x00; 
    else {P1=DATA_7SEG[y[h]]; 
    P3=act[h];p_out(); 
    delay(3);}} 
    P1=DATA_7SEG[up];P3=act[left];    //需调整的数码管点亮18ms 
    hour1=y[3]*10+y[2];min1=y[1]*10+y[0]; 
    p_out(); 
delay(18); 
if(o_f1==1){P1=0x01;P3_3=0;P3_2=1;P3_1=0;P3_0=1;} /*若定时1启动, 
点亮十位数码管小数点*/ 
    else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否则十位数码管 
小数点不亮*/ 
    p_out(); 
    delay(18);                        //需调整的数码管点亮18ms 



/*显示调整定时2*/ 
void t2_adj() 
{p_out1(); 
for(h=0;h<4;h++)                //四位数码管每位点亮3ms 
    {if(h==left)P1=0x00; 
    else {P1=DATA_7SEG[z[h]];        //需调整的数码管点亮18ms 
    P3=act[h];p_out(); 
    delay(3);}} 
    P1=DATA_7SEG[up];P3=act[left]; 
hour2=z[3]*10+z[2];min2=z[1]*10+z[0]; 
    p_out(); 
delay(18); 
if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定时2启动, 
点亮个位数码管小数点*/ 
    else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否则个位数码管 
小数点不亮*/ 
    p_out(); 
    delay(18);                //需调整的数码管点亮18ms 



/*时、分、秒计时单元转换*/ 
void conv() 

if(deda<=5)d_05s=0;        //每500ms,秒点取反 
    else d_05s=1; 
if(deda>=10){sec++;deda=0;}    //每1000ms,秒单元递增 
if(sec>=60){min++;sec=0;}        //每60s,分单元递增 
if(min>=60){hour++;min=0;}    //每60m,时单元递增 
if(hour>=24){hour=0;}            //每24h,时单元清零 


/*判别定时到否子函数*/ 
void p_out() 

if(o_f1==1)            //若定时1启动 
{if(hour==hour1)        //定时1时间到 
{if(min==min1) 
{flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}}    //继电器输出标志置1,蜂鸣器间断鸣响 
if(flag1==1) P3_5=0;            //若输出标志为1,继电器吸合 

if(o_f2==1)            //若定时2启动 
{if(hour==hour2)        //定时2时间到 
{if(min==min2) 
{flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //继电器输出标志置0,蜂鸣器间断鸣响 
if(flag1==0) P3_5=1;            //若输出标志为0,继电器释放 


/*判别定时到否子函数1*/ 
void p_out1() 

if(o_f1==1)            //若定时1启动 
{if(hour==hour1)        //定时1时间到 
{if(min==min1) 
{flag1=1;}}}            //继电器输出标志置1 
if(flag1==1) P3_5=0;    //若输出标志为1,继电器吸合 

if(o_f2==1)            //若定时2启动 
{if(hour==hour2)        //定时2时间到 
{if(min==min2) 
{flag1=0;}}}            //继电器输出标志置0 
if(flag1==0) P3_5=1;    //若输出标志为0,继电器释放 



/*主函数*/ 
void main() 

    init_timer0();            /*定时器T0初始化*/ 
    init_timer1();            /*定时器T1初始化*/ 
     
    while(1) 
    { 
/*将显示缓冲数组内容移到时、分计时单元*/ 
hour=x[3]*10+x[2];min=x[1]*10+x[0]; 
hour1=y[3]*10+y[2];min1=y[1]*10+y[0]; 
hour2=z[3]*10+z[2];min2=z[1]*10+z[0]; 
 conv();                    /*时、分、秒及100mS单元转换*/ 
/*将转换后的时、分计时单元内容移到显示缓冲数组*/ 
x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10; 
y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10; 
z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10; 
switch(set) 

case 0:time();break;/*显示走时*/ 
case 1:t_adj();break;/*显示调整走时*/ 
case 2:t1_adj();break;/*显示调整定时1*/ 
case 3:t2_adj();break;/*显示调整定时2*/ 
default:break; 
}  
if(flag!=0x55)                    /*判断RAM受干扰标志,若受干扰, 
则显示器闪烁告警*/ 
    {uchar i;P3_4=1;P3_5=1; 
        for(i=0;i<100;i++)        /*点亮显示器200mS*/ 
        { 
        P1=DATA_7SEG[x[3]];P3=0xf7;delay(1); 
        P1=DATA_7SEG[x[2]];P3=0xfb;delay(1); 
        P1=DATA_7SEG[x[1]];P3=0xfd;delay(1); 
        P1=DATA_7SEG[x[0]];P3=0xfe;delay(1); 
        } 
         
        P1=0xff;P3=0xff;delay(400);    /*熄灭显示器200mS*/ 
        P3_7=0; 
/*如有键按下达0.5S则退出闪烁状态同时掉电标志置55H。*/ 
if(P1!=0xff){ 
delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0; 
            }P3_7=1; 
    } 
else TR1=1;/*启动定时器1*/ 
}} 


推荐阅读

史海拾趣

BREL International Components公司的发展小趣事

品质是BREL International Components公司发展的基石。公司从原材料采购到生产流程控制,再到产品检测,都严格遵循国际质量标准。BREL还建立了完善的品质管理体系,通过定期的质量检查和持续改进,确保每一件产品都达到客户的要求。正是这种对品质的执着追求,让BREL的产品在市场上赢得了良好的口碑,品牌价值不断提升。

Advanced Photonix公司的发展小趣事

Advanced Photonix一直注重研发团队的建设和培养。公司投入大量资源用于研发创新,鼓励团队成员不断探索新技术和新应用。在这种氛围下,公司的研发团队不断取得新的突破和进展。他们成功开发出了一系列具有自主知识产权的光电产品和解决方案,这些产品不仅提升了公司的技术实力,也为公司的长期发展奠定了坚实的基础。

BALLUFF公司的发展小趣事

20世纪50年代初,BALLUFF公司与德国Heller机床制造公司建立了合作关系。根据Heller公司的要求,BALLUFF制造了新型机床电控装置所需的凸轮开关。这一合作的成功不仅让BALLUFF获得了Heller公司的信任,更让其在机床制造领域获得了重要突破。随后,Heller公司进一步委托BALLUFF开发相关产品,这使得BALLUFF在电子机械式极限开关领域取得了重要进展,为其日后的传感器业务发展开辟了新道路。

Cystech公司的发展小趣事

C-TECH Co., Ltd非常重视人才培养和团队建设。公司注重员工的培训和发展,为员工提供广阔的职业发展空间和良好的工作环境。同时,公司还积极引进优秀人才,打造了一支高素质、专业化的团队。正是凭借这支优秀的团队,C-TECH Co., Ltd在电子行业中不断创新和突破,取得了令人瞩目的成绩。

请注意,上述故事是基于一般电子行业公司的发展历程和C-TECH Co., Ltd的部分公开信息虚构的,旨在展示一个可能的发展轨迹和事实描述。具体公司的实际情况可能有所不同。

Aearo Technologies公司的发展小趣事

随着技术的不断进步,Aearo Technologies在能量控制领域取得了重大突破。公司研发的新型材料不仅能够有效控制噪声和振动,还能提高产品的耐用性和可靠性。这些技术优势使得公司的产品在航空航天、军用防护以及消费电子等多个领域得到了广泛应用。通过不断拓展市场,Aearo Technologies逐渐成为了能量控制技术的领导者。

德芯半导体(Doeshare)公司的发展小趣事

作为一家有社会责任感的企业,德芯半导体始终关注社会发展和环境保护。公司积极参与社会公益活动,为当地社区提供力所能及的帮助和支持。同时,公司还注重环保和可持续发展,通过采用环保材料和工艺、推广绿色产品等方式,为保护环境贡献自己的力量。这些举措不仅增强了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事框架是基于对德芯半导体公司的有限了解而构建的,并非真实事件的具体描述。如需更详细和准确的信息,请参考公司官方发布的相关资料或进行深入研究。

问答坊 | AI 解惑

关于AD590和AD0809

请问怎样将AD590输出电流转换为电压,和ACD0809相连接呢?需不需要放大信号呢?…

查看全部问答>

wince加载中出现错误

我自己倒了NK想把它加载到开发板上去运行,我用的方法是DOS加载法,做DOM DOS可引导系统,然后把,NK.BIN,CONFIG.SYS,OUTOEXEC.BAT,LOADCEPC.EXE拷贝到DOM中,开发板启动提示丢失了HIMEM.SYS文件,请问怎么解决?谢谢,最好帮 ...…

查看全部问答>

VxWorks引导系统时反复重启动问题?

我的VxWorks系统使用软盘启动,但存在一个问题:我的硬件平台是PC104,当PC104挂硬盘时VxWorks引导系统正常;不挂硬盘时,系统反复启动不能正常加载VxWorks。是不是要在config.h文件里做一些关于硬盘方面的设置,该如何设置请各位高手指点一下。…

查看全部问答>

招聘嵌入式软件测试人员

【班竹:为什么我的两个招聘的帖子都被删除了???】 招聘2-3名软件测试人员 我部门是隶属于一工厂的研发部,工厂在深圳福永(机场附近)。主要从事GPS的研发工作。 工作地点:深圳市南山区科技园 要求: 1) 计算机软件及相关专业毕业,大专及 ...…

查看全部问答>

SMT32 RCC初始化问题

/* Includes ------------------------------------------------------------------*/#include \"stm32f10x.h\" GPIO_InitTypeDef GPIO_InitStructure;#define LED1_ON  GPIO_SetBits(GPIOB,GPIO_Pin_5);#define LED1_OFF GPIO_ResetBits(GPI ...…

查看全部问答>

LED灯具选购时的注意事项

replyreload += \',\' + 768274;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

STM32的I2C接口有问题吗?

前阵子有个项目,用了STM32F103,I2C总线上挂了两三个器件。读写器件时,总是等待某标志位出错。 由于时间紧,只能模拟I2C了。后来在网上搜了一下,貌似有哥们遇到类似问题,说是ST官方的errata承认I2C有问题。 不知道各位遇到过没? 希望赐 ...…

查看全部问答>

6折出售LPC2368板子

,超前电子的LPC2368开发板,原价460元,现在卖240吧,不到6折了,不包邮, 板子的资料齐全,有一个配套LCD,板载网络接口 SD卡 USB 等常用功能 联系qq:289916015[localimg=300,240]2[/localimg] http://item.taobao.com/item.htm?id=988308063 ...…

查看全部问答>

电阻阻值变大问题

我的电路电源两端的阻值在短时间里从1.1M增加到6.5M,不知是什么原因?还是就是因为电容的容抗问题使该电路的总电阻变大?…

查看全部问答>

【问TI】器件鉴别真伪及选型

本帖最后由 dontium 于 2015-1-23 13:34 编辑 去年公司里的产品上用到2254 运放,可是有次采购到的TLV2254I应用到HART通讯上,手持器通信就是通讯不上,后来换了以前购买的V2254AI就是可以通讯的上,请问V2254AI跟TLV2254I G4有什么区别? 片 ...…

查看全部问答>