📄 main.c
字号:
/********************************************************************
汇诚科技
实现功能:继电器循环通断控制程序(eeprom)
使用芯片:STC12C5204AD
晶振:11.0592MHZ
编译环境:Keil
硬件环境:四位数显两路输入三按键
作者:yang
QQ:790244909
网站:www.ourhc.cn
物联网测试网站:http://hualongelectron.eicp.net/
日期:2013-04-02
淘宝店:
华龙电子直销:http://hlelectrony.taobao.com
电子开发直销:http://shop63233873.taobao.com
汇诚科技网路购物:http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
/********************************************************************
/********************************************************************
功能说明:继电器循环通断控制程序
继电器通、断时间可调,
key1功能键:调节模式与实时显示模式转换
key2、key3调节按键用于调节通断时间(通、断时间相等,即一个参数),掉电记忆设定值
上电时,继电器吸合,数显开始计时,到达设定闭合时间后断开;
数显清零,数显开始计时,到设定时间,继电器闭合,数显清零。。。循环下去。。
设定最大时间是99分60秒
********************************************************************/
#include<STC12C5A60S2.H> //库文件
#include <intrins.h>
#include"eprom.h"
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
#define DUAN P2 //P0口控制段
#define WEI P1 //P2口控制位
sbit jdq= P3^7;
sbit key1=P3^2; //功能按键
sbit key2=P3^3; //增加
sbit key3=P3^4; //减小
/********************************************************************
初始定义
*********************************************************************/
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
uchar wei[4]={0X01,0X02,0X04,0X08}; //位的控制端
uchar numb[4]; //定义字符串
uchar cnt,keynum;
uchar setfen,setmiao;
uchar miao,fen;
void IapEraseSector(uint addr);
void IapProgramByte(uint addr,uchar dat);
uchar IapReadByte(uint addr);
/********************************************************************
延时函数
*********************************************************************/
void delay(uchar x) //延时程序 0.1秒
{
uchar m,n,s;
for(m=x;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
显示函数
*********************************************************************/
void display(uchar a ,uchar b) //显示函数
{
WEI&=0XF0;
DUAN=seg7code[a/10];
WEI=wei[0];
delay(2);
WEI&=0XF0;
DUAN=seg7code[a%10]&0x7f;
WEI=wei[1];
delay(2);
WEI&=0XF0;
DUAN=seg7code[b/10];
WEI=wei[2];
delay(2);
WEI&=0XF0;
DUAN=seg7code[b%10];
WEI=wei[3];
delay(2);
WEI&=0XF0;
}
void keyscan(void)
{
if(key1==0)
{ delay(1);
if(key1==0)
{
while(!key1);
keynum++;
if(keynum>=3)
{
keynum=0;
miao=fen=0;
//jdq=0;
}
}
}
switch(keynum)
{
case 1: if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
setmiao++;
if(setmiao>59)
setmiao=59;
IapEraseSector(0);
IapProgramByte(0,setmiao); //写入函数
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
setmiao--;
if(setmiao==0||setmiao>=250)
setmiao=0;
IapEraseSector(0);
IapProgramByte(0,setmiao); //写入函数
}
}
display(setfen,setmiao);
break;
case 2: if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
setfen++;
if(setfen>99)
setfen=99;
IapEraseSector(512);
IapProgramByte(512,setfen); //写入函数
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
setfen--;
if(setfen==0||setfen>=250)
setfen=0;
IapEraseSector(512);
IapProgramByte(512,setfen); //写入函数
}
}
display(setfen,setmiao);
break;
default : break;
}
}
/********************************************************************
定时器T0初始化*********************************************************************/
void cshh()
{
TMOD|=0X01; //定义定时器工作方式
TH0=0Xa6;
TL0=0X01;
ET0=1;
TR0=1; //开定时器
EA=1; //开中断
}
/********************************************************************
初始化函数
*********************************************************************/
void init_all(void)
{
P2M1=0;
P2M0=0xff;
P1M1=0;
P1M0=0x0f;
P3M1&=0x7f;
P3M0|=0x80;
P3=0xff;
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
init_all();
setfen=IapReadByte(512); //读取函数
setmiao=IapReadByte(0);
cshh(); //定时器初始化
while(1)
{
if(keynum==0)
{
display(fen,miao);
}
keyscan();
}
}
/********************************************************************
定时器中断函数
*********************************************************************/
void timer1(void)interrupt 1
{
TH0=0Xa6; //定时初值
TL0=0X01; //定时初值
cnt++;
if(cnt>=40)
{
cnt=0;
miao++;
if(miao>=60)
{
miao=0;
fen++;
}
}
if((fen>=setfen)&&(miao>=setmiao))
{
jdq=!jdq;
miao=0;
fen=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -