📄 video_4360.lst
字号:
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 + -