找回密码
 立即注册
查看: 251|回复: 0

使用STC12C5A60S2单片机设计的16路NPN输入16路晶体管输出带语音播报功能电路分享

[复制链接]

该用户从未签到

42

主题

7

回帖

246

积分

中级会员

积分
246
发表于 2023-7-10 10:04:24 | 显示全部楼层 |阅读模式
DSC_0035.JPG

DSC_0038.JPG

GYJ-0247_16路输入输出可编程带语音模块_00.jpg

GYJ-0247_16路输入输出可编程带语音模块_01.jpg

GYJ-0247_16路输入输出可编程带语音模块_02.jpg



#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;
}



回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-22 01:38 , Processed in 0.053609 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表