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

📄 video_4360.lst

📁 4360音频切换
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.05   VIDEO_4360                                                            05/21/2007 16:31:21 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE VIDEO_4360
OBJECT MODULE PLACED IN video_4360.OBJ
COMPILER INVOKED BY: C:\silabs\IDEfiles\C51\BIN\C51.exe video_4360.c DB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF VIDEO_4360.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          /***********************************************
   2          数字法庭 从MCU(前面板) 的源程序。
   3          
   4          一、功能:
   5          1. 监视MID[7..0],每根线在没声音输入时为高,在有声音时为低;
   6             法官的输入为高优先级,可以随时打断他人的发言,其他人只
   7             有在没人发言时才能发言。
   8          2. 发言者的改变用I2C传给主MCU(F015/tw2824)。从MCU(231/221,
   9             模拟I2C)为I2C的主机,发起时钟,控制数据通信。
  10          3. 发言的停止判断是靠1秒内没有发声来判断。系统判定那路发言,
  11             把视频输入切入到那路,没有人发言时,切到全景。
  12          
  13          二、检测算法:
  14                  检测管脚是否为低,为低在其记数器上加1;开一个硬件定时器
  15                  time0,每隔一次定时器溢出,检查记数器的数字是否达到预定
  16                  的标准,到了则认为有效。
  17          
  18          三、晶振:
  19                  用片内的,8MHz。
  20          
  21          四、修改:
  22                  改用新的音视频分开的板子,SPI改成I2C,
  23          ************************************************/
  24          
  25          #include <C8051F200.H>
  26          //#include <intrins.h>
  27          
  28          #define uchar unsigned char
  29          #define uint  unsigned int
  30          
  31          #define FG_OUT       500        //持续无声时间换成溢出的次数    
  32          #define SOUND_COUNT  5
  33          #define CHECK_TIME   10         //定时器0溢出一次的时间,12分频.单位毫秒。
  34          #define FOSC             1900   //时钟频率,以KHz为单位。
  35          
  36          #define I2C_COUNTSUM  7         //定时器溢出的次数,满足后,I2C主接收操作
  37          
  38          
  39          //=========================video================
  40          sbit  LOAD = P1^5;
  41          sbit   VWR = P1^6;
  42          sbit LATCH = P1^7;
  43          sbit   VA0 = P2^4;
  44          sbit   VA1 = P2^5;
  45          
  46          //===============================================
  47          
  48          sbit MID1=P1^0; //JA1_2         法官1   高优先级
  49          sbit MID2=P1^1; //JA3_4         法官2   高优先级
  50          sbit MID3=P1^2; //JA5_6         原告
  51          sbit MID4=P1^3; //JA7_8         被告
  52          sbit MID5=P1^4; //JA9           嫌疑人
  53          sbit MID6=P1^5; //JA10          证人
  54          sbit MID7=P1^6; //JA11          取证
