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

📄 project.c

📁 公交车语音报站系统设计程序
💻 C
📖 第 1 页 / 共 3 页
字号:
}

//***************************读一字节数据****************************//
//从从地址为Slave的IIC器件的Address地址处读一字节数据
uchar Read_1byte(uchar Slave,uchar Address)
{uchar data0,x;
 do{
    Start();		                   //开始信号
    Write_Byte(Slave);		           //写I2C器件地址
    Check_Ack();		               //检查应答位
   }while(Ack_Flag);              
 do{
    Write_Byte(Address);		       //写寄存器地址
    Check_Ack();		               //检查应答位
   }while(Ack_Flag);                   
 do{
    Start();		                   //开始
    Write_Byte(Slave+1);		       //写I2C器件地址(+1表示为读操作)
    Check_Ack();		               //检查应答位
   }while(Ack_Flag);
 data0=Read_Byte();		               //读1字节
 Nack();		                       //读完发送一个Not Ack应答
 Stop();		                       //停止
 return data0;	                       //返回读取数据
}

//***************************数字显示程序****************************//
void Led_Display(uchar Number)
{uchar d0,d1;
 d0=Number/10;		                   //取站数的个位
 d1=Number%10;		                   //取站数的十位
 Write_2byte(0x70,0x20,d1,d0);	       //从显示位0开始连续显示两位
}

//***************************换下一个字显示**************************//
void change()
{unsigned char m;
 if(!Pre_Flag)				           //报站情形
   {switch(State)			           //判断站名
      {case 1:				           //若为第1站
         if(Word_Number<5)	           //判断已显示字数
           {if(Word_Number<3)	       //若未显示完“第1站”,则
              {for(m=0;m<32;m++)       //依次换字显示“第1站”
                   next[m]=State1[Word_Number][m];}	
            else				
               for(m=0;m<32;m++)       //依次换字显示“到了”
                   next[m]=DL[Word_Number-3][m];	
            Word_Number++;}		       //显示字数+1
         else					       //若全部显示完,则
            Word_Number=0;		       //显示字数清0
         break;
       case 2:				           //若为第2站
         if(Word_Number<5)	           //判断已显示字数
           {if(Word_Number<3)	       //若未显示完“第2站”,则
              {for(m=0;m<32;m++)       //依次换字显示“第2站”
               next[m]=State2[Word_Number][m];}	
            else				//否则
              for(m=0;m<32;m++)
                 next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 3:				//若为第3站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第3站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第3站”
            else 
			   for(m=0;m<32;m++)
                   next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
            Word_Number=0;		//显示字数清0
         break;
       case 4:				//若为第4站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第4站”,则
              {for(m=0;m<32;m++)
               next[m]=State2[Word_Number][m];}	//依次换字显示“第4站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
                  Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 5:				//若为第5站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第5站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第5站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
            Word_Number=0;		//显示字数清0
        break;
       case 6:				//若为第6站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第6站”,则
              {for(m=0;m<32;m++)
               next[m]=State2[Word_Number][m];}	//依次换字显示“第6站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
            Word_Number=0;		//显示字数清0
         break;
       case 7:				//若为第7站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第7站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第7站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
            Word_Number=0;		//显示字数清0
         break;
       case 8:				//若为第8站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第8站”,则
              {for(m=0;m<32;m++)
                   next[m]=State2[Word_Number][m];}	//依次换字显示“第8站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
        else					//若全部显示完,则
          Word_Number=0;		//显示字数清0
        break;
       case 9:				//若为第9站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第1站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第9站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
            Word_Number=0;		//显示字数清0
         break;
       case 10:				//若为第10站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第10站”,则
              {for(m=0;m<32;m++)
                   next[m]=State2[Word_Number][m];}	//依次换字显示“第10站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 11:				//若为第11站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第11站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第11站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}	//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 12:				//若为第12站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第12站”,则
              {for(m=0;m<32;m++)
                   next[m]=State2[Word_Number][m];}	//依次换字显示“第12站”
            else				//否则
              for(m=0;m<32;m++)
            next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 13:				//若为第13站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第13站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第13站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 14:				//若为第14站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第14站”,则
              {for(m=0;m<32;m++)
                   next[m]=State2[Word_Number][m];}	//依次换字显示“第14站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 15:				//若为第15站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第15站”,则
              {for(m=0;m<32;m++)
                   next[m]=State1[Word_Number][m];}	//依次换字显示“第15站”
            else				//否则
              for(m=0;m<32;m++)
            next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;
       case 16:				//若为第16站
         if(Word_Number<5)	//判断已显示字数
           {if(Word_Number<3)	//若未显示完“第16站”,则
              {for(m=0;m<32;m++)
               next[m]=State2[Word_Number][m];}	//依次换字显示“第16站”
            else				//否则
              for(m=0;m<32;m++)
                  next[m]=DL[Word_Number-3][m];		//依次换字显示“到了”
            Word_Number++;}		//显示字数+1
         else					//若全部显示完,则
           Word_Number=0;		//显示字数清0
         break;}}
 else						//预报站情形
   {switch(State)				//判断站数
      {case 1:					//若为“第1站”
         if(Word_Number<7)		//判断已显示字数
           {if(Word_Number<4)		//若未显示完“前方到站”
              {for(m=0;m<32;m++)
                   next[m]=QFDZ[Word_Number][m];}		//依次换字显示“前方到站”
            else					//若显示完“前方到站”
               for(m=0;m<32;m++)
                   next[m]=State1[Word_Number-4][m];		//依次换字显示“第1站”
               Word_Number++;}			//显示字数+1
         else						//若全部显示完
           Word_Number=0;			//显示字数清0
         break;
       case 2:					//若为“第2站”
         if(Word_Number<7)		//判断已显示字数
           {if(Word_Number<4)		//若未显示完“前方到站”
              {for(m=0;m<32;m++)
                   next[m]=QFDZ[Word_Number][m];}		//依次换字显示“前方到站”
            else					//若显示完“前方到站”
              for(m=0;m<32;m++)
                  next[m]=State2[Word_Number-4][m];		//依次换字显示“第2站”
            Word_Number++;}			//显示字数+1
         else						//若全部显示完
           Word_Number=0;			//显示字数清0;
         break;
       case 3:					//若为“第3站”
         if(Word_Number<7)		//判断已显示字数
           {if(Word_Number<4)		//若未显示完“前方到站”
              {for(m=0;m<32;m++)
               next[m]=QFDZ[Word_Number][m];}		//依次换字显示“前方到站”
            else					//若显示完“前方到站”
              for(m=0;m<32;m++)
                  next[m]=State1[Word_Number-4][m];		//依次换字显示“第1站”
            Word_Number++;}			//显示字数+1
         else						//若全部显示完
           Word_Number=0;			//显示字数清0
         break;
       case 4:					//若为“第4站”
         if(Word_Number<7)		//判断已显示字数
           {if(Word_Number<4)		//若未显示完“前方到站”
              {for(m=0;m<32;m++)
                   next[m]=QFDZ[Word_Number][m];}		//依次换字显示“前方到站”
            else					//若显示完“前方到站”
              for(m=0;m<32;m++)
                  next[m]=State2[Word_Number-4][m];		//依次换字显示“第2站”
            Word_Number++;}			//显示字数+1
         else						//若全部显示完
           Word_Number=0;			//显示字数清0;
         break;

⌨️ 快捷键说明

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