📄 rs_main.lst
字号:
CX51 COMPILER x7.00 RS_MAIN 05/07/2006 20:40:55 PAGE 1
CX51 COMPILER V7.00, COMPILATION OF MODULE RS_MAIN
OBJECT MODULE PLACED IN RS_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\CX51.EXE RS_Main.c DB OE SMALL ROM(LARGE)
stmt level source
1
2 #include <REG51.H>
3
4 //定义端口资源
5
6 sbit Control_1 = P1^0; /* 输出到光耦,低电平选通*/
7 sbit Control_2 = P1^2; /* 输出到光耦,低电平选通*/
8 sbit Control_3 = P1^4; /* 输出到光耦,低电平选通*/
9 sbit Control_4 = P1^6; /* 输出到光耦,低电平选通*/
10
11 sbit Control_LED1 = P1^1; /* 输出到发光二极管,低电平点亮*/
12 sbit Control_LED2 = P1^3; /* 输出到发光二极管,低电平点亮*/
13 sbit Control_LED3 = P1^5; /* 输出到发光二极管,低电平点亮*/
14 sbit Control_LED4 = P1^7; /* 输出到发光二极管,低电平点亮*/
15
16 sbit BUZZER_Control = P3^6; /* 蜂鸣器,低电平蜂鸣*/
17
18 sbit RUN_LED = P3^7; /* 运行指示LED */
19
20
21 //键盘编码
22
23 #define KEY_SHIFT 0x06
24 #define KEY_TONE 0x16
25 #define KEY_POWER 0x86
26 #define KEY_1 0x7E
27 #define KEY_2 0x2E
28 #define KEY_3 0x26
29 #define KEY_4 0x5E
30 #define KEY_5 0x6E
31 #define KEY_6 0x56
32 #define KEY_7 0x9E
33 #define KEY_8 0xAE
34 #define KEY_9 0xB6
35 #define KEY_0 0xBE
36 #define KEY_ESC 0x96
37 #define KEY_DEC 0xDE
38 #define KEY_OK 0x8E
39 #define KEY_INC 0xCE
40
41
42 void Main_Initlization( void ); /* 主初始化程序*/
43 void Interrupt_INT0( void ); /* 遥控解码*/
44 void Interrupt_INT1( void ); /* 10ms定时脉冲中断*/
45 void Interrupt_T0( void ); /* 遥控解码*/
46 void Interrupt_T1( void ); /* PWM 定时器*/
47
48 void KEY_Process( void ); /* 遥控按键解码*/
49
50 void APP_Initlization( void ); /* 应用程序初始化*/
51
52 void CH_LED_Control( void ); /* 通道指示灯*/
53 void CH_Power_ON( void ); /* 电源控制*/
54 void RUN_LED_Control( void ); /* 运行指示灯控制*/
55 unsigned char VOL_INC( unsigned char VOL ); /* 通道功率增加*/
CX51 COMPILER x7.00 RS_MAIN 05/07/2006 20:40:55 PAGE 2
56 unsigned char VOL_DEC( unsigned char VOL ); /* 通道功率减小*/
57
58 /* 遥控器解码变量定义*/
59 bit KEY_DECODE_OK; /* 遥控器解码成功标志*/
60 bit Fresh_KEY_Flag; /* 首次按键标志*/
61 unsigned char KEY_DECODE; /* 解码后的键值*/
62
63 unsigned char RS_Index; /* 当前遥控码位置*/
64 unsigned char RS_High; /* 遥控器解码定时器高位*/
65 unsigned long RS_Decode; /* 解码数据*/
66
67 union URS_CODE /* 遥控码解码数据*/
68 { /* 格式:设备码1E,设备反码E1*/
69 unsigned char KEY[4]; /* 数据码,数据反码,32bit */
70 unsigned long FULL_KEY;
71 } RS_CODE;
72
73 /* PWM 信号发生脉冲变量定义*/
74 unsigned char TimeSlot; /* PWM定时器*/
75 unsigned char CH_Vol[4]; /* 通道音量数据*/
76 unsigned char Current_CH; /* 当前遥控控制通道选择0~3*/
77
78 bit POWER_FLAG; /* 电源总开关标志*/
79
80 #define PWM_INIT 200 /* 初始计数值*/
81 #define VOL_MAX PWM_INIT-2 /* 最大值,越大,功率越大*/
82 #define VOL_MIN VOL_MAX-40 /* 最小值,越小,功率越低*/
83 #define VOL_INIT VOL_MIN + 10 /* 初始亮度*/
84
85 #define IDLE_Cnt 3 /* 空闲时间,确定新键按下*/
86
87 unsigned char P1_Mirror; /* P1口镜像寄存器*/
88 unsigned char LED_Mirror; /* LED镜像寄存器*/
89
90 /* 系统处理变量定义*/
91 bit System_Timer; /* 系统10ms定时标志,来自100Hz中断*/
92 bit Timer_Flag; /* 10ms定时器标志*/
93
94 unsigned char LED_FLASH_Cnt; /* LED闪烁定时器*/
95 unsigned char PRE_KEY; /* 前一个按键数据*/
96
97 /********************************************************************/
98 /* 主程序 */
99 /********************************************************************/
100 void main( void )
101 {
102 1 Main_Initlization( ); /* 主初始化程序*/
103 1 APP_Initlization( ); /* 应用程序初始化*/
104 1
105 1 while( 1 )
106 1 {
107 2 KEY_Process( ); /* 键盘处理*/
108 2 CH_LED_Control( ); /* 通道指示灯*/
109 2
110 2
111 2 /* 定时器服务*/
112 2 if( System_Timer )
113 2 {
114 3 System_Timer = 0;
115 3 Timer_Flag = 1;
116 3 }
117 2
CX51 COMPILER x7.00 RS_MAIN 05/07/2006 20:40:55 PAGE 3
118 2 /* RUN_LED闪灯程序,正常1s闪烁一次,遥控解码时,快速闪烁*/
119 2
120 2 RUN_LED_Control( );
121 2
122 2 if( Timer_Flag )
123 2 Timer_Flag = 0;
124 2 }
125 1 }
126
127 /********************************************************************/
128 /* 遥控按键解码处理程序 */
129 /********************************************************************/
130 void KEY_Process( void ) /* 遥控按键解码*/
131 {
132 1 if( KEY_DECODE_OK )
133 1 {
134 2 KEY_DECODE_OK = 0; /* 处理结束*/
135 2
136 2 switch( KEY_DECODE ) /* 根据键值散转*/
137 2 {
138 3 /* 电源总开关控制*/
139 3 case KEY_POWER: if( Fresh_KEY_Flag )
140 3 {
141 4 POWER_FLAG = !POWER_FLAG;
142 4 if( POWER_FLAG )
143 4 CH_Power_ON( );
144 4 }
145 3 break;
146 3 /* 通道电源功率增加*/
147 3 case KEY_INC: if( POWER_FLAG )
148 3 {
149 4 if( Current_CH == 0 ) /* 所有通道*/
150 4 {
151 5 CH_Vol[ 0 ] = VOL_INC( CH_Vol[ 0 ] );
152 5 CH_Vol[ 1 ] = VOL_INC( CH_Vol[ 1 ] );
153 5 CH_Vol[ 2 ] = VOL_INC( CH_Vol[ 2 ] );
154 5 CH_Vol[ 3 ] = VOL_INC( CH_Vol[ 3 ] );
155 5 }
156 4 else
157 4 CH_Vol[ Current_CH -1 ] = VOL_INC( CH_Vol[ Current_CH -1 ] );
158 4 }
159 3 break;
160 3 /* 通道电源功率减小*/
161 3 case KEY_DEC: if( POWER_FLAG )
162 3 {
163 4 if( Current_CH == 0 ) /* 所有通道*/
164 4 {
165 5 CH_Vol[ 0 ] = VOL_DEC( CH_Vol[ 0 ] );
166 5 CH_Vol[ 1 ] = VOL_DEC( CH_Vol[ 1 ] );
167 5 CH_Vol[ 2 ] = VOL_DEC( CH_Vol[ 2 ] );
168 5 CH_Vol[ 3 ] = VOL_DEC( CH_Vol[ 3 ] );
169 5 }
170 4 else
171 4 CH_Vol[ Current_CH -1 ] = VOL_DEC( CH_Vol[ Current_CH -1 ] );
172 4 }
173 3 break;
174 3 /* 遥控控制通道切换,循环切换*/
175 3 case KEY_TONE: if( Fresh_KEY_Flag )
176 3 {
177 4 Current_CH ++;
178 4 if( Current_CH > 4 )
179 4 Current_CH = 1;
CX51 COMPILER x7.00 RS_MAIN 05/07/2006 20:40:55 PAGE 4
180 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -