📄 chengxu.c
字号:
/********************************************************************
汇诚科技
实现功能:此版配套测试程序
使用芯片:STC12C2052AD
晶振:11.0592MHZ
波特率:9600
编译环境:Keil
作者:yang
QQ:790244909
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
/********************************************************************
********************************************************************/
#include<STC12C5A60S2.H> //库文件
#include <intrins.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
#define DUAN P2 //P0口控制段
#define WEI P1 //P2口控制位
/********************************************************************
初始定义
*********************************************************************/
//数码管显示段码
code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
//数码管显示位码
sbit wei1=P1^0; //位的控制端
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;
uchar numb[4]; //定义字符串用于数值转换
sbit jdq=P3^7; //继电器控制端口
//按键
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
//输入控制端
sbit IN1=P1^7;
//全局变量和标着位变量
uchar timesnum;
uchar setnum=30,countnum=0;
bit flag=0;
bit startflag=1;
/********************************************************************
延时函数
*********************************************************************/
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--);
}
/********************************************************************
求值函数 1
*********************************************************************/
void t_to_dis1()
{
numb[0]=0; //显示千位
numb[1]=countnum/100; //显示百位
numb[2]=countnum%100/10; //显示十位
numb[3]=countnum%10; //显示个位
}
/********************************************************************
求值函数 2
*********************************************************************/
void t_to_dis2()
{
numb[0]=0; //显示千位
numb[1]=setnum/100; //显示百位
numb[2]=setnum%100/10; //显示十位
numb[3]=setnum%10; //显示个位
}
/********************************************************************
显示函数
*********************************************************************/
void display() //显示函数
{
WEI&=0XF0;
DUAN=seg7code[numb[0]];
wei1=1;
delay(2);
WEI&=0XF0;
DUAN=seg7code[numb[1]];
wei2=1;
delay(2);
WEI&=0XF0;
DUAN=seg7code[numb[2]];
wei3=1;
delay(2);
WEI&=0XF0;
DUAN=seg7code[numb[3]];
wei4=1;
delay(2);
WEI&=0XF0;
}
/********************************************************************
IO口初始化函数
*********************************************************************/
void init_all(void)
{
P2M1=0;
P2M0=0xff;
P1M1=0;
P1M0=0x0f;
P3M1&=0x7f;
P3M0|=0x80;
} /********************************************************************
按键扫描函数
*********************************************************************/
void key_scan(void)
{
if(key1==0) //增加次数
{
delay(5);
if(key1==0)
{
while(!key1);
setnum++; //keynum=0为模式0,继电器吸合300ms ,keynum=1继电器吸合12s
if(setnum>=45)
setnum=0;
}
}
}
/********************************************************************
定时器T0初始化*********************************************************************/
void timer0init(void)
{
TMOD=0X01;//定义定时器工作方式
TH0=(65536-30000)/256;
TL0=(65536-30000)%256;
ET0=1;
TR0=1;
EA=1;
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
init_all(); //初始化IO
timer0init(); //d定时器T0初始化
IN1=1;
jdq=1;
while(1)
{
if(IN1==1&&startflag) //红外计数器
{
delay(5);
if(IN1==1)
{
while(IN1);
countnum++;
}
}
if(key2==0) //脚踏开关
{
delay(5);
if(key2==0)
{
while(!key2);
startflag=1;
jdq=0;
}
}
if(key3==0) //功能按键
{
delay(5);
if(key3==0)
{
while(!key3);
flag=!flag;
}
}
if(flag==1) //显示设定值还是计数值
{
t_to_dis2();
}
else
t_to_dis1();
if(countnum>=setnum) //计数值大于设定值时继电器断开
{
jdq=1;
countnum=0;
startflag=0;
}
}
}
/********************************************************************
定时器T1中断函数
*********************************************************************/
void timer0(void)interrupt 1 using 1
{
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
display(); //显示函数
if(flag==1)
{
key_scan();
}
}
/********************************************************************
结束
*********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -