⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dzled19.c

📁 此程序是利用15088b点阵块芯片利用74hc595作为列选
💻 C
📖 第 1 页 / 共 2 页
字号:
                                                                                                                                                                                                              #include<reg51.h>
#include<absacc.h>
//#include<intrins.h>
#include<dzbuff1.h>
/*  8052 Extensions  */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2   = 0xCC;
sfr TH2   = 0xCD;
/*  8052 Extensions  */
/*  IE  */
sbit ET2   = 0xAD;
/*  IP  */
sbit PT2   = 0xBD;
/*  P1  */
sbit T2EX  = 0x91;
sbit T2    = 0x90;
/*  T2CON  */
sbit TF2   = 0xCF;
sbit T2IP  = 0xCE;
sbit T2IE  = 0xCD;
sbit T2RSE = 0xCC;
sbit BGEN  = 0xCB;
sbit TR2   = 0xCA;
sbit C_T2  = 0xC9;
sbit CP_RL2= 0xC8;
//
#define FOSC              24   //11.0592 MHz
#define BAUD_RATE     9.6    //kpbs
//
sbit da1=P1^0;
sbit srclk=P1^1;
sbit rclk=P1^2;
sbit da2=P1^3;
/*sbit da2=P1^1;
sbit srclk=P1^2;
sbit rclk=P1^3;  */
sbit pause=P1^7;
sbit P17=P1^6;
sbit DE=P3^2;
/*sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;       */
//
bit init_pos;
bit yes_no;
bit EvRcv;
bit init_move;
bit need_data_dis;
bit pause_save;
bit pause_flag;
bit rcv_flag;
bit  P17_save;
//

unsigned char data deng_t1;
unsigned char data deng_t2;
unsigned char data deng_t3;
//unsigned char deng_t4;
unsigned char data row_count;
unsigned char data zu_temp1;
unsigned char data count_byte;
unsigned char data move_num;
unsigned char data move_count;

//
unsigned char data benji_address;
unsigned char data rcvcount;
unsigned char idata datacomm1[2]={0,0};
unsigned char idata datacomm2[4]={0,0,0,0};
unsigned char idata rcvdata[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
//unsigned char rcvdata[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
void initial(void);
intial_io();
void dis_led(
 unsigned char *p_temp0,
 unsigned char *p_temp1,
 unsigned char *p_temp2,
 unsigned char *p_temp3,
 unsigned char *p_temp4,
 unsigned char *p_temp5,
 unsigned char *p_temp6,
 unsigned char *p_temp7,
 unsigned char *p_temp8,
 unsigned char *p_temp9,
 unsigned char *p_temp10,
 unsigned char *p_temp11);
 void data_pro(unsigned char temp1,unsigned char temp2);
ansi1();
ansi11();
//
// unsigned char HexToDec(unsigned char tt);
void out_disp(unsigned char led);
unsigned char m_out_dis(      //显示一行的8位字节代码
unsigned char num_byte,
unsigned char *p_led0,
unsigned char *p_led1,
unsigned char *p_led2,
unsigned char *p_led3,
unsigned char *p_led4,
unsigned char *p_led5,
unsigned char *p_led6,
unsigned char *p_led7,
unsigned char *p_led8,
unsigned char *p_led9,
unsigned char *p_led10,
unsigned char *p_led11);
//
void t_tx(unsigned char send_temp);
/************************************************************* */
void rcv_INT(void)interrupt 4
{
  unsigned char  temp,i;
 if(RI)
       {
       temp=SBUF;
        RI=0;
        if (rcvcount==0)
        {
         if(temp==0x66)
	   {
             rcvdata[0]=temp;
             rcvcount++;
           }
          else rcvcount=0;
        }
        else if(rcvcount==1)
          {
           if(temp==0xbb)
	      {
              rcvdata[1]=temp;
              rcvcount++;
              }
           else  rcvcount=0;
          }
        else if(rcvcount==2)
          {
           if(temp==benji_address)
	       {
               rcvdata[2]=temp;
               rcvcount++;
                }
            else  rcvcount=0;
          }
       /* else if(rcvcount==3)
          {
            if(temp==0x7f)
	       {
                rcvdata[3]=temp;
                rcvcount++;
               }
            else rcvcount=0;
          }       */
        else if(rcvcount>2&&rcvcount<13)
          {
             rcvdata[rcvcount]=temp;
             rcvcount++;

        if(rcvcount>12)
          {
             rcv_flag=1;
             rcvcount=0;
             temp=0;
             datacomm1[0]=rcvdata[5];
     datacomm1[1]=rcvdata[6];
     data_pro(datacomm1[0],datacomm1[1]);
             EvRcv=1;
           //  init_move=1;

          }   // if(rcvcount>12)
       } // else if(rcvcount>3&&rcvcount<13)
    }
 }




/************************************************************* */

main()
{
unsigned char datacomm1[2];

unsigned char m;
intial_io();
ansi1();
initial();
ansi1();
benji_address=P2;
benji_address=0x0f&benji_address;
while (1)
  {
        move_num=8;
       if(move_num>=28)
       {
       move_num=0;
       deng_t2++;
      // for (m=0;m<13;m++)   t_tx(rcvdata[m]);
       if (deng_t2>3)
        {
        deng_t2=0;
        EvRcv=0;
        need_data_dis=0;
        }
       }
     //  if (datacomm1[0]>0&&datacomm1[1]>0) need_data_dis=1;
       if (init_pos)
                {
                  move_num=8;
                  init_pos=0;
                }
       if  (rcv_flag)
          {
               rcv_flag=0;
              if (rcvdata[5]==0xff&&rcvdata[6]==0xff)
                {
                  pause_flag=1;
                 // datacomm1[0]=0xff;
                 // datacomm1[1]=0xff;
                }
               else
                  {
                   need_data_dis=1;
                   yes_no=1;
                   pause_flag=0;

                 /*  if (init_move&&yes_no)
                   {
                    init_move=0;
                    yes_no=0;  */
                    init_pos=1;
                   //}

                  }   //  else
           }   //  (rcvdata[0]==0x55&&rcvdata[1]==0xaa

          if (!pause_save||pause_flag)
           {
           need_data_dis=0;
           deng_t2=0;
           dis_led(zan1_data,
           ting1_data,ting2_data,
           fu1_data,fu2_data,
           wu1_data,kong1_data,kong3_data,
           zan1_data,ting1_data,fu1_data,wu1_data);
           }
          if (need_data_dis)         //正常服务
            {
              if (EvRcv)         //有数据传来
              dis_led(qing1_data,
              first_num_data+(unsigned int)datacomm2[0]*16,
              first_num_data+(unsigned int)datacomm2[1]*16,
              first_num_data+(unsigned int)datacomm2[2]*16,
              first_num_data+(unsigned int)datacomm2[3]*16,
              hao1_data,gu1_data,ke1_data,
              ban1_data,li1_data,ye1_data,wu1_data);
              }  //if (EvRcv&&need_data_dis)
             else
               if(!EvRcv||(!need_data_dis&&!pause_flag))
               {
                need_data_dis=0;
              /*  dis_led(gu1_data,
                ke1_data,ke2_data,
                nin1_data,nin2_data,
                hhao1_data,kong1_data,kong3_data,
                huan1_data,ying1_data,guang1_data,lin1_data); */
                dis_led(huan1_data,
                ying1_data,ying2_data,
                guang1_data,guang2_data,
                lin1_data,kong1_data,kong3_data,
                huan1_data,ying1_data,guang1_data,lin1_data);
                }
      } //while
 }  //main
 /************************************************************* */
ansi()
{
    unsigned char yan1;
    for(yan1=0;yan1<10;yan1++);
}
ansi1()
{
    unsigned char yan1;
    for(yan1=0;yan1<200;yan1++);
}
 /************************************************************* */

void t() interrupt 1 //1MS中断
{
  /* TL0=0X17;
   TH0=0Xfc;      //1ms    */
   TH0=-30000/256;
   TL0=-30000%256;
     deng_t1++;

    pause_save=pause;
 if(deng_t1>50)
    {
         deng_t1=0;
         rcvcount=0;
         deng_t3++;
         //if (deng_t3>2)
          {
          // deng_t3=0;
           P17_save = ~P17_save;
           P17 = P17_save;
           }


     }
}
/************************************************************* */
intial_io()
{
// unsigned char k;
 P0=0X00;
 P1=0X00;
 P2=0X00;
 DE=0;
 rcvcount=0;
 deng_t1=0;
 deng_t2=0;
 row_count=0;
 //
 need_data_dis=0;
 init_move=0;
 EvRcv=0;
 yes_no=0;
// da1=0;
 da2=0;
 srclk=0;
 rclk=0;
 //data_save=0;
 //srclk_save=0;
// rclk_save=1;
 P17_save=0;
 zu_temp1=0;
 count_byte=0;
 pause_save=1;
 pause_flag=0;
 pause=1;
 move_num=0;
 move_count=0;
 init_pos=0;
 rcv_flag=0;
 P2=0xff;
 }
/************************************************************* */
void initial(void)
{
  IE=0X82;                           //允许T0中断
 //TMOD &= 0XF0;                    // clear Timer 0
 TMOD  = 0X21;                   //T1 is 方式2 ,T0工作于方式1
 PCON=0;
 SCON=0X50;                   //串口工作方式1,固定波特率
// TCON=0X02;
 TL0 = 0X0;                   // value set by user
 TH0 = 0X0;                  // value set by user
  TR0 = 1;
 //TL1=0xfd;
 //TL1=0x100-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE));

 //TL1=256-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE/2));
// TH1=TL1;
// TR1= 1;
RCAP2L=0xd9;
RCAP2H=0xff;
/*RCAP2L=(0x10000-(unsigned long)(FOSC*1000/(32*BAUD_RATE)))%0x100;
RCAP2H=(0x10000-(unsigned long)(FOSC*1000/(32*BAUD_RATE)))/0x100; */
T2CON=0X34;
/*TL1=0xFd;
TH1=0xFd;  //Band = 9.6k  */
//PCON=0x80;
 TR2= 1;
 IP=0X10;                       //串口中断为高优先级
 //TR1= 1;
 ES=1;                       //允许串口中断
 EA=1;

 }
void dis_led(
 unsigned char *p_temp0,
 unsigned char *p_temp1,
 unsigned char *p_temp2,
 unsigned char *p_temp3,
 unsigned char *p_temp4,
 unsigned char *p_temp5,
 unsigned char *p_temp6,
 unsigned char *p_temp7,
 unsigned char *p_temp8,
 unsigned char *p_temp9,
 unsigned char *p_temp10,
 unsigned char *p_temp11)
{
unsigned char j,temp=0;
for( j=0;j<16;j++)
{
 switch(row_count)
{
case 0:
{
 zu_temp1=row_count;
 count_byte=0;
 P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 1:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 2:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 3:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 4:
{
 zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 5:
{
 zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 6:
{
 zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 7:
{
 zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 8:
{
 zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 9:
{
  zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 10:
{
  zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 11:
{
  zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
       p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 12:
{
  zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -