锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

求STC89c52单片机用倒计时控制继电器开、合的C语言程序,晶振12.000

时间:2023-10-01 22:07:02 tr50继电器

匿名用户

1级

2014-05-05 回答

这是数字时钟的C程序。如果要控制继电器开关,可以在主程序中添加时间控制。换句话说,在您定义的某个时间内,继电器将打开或关闭!由于单片机对数字管的控制引脚不同,程序必须自行修改。

#include

//#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xd8,

0x80,0x90}//数字显示

sbit duan=P2^1;//段选定义

sbit wei=P2^二、/位选定义

sbit k1=P3^2;//选择 秒/分/时 调试定义

sbit k2=P3^3.//增减调试定义

/*定义初始变量*/

uchar miao=0;

uchar fen=0;

uchar shi=0;

uchar mst=0.//标准化时间

uchar key=0;

void display()

void delay(uchar z);

void time_pro();

void keyscan();

main()

{

mst=0;

miao=0;

TMOD=0x01;//time0为定时器,选择方法1

TH0=(65535-50000)/256;

TL0=(65535-50000)%6;

EA=1;

ET0=1;

TR0=1;

wei=1;

P0=0x3f;

wei=0;

duan=1;

P0=table[0];

duan=0;

P1=0x55.//点亮流水灯

while(1)

{

display();

time_pro();

if(k1==0) keyscan();

这里加入了继电器开合控制:时间可以根据自己的需要任意定义

//例如:if(shi==17&&fen==21&&miao==52)

{

jidianqi=0;//0就表示继电器关闭

}

if(shi==23&&fen==57&&miao==34)

{

jidianqi=1./1表示继电器打开

}

}

}

/*显示子程序*/

void display()

{

wei=1;

P0=0x01;

wei=0;

P0=0xff;//清屏

duan=1;

P0=table[miao];//显示秒的位置

duan=0;

delay(1);

wei=1;

P0=0x02;

wei=0;

P0=0xff;

duan=1;

P0=table[miao/10];//显示秒的十位

duan=0;

delay(1);

wei=1;

P0=0x04;

wei=0;

P0=0xff;

duan=1;

P0=table[fen];///显示分钟的位置

duan=0;

delay(1);

wei=1;

P0=0x08;

wei=0;

P0=0xff;

duan=1;

P0=table[fen/10];//显示分钟十位

duan=0;

delay(1);

wei=1;

P0=0x10;

wei=0;

P0=0xff;

duan=1;

P0=table[shi];///显示小时个位

duan=0;

delay(1);

wei=1;

P0=0x20;

wei=0;

P0=0xff;

duan=1;

P0=table[shi/10];//显示10小时

duan=0;

delay(1);

}

/*延时子程序*/

void delay(uchar z)

{

uchar x,y;

for(x=0;x<=z;x )

for(y=0;y<=107;y );

}

/*子程序的时间处理*/

void time_pro()

{

if(miao>=60)

{ miao=0;

fen ;

if(fen>=60)

{

fen=0;

shi ;

if(shi>=24)

shi=0;

}

}

}

/*子程序扫描键盘*/

void keyscan()

{

///第一次检测 k1 按键

while(!key)

{

display();P1=~P1;

while(k1==0)

{

delay(1);

if(k1==0)

key=0;

key=1;

}

}

key=0;

///第一次检测 k2 按键

while(!key)

{

display();P1=~P1;

while(k2==0)

{

delay(220);

if(k2==0)

{ key=0;

miao ;

if(miao>=60) miao=0;

display();

delay(220);

}

key=1;

}

}

key=0;

///第二次检测 k1 按键

while(!key)

{

display();P1=0x55;

while(k1==0)

{

delay(220);

if(k1==0)

{

key=0;

display();

P1=~P1;

}

key=1;

}

}

key=0;

///第二次检测 k2 按键

while(!key)

{

display();P1=~P1;

while(k2==0)

{

delay(220);

if(k2==0)

{ key=0;

fen ;

if(fen>=60) fen=0;

display();

delay(220);

}

key=1;

}

}

key=0;

///第三次检测 k1 按键

while(!key)

{

display();P1=~0x55;

while(k1==0)

{

delay(220);

if(k1==0)

{

key=0;

P1=~P1;

display();

}

key=1;

}

}

key=0;

//第三次检测 k2 按键

while(!key)

{

display();P1=~P1;

while(k2==0)

{

delay(220);

if(k2==0)

{ key=0;

shi++;

if(shi>=24) shi=0;

display();

delay(220);

}

key=1;

}

}

}

/*中断延时子程序*/

void time() interrupt 1 //定时器0方式1,50ms中断一次

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

mst++;

if(mst==20)

{

mst=0;//记数机器清零

P1=~P1;

miao++;

time_pro();

}

}

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章