C51 COMPILER V7.06 STEP 04/27/2020 09:49:02 PAGE 1 C51 COMPILER V7.06, COMPILATION OF MODULE STEP OBJECT MODULE PLACED IN step.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE step.c BROWSE DEBUG OBJECTEXTEND stmt level source 1 /*此程序是针对uPD6121系列遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效*/ 2 /******************************************************************************/ 3 /* 项目名称 : TX-1C扩展板 红外遥控器控制步进电机 */ 4 /* 主控芯片 : STC89C52 */ 5 /* 文件名称 : Inf_StepMotor */ 6 /* 文件功能 : 主函数 */ 7 /* 文件版权 : 天祥电子 */ 8 /* 文件版本 : */ 9 /******************************************************************************/ 10 /**********************************包含头文件**********************************/ 11 #include 12 /********************************定义变量和数组********************************/ 13 uchar Im[4] = {0x00,0x00,0x00,0x00}; 14 uchar f, IrOK; 15 uint Tc; 16 uchar code step_table1[] = {0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};//电机4拍拍数 17 uchar step_table2[] = {0x00}; 18 uchar maichong = 0,table_begin = 0; //maichong步进电机速度档4为最慢 1为最快 19 //table_begin是table1数组开始位置 20 //table_begin=0正转 table_begin=4反转 21 //table1[0]-[3]为正转拍数 22 //table1[4]-[7]为反转拍数 23 uchar Start_Flag = 0; //启动标志 0为停止 1为启动 24 /******************************************************************************/ 25 /* 函数名称 : delay */ 26 /* 函数描述 : 延时函数 */ 27 /* 输入参数 : 无 */ 28 /* 参数描述 : 无 */ 29 /* 返回值 : 无 */ 30 /******************************************************************************/ 31 void step_delay(uchar i) 32 { 33 1 uchar j,k; 34 1 for(j = i;j > 0;j--) 35 1 { 36 2 for(k = 125;k > 0;k--); 37 2 } 38 1 } 39 /******************************************************************************/ 40 /* 函数名称 : display */ 41 /* 函数描述 : 显示函数函数 */ 42 /* 输入参数 : 无 */ 43 /* 参数描述 : 无 */ 44 /* 返回值 : 无 */ 45 /******************************************************************************/ 46 void step_display() 47 { 48 1 dula = 0; 49 1 if(maichong == 0) //开机maichong=0 显示0 50 1 { 51 2 P0=seg_table[0]; 52 2 dula = 1; 53 2 dula = 0; 54 2 55 2 P0 = 0xfd; C51 COMPILER V7.06 STEP 04/27/2020 09:49:02 PAGE 2 56 2 wela = 1; 57 2 wela = 0; 58 2 step_delay(5); 59 2 } 60 1 else //遥控器调整档位后maichong不为0 61 1 { 62 2 P0 = seg_table[5 - maichong]; //显示档位maichong=1 对应4档 63 2 dula = 1; 64 2 dula = 0; 65 2 66 2 wela = 0; 67 2 P0 = 0xfd; 68 2 wela = 1; 69 2 wela = 0; 70 2 step_delay(10); 71 2 72 2 P0 = step_table2[0]; //反转时显示"-" 73 2 dula = 1; 74 2 dula = 0; 75 2 76 2 wela = 0; 77 2 P0 = 0xfe; 78 2 wela = 1; 79 2 wela = 0; 80 2 step_delay(10); 81 2 } 82 1 } 83 /******************************************************************************/ 84 /* 函数名称 : Motor_Driver */ 85 /* 函数描述 : 电机驱动函数 */ 86 /* 输入参数 : 无 */ 87 /* 参数描述 : 无 */ 88 /* 返回值 : 无 */ 89 /******************************************************************************/ 90 void Motor_Driver(void) 91 { 92 1 uchar i,j; 93 1 for(j= 0 + table_begin;j < 4 + table_begin;j++) 94 1 { 95 2 P1 = (step_table1[j]&0x0f)|(P1&0xf0); 96 2 for(i = 0;i < maichong;i++) 97 2 { 98 3 step_display(); 99 3 } 100 2 } 101 1 } 102 /******************************************************************************/ 103 /* 函数名称 : Inf_Dispose */ 104 /* 函数描述 : 红外接收处理函数 */ 105 /* 输入参数 : 无 */ 106 /* 参数描述 : 无 */ 107 /* 返回值 : 无 */ 108 /******************************************************************************/ 109 void Inf_Dispose(void) 110 { 111 1 if(IrOK == 1) 112 1 { 113 2 switch(Im[2]) 114 2 { 115 3 case 0x0c: //遥控器1键按下 调为1档 116 3 maichong = 4; 117 3 break; C51 COMPILER V7.06 STEP 04/27/2020 09:49:02 PAGE 3 118 3 119 3 case 0x18: //遥控器2键按下 调为2档 120 3 maichong = 3; 121 3 break; 122 3 123 3 case 0x5e: //遥控器3键按下 调为3档 124 3 maichong = 2; 125 3 break; 126 3 127 3 case 0x08: //遥控器4键按下 调为4档 128 3 maichong = 1; 129 3 break; 130 3 131 3 case 0x44: //遥控器 开始/停止 键按下 启动停止控制 132 3 Start_Flag =~ Start_Flag; 133 3 break; 134 3 135 3 case 0x43: //遥控器 |<< 键按下 正转 136 3 if( maichong != 0) //不是0档的时候设置正反转 137 3 { 138 4 table_begin = 0; 139 4 step_table2[0] = 0; //数码管不显示 140 4 } 141 3 break; 142 3 143 3 case 0x40: //遥控器 >>| 键按下 反转 144 3 145 3 if( maichong != 0) //不是0档的时候设置正反转 146 3 { 147 4 table_begin = 4; 148 4 step_table2[0] = 0x40; //"-"码 149 4 } 150 3 break; 151 3 152 3 default: 153 3 break; 154 3 } 155 2 IrOK = 0; 156 2 } 157 1 } 158 /******************************************************************************/ 159 /* 函数名称 : main */ 160 /* 函数描述 : 主函数 */ 161 /* 输入参数 : 无 */ 162 /* 参数描述 : 无 */ 163 /* 返回值 : 无 */ 164 /******************************************************************************/ 165 void step_main(void) 166 { 167 1 system_init(); 168 1 step_m = 0; 169 1 relay = 0; 170 1 f = 0; 171 1 EA = 1; 172 1 IT1 = 1; 173 1 ES = 1; 174 1 EX1 = 1; 175 1 TMOD=0x21; 176 1 TH0 = 0; 177 1 TL0 = 0; 178 1 TR0 = 1; 179 1 diola = 1; C51 COMPILER V7.06 STEP 04/27/2020 09:49:02 PAGE 4 180 1 while(message=='b') 181 1 { 182 2 Inf_Dispose(); //红外接收处理 183 2 if(Start_Flag) //如果允许电机启动 184 2 { 185 3 Motor_Driver(); //电机驱动 186 3 } 187 2 else //如果不允许电机启动 188 2 { 189 3 P1 &= 0xf0; //不给电机输出脉冲 190 3 step_display(); //显示 191 3 } 192 2 } 193 1 } 194 /******************************************************************************/ MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 306 ---- CONSTANT SIZE = 8 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 12 ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)