找回密码
 立即注册
查看: 549|回复: 2

STC12C5A60S2单片机设计的20路NPN输入20路晶体管输出二维码扫码控制电路及程序分享

[复制链接]

该用户从未签到

42

主题

7

回帖

246

积分

中级会员

积分
246
发表于 2023-6-17 14:14:28 | 显示全部楼层 |阅读模式

GYJ-0289_淘宝描述753.png

GYJ-0289_淘宝描述762.png

GYJ-0289_淘宝描述774.png

GYJ-0289_淘宝描述843.png

GYJ-0289_淘宝描述851.png

GYJ-0289_淘宝描述860.png

下图为二维码扫码器
TB2GJGEbNTI8KJjSspiXXbM4FXa_!!2561362892.jpg



【声明】此程序仅用于学习与参考!     
*********************************************************************/
#include "hedder\\STC12C5A60S2.h"
#include"hedder\\DODI.h"
#include <intrins.h>
#define  uchar unsigned char
#define  uint  unsigned int
/*
sfr IAP_DATA    = 0xC2;
sfr IAP_ADDRH   = 0xC3;
sfr IAP_ADDRL   = 0xC4;
sfr IAP_CMD     = 0xC5;
sfr IAP_TRIG    = 0xC6;
sfr IAP_CONTR   = 0xC7;
sfr P4   = 0xC0;

sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;         
sbit IN4=P2^3;

sbit OUT1=P0^0;
sbit OUT2=P0^1;
sbit OUT3=P0^2;
sbit OUT4=P0^3;

sbit OUT10=P0^7;
*/

bit bz1=0;
bit bz2=0;
bit bz3=0;
bit bz4=0;
bit bz5=0;
bit bz6=0;
bit bz7=0;
bit bz8=0;
bit bz9=0;
bit bz10=0;
bit bz11=0;
bit bz12=0;
bit bz13=0;
bit bz14=0;
bit bz15=0;
bit bz16=0;
bit bz17=0;
bit bz18=0;
bit bz19=0;
bit bz20=0;
uchar scdt;
//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数
//#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值
#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x85 //系统工作时钟<3MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x86 //系统工作时钟<2MHz 时,对IAP_CONTR 寄存器设置此值
//#define ENABLE_ISP 0x87 //系统工作时钟<1MHz 时,对IAP_CONTR 寄存器设置此值

uchar dat;
uchar add;
uchar t,r,ii;
bit flag_zx=0;
uchar receBuf[16];//接收缓冲区
bit write=0;
uchar k=100;
bit qcbz=0;
uchar xdata tmz1[160];//接收缓冲区
//uchar  tmz2[64];//接收缓冲区
uchar y;
/********************************************************************
                            函数声明
*********************************************************************/
union union_temp16
{
uint un_temp16;
uchar un_temp8[2];
}
my_unTemp16;

uchar Byte_Read(uint add);              //读一字节,调用前需打开IAP 功能
void Byte_Program(uint add, uchar ch);  //字节编程,调用前需打开IAP 功能
void Sector_Erase(uint add);            //擦除扇区
void IAP_Disable();
/********************************************************************
                            串口初始化
*********************************************************************/

void init(void)
{
        TMOD = 0x20;                                  //定时器1产生波特率
           SCON = 0x50;                                 //方式2,8位数据,波特率可变
        PCON = 0x00;                                 //不倍增波特率
        AUXR = 0x00;                                 //1T工作方式,不使用波特率发生器
        IP   = 0x00;                                 //优先级默认
        TH1  = TL1 = 0xfd;                         //波特率 9600
        TR1  = 1;                                     //启动定时器产生波特率
        EA   = 1; ES = 1;                         //开总中断,开串口中断
}

/*****************清空发送缓冲区*************************/
void clear_receBuf()
{
    uchar i;
        for(i=0;i<8;i++)
        {
        receBuf=0;
        }
}
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=130;j>0;j--);
         { ;
         }
   }
}
void KEY()
{

if((IN1==0)&&(bz1==0)){delay(k);if(IN1==0)
{
r=0;

bz1=1;qcbz=1;
}}
if((bz1==1)&&(IN1==1)){delay(k);if(IN1==1)
{
    tmz1[0]=receBuf[0];
        tmz1[1]=receBuf[1];
        tmz1[2]=receBuf[2];
        tmz1[3]=receBuf[3];
        tmz1[4]=receBuf[4];
        tmz1[5]=receBuf[5];
        tmz1[6]=receBuf[6];
        tmz1[7]=receBuf[7];
write=1;bz1=0;qcbz=0;r=0;
}}
if((IN2==0)&&(bz2==0)){delay(k);if(IN2==0){r=0;bz2=1;qcbz=1;}}
if((bz2==1)&&(IN2==1)){delay(k);if(IN2==1)
{
    tmz1[8]=receBuf[0];
        tmz1[9]=receBuf[1];
        tmz1[10]=receBuf[2];
        tmz1[11]=receBuf[3];
        tmz1[12]=receBuf[4];
        tmz1[13]=receBuf[5];
        tmz1[14]=receBuf[6];
        tmz1[15]=receBuf[7];
write=1;bz2=0;qcbz=0;r=0;
}}

if((IN3==0)&&(bz3==0)){delay(k);if(IN3==0){r=0;bz3=1;qcbz=1;}}
if((bz3==1)&&(IN3==1)){delay(k);if(IN3==1)
{
    tmz1[16]=receBuf[0];
        tmz1[17]=receBuf[1];
        tmz1[18]=receBuf[2];
        tmz1[19]=receBuf[3];
        tmz1[20]=receBuf[4];
        tmz1[21]=receBuf[5];
        tmz1[22]=receBuf[6];
        tmz1[23]=receBuf[7];
write=1;bz3=0;qcbz=0;r=0;
}}
if((IN4==0)&&(bz4==0)){delay(k);if(IN4==0){r=0;bz4=1;qcbz=1;}}
if((bz4==1)&&(IN4==1)){delay(k);if(IN4==1)
{
    tmz1[24]=receBuf[0];
        tmz1[25]=receBuf[1];
        tmz1[26]=receBuf[2];
        tmz1[27]=receBuf[3];
        tmz1[28]=receBuf[4];
        tmz1[29]=receBuf[5];
        tmz1[30]=receBuf[6];
        tmz1[31]=receBuf[7];
write=1;bz4=0;qcbz=0;r=0;
}}
if((IN5==0)&&(bz5==0)){delay(k);if(IN5==0){r=0;bz5=1;qcbz=1;}}
if((bz5==1)&&(IN5==1)){delay(k);if(IN5==1)
{
    tmz1[32]=receBuf[0];
        tmz1[33]=receBuf[1];
        tmz1[34]=receBuf[2];
        tmz1[35]=receBuf[3];
        tmz1[36]=receBuf[4];
        tmz1[37]=receBuf[5];
        tmz1[38]=receBuf[6];
        tmz1[39]=receBuf[7];
write=1;bz5=0;qcbz=0;r=0;
}}
if((IN6==0)&&(bz6==0)){delay(k);if(IN6==0){r=0;bz6=1;qcbz=1;}}
if((bz6==1)&&(IN6==1)){delay(k);if(IN6==1)
{
    tmz1[40]=receBuf[0];
        tmz1[41]=receBuf[1];
        tmz1[42]=receBuf[2];
        tmz1[43]=receBuf[3];
        tmz1[44]=receBuf[4];
        tmz1[45]=receBuf[5];
        tmz1[46]=receBuf[6];
        tmz1[47]=receBuf[7];
write=1;bz6=0;qcbz=0;r=0;
}}
if((IN7==0)&&(bz7==0)){delay(k);if(IN7==0){r=0;bz7=1;qcbz=1;}}
if((bz7==1)&&(IN7==1)){delay(k);if(IN7==1)
{
    tmz1[48]=receBuf[0];
        tmz1[49]=receBuf[1];
        tmz1[50]=receBuf[2];
        tmz1[51]=receBuf[3];
        tmz1[52]=receBuf[4];
        tmz1[53]=receBuf[5];
        tmz1[54]=receBuf[6];
        tmz1[55]=receBuf[7];
write=1;bz7=0;qcbz=0;r=0;
}}
if((IN8==0)&&(bz8==0)){delay(k);if(IN8==0){r=0;bz8=1;qcbz=1;}}
if((bz8==1)&&(IN8==1)){delay(k);if(IN8==1)
{
    tmz1[56]=receBuf[0];
        tmz1[57]=receBuf[1];
        tmz1[58]=receBuf[2];
        tmz1[59]=receBuf[3];
        tmz1[60]=receBuf[4];
        tmz1[61]=receBuf[5];
        tmz1[62]=receBuf[6];
        tmz1[63]=receBuf[7];
write=1;bz8=0;qcbz=0;r=0;
}}
if((IN9==0)&&(bz9==0)){delay(k);if(IN9==0){r=0;bz9=1;qcbz=1;}}
if((bz9==1)&&(IN9==1)){delay(k);if(IN9==1)
{
    tmz1[64]=receBuf[0];
        tmz1[65]=receBuf[1];
        tmz1[66]=receBuf[2];
        tmz1[67]=receBuf[3];
        tmz1[68]=receBuf[4];
        tmz1[69]=receBuf[5];
        tmz1[70]=receBuf[6];
        tmz1[71]=receBuf[7];
write=1;bz9=0;qcbz=0;r=0;
}}
if((IN10==0)&&(bz10==0)){delay(k);if(IN10==0){r=0;bz10=1;qcbz=1;}}
if((bz10==1)&&(IN10==1)){delay(k);if(IN10==1)
{
    tmz1[72]=receBuf[0];
        tmz1[73]=receBuf[1];
        tmz1[74]=receBuf[2];
        tmz1[75]=receBuf[3];
        tmz1[76]=receBuf[4];
        tmz1[77]=receBuf[5];
        tmz1[78]=receBuf[6];
        tmz1[79]=receBuf[7];
write=1;bz10=0;qcbz=0;r=0;
}}
if((IN11==0)&&(bz11==0)){delay(k);if(IN11==0){r=0;bz11=1;qcbz=1;}}
if((bz11==1)&&(IN11==1)){delay(k);if(IN11==1)
{
    tmz1[80]=receBuf[0];
        tmz1[81]=receBuf[1];
        tmz1[82]=receBuf[2];
        tmz1[83]=receBuf[3];
        tmz1[84]=receBuf[4];
        tmz1[85]=receBuf[5];
        tmz1[86]=receBuf[6];
        tmz1[87]=receBuf[7];
write=1;bz11=0;qcbz=0;r=0;
}}
if((IN12==0)&&(bz12==0)){delay(k);if(IN12==0){r=0;bz12=1;qcbz=1;}}
if((bz12==1)&&(IN12==1)){delay(k);if(IN12==1)
{
    tmz1[88]=receBuf[0];
        tmz1[89]=receBuf[1];
        tmz1[90]=receBuf[2];
        tmz1[91]=receBuf[3];
        tmz1[92]=receBuf[4];
        tmz1[93]=receBuf[5];
        tmz1[94]=receBuf[6];
        tmz1[95]=receBuf[7];
write=1;bz12=0;qcbz=0;r=0;
}}
if((IN13==0)&&(bz13==0)){delay(k);if(IN13==0){r=0;bz13=1;qcbz=1;}}
if((bz13==1)&&(IN13==1)){delay(k);if(IN13==1)
{
    tmz1[96]=receBuf[0];
        tmz1[97]=receBuf[1];
        tmz1[98]=receBuf[2];
        tmz1[99]=receBuf[3];
        tmz1[100]=receBuf[4];
        tmz1[101]=receBuf[5];
        tmz1[102]=receBuf[6];
        tmz1[103]=receBuf[7];
write=1;bz13=0;qcbz=0;r=0;
}}
if((IN14==0)&&(bz14==0)){delay(k);if(IN14==0){r=0;bz14=1;qcbz=1;}}
if((bz14==1)&&(IN14==1)){delay(k);if(IN14==1)
{
    tmz1[104]=receBuf[0];
        tmz1[105]=receBuf[1];
        tmz1[106]=receBuf[2];
        tmz1[107]=receBuf[3];
        tmz1[108]=receBuf[4];
        tmz1[109]=receBuf[5];
        tmz1[110]=receBuf[6];
        tmz1[111]=receBuf[7];
write=1;bz14=0;qcbz=0;r=0;
}}
if((IN15==0)&&(bz15==0)){delay(k);if(IN15==0){r=0;bz15=1;qcbz=1;}}
if((bz15==1)&&(IN15==1)){delay(k);if(IN15==1)
{
    tmz1[112]=receBuf[0];
        tmz1[113]=receBuf[1];
        tmz1[114]=receBuf[2];
        tmz1[115]=receBuf[3];
        tmz1[116]=receBuf[4];
        tmz1[117]=receBuf[5];
        tmz1[118]=receBuf[6];
        tmz1[119]=receBuf[7];
write=1;bz15=0;qcbz=0;r=0;
}}
if((IN16==0)&&(bz16==0)){delay(k);if(IN16==0){r=0;bz16=1;qcbz=1;}}
if((bz16==1)&&(IN16==1)){delay(k);if(IN16==1)
{
    tmz1[120]=receBuf[0];
        tmz1[121]=receBuf[1];
        tmz1[122]=receBuf[2];
        tmz1[123]=receBuf[3];
        tmz1[124]=receBuf[4];
        tmz1[125]=receBuf[5];
        tmz1[126]=receBuf[6];
        tmz1[127]=receBuf[7];
write=1;bz16=0;qcbz=0;r=0;
}}
if((IN17==0)&&(bz17==0)){delay(k);if(IN17==0){r=0;bz17=1;qcbz=1;}}
if((bz17==1)&&(IN17==1)){delay(k);if(IN17==1)
{
    tmz1[128]=receBuf[0];
        tmz1[129]=receBuf[1];
        tmz1[130]=receBuf[2];
        tmz1[131]=receBuf[3];
        tmz1[132]=receBuf[4];
        tmz1[133]=receBuf[5];
        tmz1[134]=receBuf[6];
        tmz1[135]=receBuf[7];
write=1;bz17=0;qcbz=0;r=0;
}}
if((IN18==0)&&(bz18==0)){delay(k);if(IN18==0){r=0;bz18=1;qcbz=1;}}
if((bz18==1)&&(IN18==1)){delay(k);if(IN18==1)
{
    tmz1[136]=receBuf[0];
        tmz1[137]=receBuf[1];
        tmz1[138]=receBuf[2];
        tmz1[139]=receBuf[3];
        tmz1[140]=receBuf[4];
        tmz1[141]=receBuf[5];
        tmz1[142]=receBuf[6];
        tmz1[143]=receBuf[7];
write=1;bz18=0;qcbz=0;r=0;
}}
if((IN19==0)&&(bz19==0)){delay(k);if(IN19==0){r=0;bz19=1;qcbz=1;}}
if((bz19==1)&&(IN19==1)){delay(k);if(IN19==1)
{
    tmz1[144]=receBuf[0];
        tmz1[145]=receBuf[1];
        tmz1[146]=receBuf[2];
        tmz1[147]=receBuf[3];
        tmz1[148]=receBuf[4];
        tmz1[149]=receBuf[5];
        tmz1[150]=receBuf[6];
        tmz1[151]=receBuf[7];
write=1;bz19=0;qcbz=0;r=0;
}}
if((IN20==0)&&(bz20==0)){delay(k);if(IN20==0){r=0;bz20=1;qcbz=1;}}
if((bz20==1)&&(IN20==1)){delay(k);if(IN20==1)
{
    tmz1[152]=receBuf[0];
        tmz1[153]=receBuf[1];
        tmz1[154]=receBuf[2];
        tmz1[155]=receBuf[3];
        tmz1[156]=receBuf[4];
        tmz1[157]=receBuf[5];
        tmz1[158]=receBuf[6];
        tmz1[159]=receBuf[7];
write=1;bz20=0;qcbz=0;r=0;
}}
}
/********************************************************************

                                    主函数
*********************************************************************/
void main()
{
   delay(k);
   P4SW|=0x70;//配置P4.4为IO口                  
   P4M0&=0x00;                  
   P4M1&=0x00;
   for (y=0; y<160; y++)
    {
    tmz1[y] = Byte_Read(y);
    }
   init();   //串口初始化
   while(1)
   {
   KEY();
   if(write==1)
   {
    write=0;
        Sector_Erase(0);
        for (y=0; y<160; y++)
    {
     Byte_Program(y, tmz1[y]);
    }
        qcbz=0;clear_receBuf();r=0;
   }
   if((r!=0)&&(qcbz==0)){delay(k);delay(k);delay(k);clear_receBuf();r=0;}
}       
}
/********************************************************************
                         串口一 发送接收中断函数
*********************************************************************/
void uart_isr()  interrupt 4
{
if(RI)  //如果有接收
           {
             RI=0; //接收标志清零
             receBuf[r++&0x0F]=SBUF;     //把接受的数据存储到BUT数组中
                 if(r>=8)
                 {       
                 flag_zx=1;
                 }
           }
           if(flag_zx==1)
           {                     
             flag_zx=0;
               
                if((receBuf[0]==tmz1[0])&&(receBuf[1]==tmz1[1])&&(receBuf[2]==tmz1[2])&&(receBuf[3]==tmz1[3])&&(receBuf[4]==tmz1[4])&&(receBuf[5]==tmz1[5])&&(receBuf[6]==tmz1[6])&&(receBuf[7]==tmz1[7]))
                        {
                        OUT1=0;delay(k);delay(k);OUT1=1;clear_receBuf();r=0;
                        }
                  else if((receBuf[0]==tmz1[8])&&(receBuf[1]==tmz1[9])&&(receBuf[2]==tmz1[10])&&(receBuf[3]==tmz1[11])&&(receBuf[4]==tmz1[12])&&(receBuf[5]==tmz1[13])&&(receBuf[6]==tmz1[14])&&(receBuf[7]==tmz1[15]))
                        {
                        OUT2=0;delay(k);delay(k);OUT2=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[16])&&(receBuf[1]==tmz1[17])&&(receBuf[2]==tmz1[18])&&(receBuf[3]==tmz1[19])&&(receBuf[4]==tmz1[20])&&(receBuf[5]==tmz1[21])&&(receBuf[6]==tmz1[22])&&(receBuf[7]==tmz1[23]))
                        {
                        OUT3=0;delay(k);delay(k);OUT3=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[24])&&(receBuf[1]==tmz1[25])&&(receBuf[2]==tmz1[26])&&(receBuf[3]==tmz1[27])&&(receBuf[4]==tmz1[28])&&(receBuf[5]==tmz1[29])&&(receBuf[6]==tmz1[30])&&(receBuf[7]==tmz1[31]))
                        {
                        OUT4=0;delay(k);delay(k);OUT4=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[32])&&(receBuf[1]==tmz1[33])&&(receBuf[2]==tmz1[34])&&(receBuf[3]==tmz1[35])&&(receBuf[4]==tmz1[36])&&(receBuf[5]==tmz1[37])&&(receBuf[6]==tmz1[38])&&(receBuf[7]==tmz1[39]))
                        {
                        OUT5=0;delay(k);delay(k);OUT5=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[40])&&(receBuf[1]==tmz1[41])&&(receBuf[2]==tmz1[42])&&(receBuf[3]==tmz1[43])&&(receBuf[4]==tmz1[44])&&(receBuf[5]==tmz1[45])&&(receBuf[6]==tmz1[46])&&(receBuf[7]==tmz1[47]))
                        {
                        OUT6=0;delay(k);delay(k);OUT6=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[48])&&(receBuf[1]==tmz1[49])&&(receBuf[2]==tmz1[50])&&(receBuf[3]==tmz1[51])&&(receBuf[4]==tmz1[52])&&(receBuf[5]==tmz1[53])&&(receBuf[6]==tmz1[54])&&(receBuf[7]==tmz1[55]))
                        {
                        OUT7=0;delay(k);delay(k);OUT7=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[56])&&(receBuf[1]==tmz1[57])&&(receBuf[2]==tmz1[58])&&(receBuf[3]==tmz1[59])&&(receBuf[4]==tmz1[60])&&(receBuf[5]==tmz1[61])&&(receBuf[6]==tmz1[62])&&(receBuf[7]==tmz1[63]))
                        {
                        OUT8=0;delay(k);delay(k);OUT8=1;;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[64])&&(receBuf[1]==tmz1[65])&&(receBuf[2]==tmz1[66])&&(receBuf[3]==tmz1[67])&&(receBuf[4]==tmz1[68])&&(receBuf[5]==tmz1[69])&&(receBuf[6]==tmz1[70])&&(receBuf[7]==tmz1[71]))
                        {
                        OUT9=0;delay(k);delay(k);OUT9=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[72])&&(receBuf[1]==tmz1[73])&&(receBuf[2]==tmz1[74])&&(receBuf[3]==tmz1[75])&&(receBuf[4]==tmz1[76])&&(receBuf[5]==tmz1[77])&&(receBuf[6]==tmz1[78])&&(receBuf[7]==tmz1[79]))
                        {
                        OUT10=0;delay(k);delay(k);OUT10=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[80])&&(receBuf[1]==tmz1[81])&&(receBuf[2]==tmz1[82])&&(receBuf[3]==tmz1[83])&&(receBuf[4]==tmz1[84])&&(receBuf[5]==tmz1[85])&&(receBuf[6]==tmz1[86])&&(receBuf[7]==tmz1[87]))
                        {
                        OUT11=0;delay(k);delay(k);OUT11=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[88])&&(receBuf[1]==tmz1[89])&&(receBuf[2]==tmz1[90])&&(receBuf[3]==tmz1[91])&&(receBuf[4]==tmz1[92])&&(receBuf[5]==tmz1[93])&&(receBuf[6]==tmz1[94])&&(receBuf[7]==tmz1[95]))
                        {
                        OUT12=0;delay(k);delay(k);OUT12=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[96])&&(receBuf[1]==tmz1[97])&&(receBuf[2]==tmz1[98])&&(receBuf[3]==tmz1[99])&&(receBuf[4]==tmz1[100])&&(receBuf[5]==tmz1[101])&&(receBuf[6]==tmz1[102])&&(receBuf[7]==tmz1[103]))
                        {
                        OUT13=0;delay(k);delay(k);OUT13=1;clear_receBuf();r=0;
                        }
                  else if((receBuf[0]==tmz1[104])&&(receBuf[1]==tmz1[105])&&(receBuf[2]==tmz1[106])&&(receBuf[3]==tmz1[107])&&(receBuf[4]==tmz1[108])&&(receBuf[5]==tmz1[109])&&(receBuf[6]==tmz1[110])&&(receBuf[7]==tmz1[111]))
                        {
                        OUT14=0;delay(k);delay(k);OUT14=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[112])&&(receBuf[1]==tmz1[113])&&(receBuf[2]==tmz1[114])&&(receBuf[3]==tmz1[115])&&(receBuf[4]==tmz1[116])&&(receBuf[5]==tmz1[117])&&(receBuf[6]==tmz1[118])&&(receBuf[7]==tmz1[119]))
                        {
                        OUT15=0;delay(k);delay(k);OUT15=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[120])&&(receBuf[1]==tmz1[121])&&(receBuf[2]==tmz1[122])&&(receBuf[3]==tmz1[123])&&(receBuf[4]==tmz1[124])&&(receBuf[5]==tmz1[125])&&(receBuf[6]==tmz1[126])&&(receBuf[7]==tmz1[127]))
                        {
                        OUT16=0;delay(k);delay(k);OUT16=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[128])&&(receBuf[1]==tmz1[129])&&(receBuf[2]==tmz1[130])&&(receBuf[3]==tmz1[131])&&(receBuf[4]==tmz1[132])&&(receBuf[5]==tmz1[133])&&(receBuf[6]==tmz1[134])&&(receBuf[7]==tmz1[135]))
                        {
                        OUT17=0;delay(k);delay(k);OUT17=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[136])&&(receBuf[1]==tmz1[137])&&(receBuf[2]==tmz1[138])&&(receBuf[3]==tmz1[139])&&(receBuf[4]==tmz1[140])&&(receBuf[5]==tmz1[141])&&(receBuf[6]==tmz1[142])&&(receBuf[7]==tmz1[143]))
                        {
                        OUT18=0;delay(k);delay(k);OUT18=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[144])&&(receBuf[1]==tmz1[145])&&(receBuf[2]==tmz1[146])&&(receBuf[3]==tmz1[147])&&(receBuf[4]==tmz1[148])&&(receBuf[5]==tmz1[149])&&(receBuf[6]==tmz1[150])&&(receBuf[7]==tmz1[151]))
                        {
                        OUT19=0;delay(k);delay(k);OUT19=1;clear_receBuf();r=0;
                        }
          else if((receBuf[0]==tmz1[152])&&(receBuf[1]==tmz1[153])&&(receBuf[2]==tmz1[154])&&(receBuf[3]==tmz1[155])&&(receBuf[4]==tmz1[156])&&(receBuf[5]==tmz1[157])&&(receBuf[6]==tmz1[158])&&(receBuf[7]==tmz1[159]))
                        {
                        OUT20=0;delay(k);delay(k);OUT20=1;clear_receBuf();r=0;
                        }
                 if(qcbz==0){clear_receBuf();r=0;}
} }

/********************************************************************
                            结束主函数
*********************************************************************/
//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
uchar Byte_Read(uint add)
{
    IAP_DATA = 0x00;
    IAP_CONTR = ENABLE_ISP;         //打开IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x01;                 //IAP/ISP/EEPROM 字节读命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

    //EA = 0;
    IAP_TRIG = 0x5A;   //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xA5;   //送完A5h 后,ISP/IAP 命令立即被触发起动
    _nop_();
    //EA = 1;
    IAP_Disable();  //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
                    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
    return (IAP_DATA);
}

//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void Byte_Program(uint add, uchar ch)
{
    IAP_CONTR = ENABLE_ISP;         //打开 IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字节编程命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

    IAP_DATA = ch;                  //要编程的数据先送进IAP_DATA 寄存器
    //EA = 0;
    IAP_TRIG = 0x5A;   //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xA5;   //送完A5h 后,ISP/IAP 命令立即被触发起动
    _nop_();
    //EA = 1;
    IAP_Disable();  //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
                    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}

//擦除扇区, 入口:DPTR = 扇区地址
void Sector_Erase(uint add)
{
    IAP_CONTR = ENABLE_ISP;         //打开IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇区擦除命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

    //EA = 0;
    IAP_TRIG = 0x5A;   //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xA5;   //送完A5h 后,ISP/IAP 命令立即被触发起动
    _nop_();
    //EA = 1;
    IAP_Disable();  //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
                    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}

void IAP_Disable()
{
    //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
    IAP_CONTR = 0;      //关闭IAP 功能
    IAP_CMD   = 0;      //清命令寄存器,使命令寄存器无命令,此句可不用
    IAP_TRIG  = 0;      //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
    IAP_ADDRH = 0;
    IAP_ADDRL = 0;
}

/********************************************************************
                              结束
*********************************************************************/



20路输入20路输出PNP晶体管输出模块.zip

504.82 KB, 下载次数: 30

回复 送花

使用道具 举报

该用户从未签到

551

主题

9567

回帖

1万

积分

管理员

积分
14057
发表于 2023-6-17 15:11:44 | 显示全部楼层
感谢分享 !
STC12C5A60S2系列是  STC 第一代 1T 8051;
STC15W4K32S4系列是 STC 第二代 1T 8051;
STC8H8K64U系列是     STC 第三代 1T 8051;

STC32是32位8051
回复 支持 反对 送花

使用道具 举报

该用户从未签到

0

主题

1

回帖

16

积分

新手上路

积分
16
发表于 2023-7-6 07:26:54 | 显示全部楼层
回复 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 02:51 , Processed in 0.059575 second(s), 39 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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