C51 COMPILER V7.05   VIDEO_4360                                                            05/21/2007 16:31:21 PAGE 2   

  55          //sbit MID8=P1^7; //JA12        书记员  没有对应视频,不参与视频切换。
  56          
  57          //=========================I2C================
  58          sbit i2c_sda=P0^2;
  59          sbit i2c_scl=P0^3;
  60          
  61          uchar count_i2c = 0;
  62          uchar data_i2c = 0;
  63          uchar data_i2c_bak = 0;
  64          uchar data_i2c_test = 0;
  65          bit     OK_i2cflag=0;//i2C操作成功标志 ,1,成功;0,失败
  66          
  67          //=========================audio================
  68          uchar count_mid1,count_mid2,count_mid3,count_mid4;
  69          uchar count_mid5,count_mid6,count_mid7;
  70          
  71          uint count_fg,count_bg;
  72          uchar input_state;
  73          //****************************函数原型说明
  74          void delay( uint num ); //延时程序
  75          
  76          //****************audio
  77          //void send_state(void);
  78          
  79          //**************I2C操作子程序
  80          void i2c_start(void);   //发送起始位
  81          void i2c_stop(void);    //发送停止位
  82          uchar i2c_sack(void);   //应答位检查,正常返回0,不正常返回1
  83          
  84          //bit i2c_sack1(void);
  85          uchar IICReceiveByte(void);
  86          
  87          void IICNoAck(void);
  88          void IICSendByte(uchar sendbyte);
  89          
  90          
  91          
  92          
  93          //***************4460 控制子程序
  94          void init_4460(void);
  95          void cmd_4460(uchar dat);
  96          void test_4460(void);
  97          void test_4460(void);
  98          void set_4460_A(uchar inch);//A1A0=00, inch= 0-6
  99          void set_4460_B(uchar inch);//A1A0=01, inch= 0-6
 100          
 101          
 102          
 103          
 104          //**************I2C-4460控制程序
 105          
 106          void I2C_handle_read(void);
 107          void I2C_cmd_4460(void);
 108          void I2C_data_handle(void);
 109          void I2C_handle(void);
 110          
 111          
 112          
 113          ///////////////////////////////////////////
 114          void delay( uint num )
 115          {
 116   1              while( num-- );
C51 COMPILER V7.05   VIDEO_4360                                                            05/21/2007 16:31:21 PAGE 3   

 117   1      }
 118          //////////////////////////////////////////////
 119          
 120          /*****************以下是对IIC总线的操作子程序***/
 121          
 122          /*****************启动总线**********************/
 123          void i2c_start(void)    //发送起始位
 124          {
 125   1              i2c_sda=1;
 126   1              i2c_scl=1;
 127   1              delay(5);
 128   1              i2c_sda=0;
 129   1              delay(5);
 130   1              i2c_scl=0;
 131   1              delay(5);       
 132   1      }
 133          
 134          void i2c_stop(void)     //发送停止位
 135          {
 136   1              i2c_sda=0;
 137   1              i2c_scl=1;
 138   1              delay(5);
 139   1              i2c_sda=1;
 140   1              delay(5);
 141   1              i2c_scl=0;
 142   1              delay(5);       
 143   1      }
 144          
 145          uchar i2c_sack(void)    //应答位检查,正常返回0,不正常返回1
 146          {
 147   1              uchar i;        
 148   1              i2c_sda=1;
 149   1              i2c_scl=1;
 150   1              delay(5);
 151   1      
 152   1              if(i2c_sda)     i=1;    
 153   1              else            i=0;
 154   1                      
 155   1              i2c_scl=0;
 156   1              return(i);              
 157   1      }
 158          
 159          
 160          /*
 161          // **************检查应答位*******************
 162          bit i2c_sack1(void)
 163          {
 164          i2c_scl=0;
 165          i2c_sda=1;
 166          i2c_scl=1;
 167          _nop_();
 168          _nop_();
 169          _nop_();
 170          _nop_();
 171          CY=i2c_sda;                 //因为返回值总是放在CY中的
 172          i2c_scl=0;
 173          return(CY);
 174          }
 175          */
 176          
 177          // *****************不对IIC总线产生应答***************
 178          void IICNoAck(void)
C51 COMPILER V7.05   VIDEO_4360                                                            05/21/2007 16:31:21 PAGE 4   

 179          {
 180   1              i2c_sda=1;
 181   1              i2c_scl=1;
 182   1              delay(5);
 183   1              i2c_scl=0;
 184   1      }
 185          
 186          
 187          /*
 188          void send_state(void)
 189          { //用IO模拟一个I2C口,主模式。把input_state发给C8051F021
 190                  EA = 0;
 191                  loop1:  i2c_start();
 192              i2c_write_byte(0x40);               
 193              if( i2c_sack() )goto loop1;
 194              i2c_write_byte(input_state);                
 195              if( i2c_sack() )goto loop1;
 196              i2c_stop();                         
 197                  EA = 1;
 198          }
 199          */
 200          
 201          /*******************向IIC总线写数据*********************/
 202          void IICSendByte(uchar sendbyte)
 203          {
 204   1      uchar data j=8;
 205   1      for(;j>0;j--)
 206   1         {
 207   2         i2c_scl=0;
 208   2         sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
 209   2         i2c_sda=CY;
 210   2         i2c_scl=1;
 211   2         }
 212   1      i2c_scl=0;
 213   1      }
 214          
 215          /**********************从IIC总线上读数据子程序**********/
 216          uchar IICReceiveByte(void)
 217          {
 218   1              uchar i=8;
 219   1              uchar dat=0;
 220   1              i2c_scl=0;
 221   1              while(i--)
 222   1              {
 223   2                      i2c_scl=1;
 224   2                      dat=(dat<<1)|i2c_sda;
 225   2                      i2c_scl=0;
 226   2              }
 227   1              
 228   1              return (dat);
 229   1      }
 230          
 231          void init_4460(void)
 232          {
 233   1              VWR=0;
 234   1              LATCH=0;
 235   1              LOAD=1;
 236   1              cmd_4460(0xd0); //全关
 237   1      
 238   1      
 239   1      }
 240          //==================4460 视频矩阵切换控制程序
C51 COMPILER V7.05   VIDEO_4360                                                            05/21/2007 16:31:21 PAGE 5   

 241          
 242          void cmd_4460(uchar dat)
 243          {
 244   1      VWR=0;
 245   1      //===================vin1 to vout1-4
 246   1      P0=dat;
 247   1      delay(10);
 248   1      VWR=1;
 249   1      delay(10);
 250   1      
 251   1      }
 252          
 253          //视频矩阵切换芯片4460 初始化
 254          
 255          
 256          
 257          
 258          
 259          void set_4460_A(uchar inch)
 260          {

⌨️ 快捷键说明

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