投币充电器维修中投币式多功能充电器控制电
2024年07月31日 热点资讯
投币式多功能充电器控制电路的设计来来来(本文需要3分钟时间阅读)
1.采用一元硬币专用投币器或自制投币器;
2、头一枚硬币数码管计数一次;
3、一枚硬币计时充电20分钟,采用倒计时显示
4、用两位数码管显示(投币数和倒计时均用这两位数码管);
5、当按下确认健时,硬币不能投入,数码管不计数;
6、充电电压为5v,采用多种接口。
以下是我的程序
#include <STC12C5A60S2.h>
#define coin_maxnum 20 //设置投币数最多为20
#define time_1 5 //设置一枚硬币可充电时间为5分钟
void delay_ms(unsigned char x) //时延函数
{
inti,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
void Time_Init(void); //定时器初始化函数
{
TMOD = 0x01; //选择工作方式1
TH0 = 0x3C; //设置初始值,定时50MS
TL0 = 0xB0;
EA = 1; //打开总中断
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
}
void display(int date); //数码管显示函数
char time_second_test_1; //第一路计时
char time_second_1;
char time_minute_1;
char coin_num_1;
char flagyes_1;
char flagcoin_1;
sbit CE_1=P3^6; //控制CN3052使能端
sbit key1=P2^0; //按键1投币
sbit key2=P2^1; //按键2确认
unsigned charreg[]={0xFA,0x82,0xB9,0xAB,0xC3,0x6B,0x7B,0xA2,0xFB,0xEB}; //0-9
void main(void)
{
char i,j,flagcoin_1, flagyes_1, coin_num_1;
intshow, display_1; //显示
i=0;j=0;
flagcoin_1=0; //投币标记
flagyes_1 =0; //确认标记
Time_Init(); //定时器初始化函数
CE_1=0;
P2=0xff; //数码管全部关断
P0=0x00;
key1=1;
while(1)
{
if((key1==0)&&(flagyes_1==0)) //key1被按下且未确认开始充电
{delay_ms(100); //延时去抖
if(key1==0)
{ coin_num_1++; //投币数增加
if(coin_num_1==coin_maxnum+1) //限制投币数
{coin_num_1 =1;}
while(key1==0); //等待按键松开
}
flagcoin_1=1; //投币标记
display_1=coin_num_1;//显示投币数
P0=0x00;
}
if((key2==0)&&(flagcoin_1==1)) //已投币且key2确认键被按下
{ flagyes_1=1;}
if(flagyes_1==1)
{ TR1 = 1; //启动T1定时器
CE_1 =1; //开始充电
if(time_second_test_1==20) //定时1s
{ P0 =0x00; //消隐
time_second_1++;
time_second_test_1=0;
if(time_second_1==60)
{ time_second_1=0;
time_minute_1++;
if(time_minute_1==time_1*coin_num_1) //充电时间结束
{time_minute_1=0;
CE_1=0; //使CN3052充电使能端置低
TR1=0; //关闭定时器
flagyes_1=0; //确认标记取消
coin_num_1=0; //投币标记取消
display_1=0; //显示清空
}
}
}
if((time_1*coin_num_1-time_minute_1)==1)
{display_1=60-time_second_1;} //时间剩最后一分钟时显示秒
else
{display_1=time_1*coin_num_1-time_minute_1;//显示分钟
}
}
show=display_1;
display(show); //数码管显示
}
}