使用STC12C5A60S2单片机设计的16路NPN输入16路晶体管输出带语音播报功能电路分享
#include <STC12C5A60S2.H>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int//宏定义无符号整型
void timer0_1init(void);
/**************语音定义开始*****************/
sbit voicea = P2^0;
sbit voiceb = P2^1;
sbit voicec = P2^2;
sbit voiced = P2^3;
sbit voicee = P2^4;
uchar voices=0;
void voice();//数码管处理
/**************语音定义结束*****************/
/**************输入定义开始*****************/
sbit ins01 = P1^0;
sbit ins02 = P1^1;
sbit ins03 = P1^2;
sbit ins04 = P1^3;
sbit ins05 = P1^4;
sbit ins06 = P5^2;
sbit ins07 = P5^3;
sbit ins08 = P1^5;
sbit ins09 = P1^6;
sbit ins10 = P1^7;
sbit ins11 = P3^2;
sbit ins12 = P3^3;
sbit ins13 = P3^4;
sbit ins14 = P3^5;
sbit ins15 = P3^6;
sbit ins16 = P3^7;
/**************输入定义结束*****************/
/**************输出定义开始*****************/
sbit out01 = P0^0;
sbit out02 = P0^1;
sbit out03 = P0^2;
sbit out04 = P0^3;
sbit out05 = P0^4;
sbit out06 = P0^5;
sbit out07 = P0^6;
sbit out08 = P0^7;
sbit out09 = P4^6;
sbit out10 = P4^1;
sbit out11 = P4^5;
sbit out12 = P4^4;
sbit out13 = P2^7;
sbit out14 = P2^6;
sbit out15 = P2^5;
sbit out16 = P5^1;
/**************输出定义结束*****************/
bit runflag=0;//运行标志位
int time1=0,time2=0;//8秒计时 8秒闪动
char flicker=0;
void main(){
P4SW|=0x70; //配置P4.5为IO口
timer0_1init();
while(1){
if(runflag==0){//运行结束
if(ins01==0){out01=0;voices= 1;flicker=1;runflag=1;
}else if(ins02==0){out02=0;voices= 2;flicker=2 ; runflag=1;
}else if(ins03==0){out03=0;voices= 3;flicker=3 ; runflag=1;
}else if(ins04==0){out04=0;voices= 4;flicker=4 ; runflag=1;
}else if(ins05==0){out05=0;voices= 5;flicker=5 ; runflag=1;
}else if(ins06==0){out06=0;voices= 6;flicker=6 ; runflag=1;
}else if(ins07==0){out07=0;voices= 7;flicker=7 ; runflag=1;
}else if(ins08==0){out08=0;voices= 8;flicker=8 ; runflag=1;
}else if(ins09==0){out09=0;voices= 9;flicker=9 ; runflag=1;
}else if(ins10==0){out10=0;voices=10;flicker=10; runflag=1;
}else if(ins11==0){out11=0;voices=11;flicker=11; runflag=1;
}else if(ins12==0){out12=0;voices=12;flicker=12; runflag=1;
}else if(ins13==0){out13=0;voices=13;flicker=13; runflag=1;
}else if(ins14==0){out14=0;voices=14;flicker=14; runflag=1;
}else if(ins15==0){out15=0;voices=15;flicker=15; runflag=1;
}else if(ins16==0){out16=0;voices=16;flicker=16; runflag=1;}
}
voice();//语音处理
}
}
void timer0(void)interrupt 1{
TL0 = 0xCD; //重新设置定时器0时间为2ms
TH0 = 0xF8; //重新设置定时器0的初始值
if(runflag){//开始运行
time1++;
time2++;
if(time2>120){
time2=0;
if(flicker==1 ){out01=~out01;}
if(flicker==2 ){out02=~out02;}
if(flicker==3 ){out03=~out03;}
if(flicker==4 ){out04=~out04;}
if(flicker==5 ){out05=~out05;}
if(flicker==6 ){out06=~out06;}
if(flicker==7 ){out07=~out07;}
if(flicker==8 ){out08=~out08;}
if(flicker==9 ){out09=~out09;}
if(flicker==10){out10=~out10;}
if(flicker==11){out11=~out11;}
if(flicker==12){out12=~out12;}
if(flicker==13){out13=~out13;}
if(flicker==14){out14=~out14;}
if(flicker==15){out15=~out15;}
if(flicker==16){out16=~out16;}
}
if(time1>100){
voices=0;//语音结束
}
if(time1>4000){//8秒
time1=0;//时间清零
time2=0;
flicker=0;
runflag=0;//结束运行
out01=1;
out02=1;
out03=1;
out04=1;
out05=1;
out06=1;
out07=1;
out08=1;
out09=1;
out10=1;
out11=1;
out12=1;
out13=1;
out14=1;
out15=1;
out16=1;
}
}
}
void timer0_1init(void){//定时配置
TMOD=0x11;//将定时器0,1都设置为模式1
TL0 = 0xCD;//设置定时器0时间为2ms
TH0 = 0xF8;//设置定时器0的初始值
TR0=1;//开启定时器0
TR1=1;//开启定时器1
EA=1;//开总中断
ET0=1;//开定时器0的中断
}
void voice(){//语音处理
if(voices&0x01)voicea=0; else voicea=1;
if(voices&0x02)voiceb=0; else voiceb=1;
if(voices&0x04)voicec=0; else voicec=1;
if(voices&0x08)voiced=0; else voiced=1;
if(voices&0x10)voicee=0; else voicee=1;
}
页:
[1]