这个是未测试的程序.我在上课时偷偷写的.难免有错误..
路过的人可以指出错误...
三级电磁
/*有AD转化函数-检测电容的电压- 电炮触发中断 con为zvs+ne555的控制端,高电平停止充电
g1 g2 g3 为3级电炮的控制口 和con都是强挽腿i/o 加上我是用stc12c2052a ,所以顺便测试串口通信
并且用315M发送到89c52上去..在通过1602显示出来真实电压值
未测试!!!!!
求人观摩!
*/
#include<stc12c2052ad.h>
#define uchar unsigned char
#define uint unsigned int
float AD1,tempdat;
sbit G1=P1^0;
sbit G2=P1^1;
sbit G3=P1^2;
sbit CON=P1^3;
void delayms (unit x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;i>0;i--);
}
void AD_init()
{
P1M0=0x10;
P1M1=0x10;
ADC_CONTR=0xe0;
delayms(100);
}
void GET_AD (uchar channel)
{
uchar AD_finished=0;
int result;
ADC_CONTR|=channel;
ADC_CONTR|=0x08;
while(AD_finished==0)
{
AD_finished=(ADC_CONTR&0x10);
}
result=AD_DATA;
ADC_CONTR&=0xf7;
return(result);
}
float AD_AV (uchar channel)
{
float Val_AV=0;
uchar num;
for(num=100;num>0;num--)
{
Val_AV+=GET_AD(channel);
}
Val_AV/=100.0;
Val_AV=VAl_AV*5.0/256;
return (Val_AV);
}
void CG_init()
{
G1=0;
G2=0;
G3=0;
CON=1;
EA=1;
EX0=1;
IT0=1;
}
void delayus(uint y)
{
while(y--);
}
void con_fire() interrupt 0
{
bit flag=0;
if(flag==0)
{
CON=0;
flag=1;
}
else
{
CON=1;
daleyms(10);
G1=1;
delayus(500);
G1=0;
G2=1;
delayus(350);
G2=0;
G3=1;
delayus(250);
G3=0;
flag=~flag;
}
}
void AD_SEG_limite()
{
AD1=AD_AV(4);
tempdat=AD1/0.009049;
if(tempdat>=430)
{
CON=1;
}
}
void NET_SENT_init()
{
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
SM0=1;
SM1=1;
TB8=0;
EA=1;
ES=1;
TR1=1;
TI=0;
}
void NET_SENT()
{
float tempsent;
tempsent=tempdat;
ACC=tempdat;
TB8=P;
SBUF=tempsent;
while(!TI);
TI=0;
}
void main()
{
AD_init();
CG_init();
NET_SENT_init();
while(1)
{
NET_SENT();
}
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。