C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 1 C51 COMPILER V9.54, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\Objects\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main -.lst) TABS(2) OBJECT(.\Objects\main.obj) line level source 1 #include "drive_1602.h" 2 #include "string.h" 3 #include "stdio.h" 4 5 6 #define uint unsigned int 7 #define uchar unsigned char 8 9 /* 10 采用5V USB电路供电 11 可以实现语音停止和开启风扇 12 实现语音调速风扇 13 调速等级高低各3级 14 15 */ 16 sbit SW1=P3^7; 17 sbit SW2=P3^6; 18 sbit SW3=P3^5; 19 20 21 sbit fun=P3^3;//风扇io 22 23 uchar temp,humi; 24 int JCount=0; 25 26 void delay_xms(int xms) 27 { 28 1 char ix=0; 29 1 for(;xms>0;xms--) 30 1 for(ix=110;ix>0;ix--); 31 1 } 32 uchar SET=0; 33 bit keyflag=0; 34 35 bit openflag=0;//开启标志位 36 uchar dw_val=3;//挡位值 37 int pwm_cnt=0; 38 #define pwm_max 1000 39 int set_pwm=pwm_max; 40 41 void KeyRead(void) 42 { 43 1 if(!SW1) 44 1 { 45 2 if(!SW1&&keyflag==0) 46 2 { 47 3 keyflag=1; 48 3 openflag^=1; 49 3 while(!SW1); 50 3 } 51 2 } 52 1 else if(!SW2) 53 1 { 54 2 if(!SW2&&keyflag==0) C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 2 55 2 { 56 3 keyflag=1; 57 3 if(++dw_val>3)dw_val=1; 58 3 while(!SW2); 59 3 } 60 2 } 61 1 62 1 else if(!SW3) 63 1 { 64 2 if(!SW3&&keyflag==0) 65 2 { 66 3 keyflag=1; 67 3 if(dw_val>1)dw_val--; 68 3 } 69 2 } 70 1 else 71 1 { 72 2 keyflag=0; 73 2 } 74 1 75 1 76 1 } 77 78 void Timer0Init(void) //10毫秒@11.0592MHz 79 { 80 1 81 1 TMOD &= 0xF0; //设置定时器模式 82 1 TMOD |= 0x01; //设置定时器模式 83 1 TL0 = 0x00; //设置定时初值 84 1 TH0 = 0xDC; //设置定时初值 85 1 TF0 = 0; //清除TF0标志 86 1 ET0=1; 87 1 TR0 = 1; //定时器0开始计时 88 1 EA=1; 89 1 90 1 } 91 92 uchar get_key=0; 93 void TimeISR()interrupt 1 94 { 95 1 TL0 = 0x66; //设置定时初值 96 1 TH0 = 0xFC; //设置定时初值 1ms 97 1 if(++get_key>10) 98 1 { 99 2 get_key=0; 100 2 KeyRead(); 101 2 } 102 1 pwm_cnt++; 103 1 if(pwm_cnt>=pwm_max) 104 1 { 105 2 pwm_cnt=0; 106 2 107 2 } 108 1 if(pwm_cnt>set_pwm) 109 1 { 110 2 fun=1; 111 2 } 112 1 else 113 1 { 114 2 fun=0; 115 2 } 116 1 JCount++; C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 3 117 1 } 118 119 void UartInit(void) //9600bps@11.0592MHz 120 { 121 1 PCON &= 0x7F; //波特率不倍速 122 1 SCON = 0x50; //8位数据,可变波特率 123 1 TMOD &= 0x0F; //清除定时器1模式位 124 1 TMOD |= 0x20; //设定定时器1为8位自动重装方式 125 1 TL1 = 0xFD; //设定定时初值 126 1 TH1 = 0xFD; //设定定时器重装值 127 1 ET1 = 0; //禁止定时器1中断 128 1 TR1 = 1; //启动定时器1 129 1 EA=1; 130 1 ES=0; 131 1 } 132 133 134 void sendData(char *p,unsigned char n) 135 { 136 1 if( p == 0) return ; 137 1 ES = 0; 138 1 if(n > 0) 139 1 { 140 2 while(n --) 141 2 { 142 3 SBUF = *p++ ; 143 3 while(!TI) ; 144 3 TI = 0 ; 145 3 } 146 2 } 147 1 // ES = 1; 148 1 } 149 150 151 152 // 往串口发送字符串 153 void sendString(char *p) 154 { 155 1 if(p == 0) return ; 156 1 sendData(p,strlen(p)); 157 1 } 158 uchar rxdat=0; 159 // 接收中断函数 160 void usart() interrupt 4 161 { 162 1 if(RI == 1) 163 1 { 164 2 rxdat=SBUF; 165 2 switch(rxdat) 166 2 { 167 3 case 0x5a: 168 3 openflag^=1; 169 3 break; 170 3 171 3 case 0x65: 172 3 if(++dw_val>3)dw_val=1; 173 3 break; 174 3 175 3 case 0x78: 176 3 if(dw_val>1)dw_val--; 177 3 break; 178 3 } C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 4 179 2 // setUsartRxData(SBUF); 180 2 } 181 1 RI = 0; 182 1 TI = 0; 183 1 } 184 185 186 187 void main() 188 { 189 1 lcd1602_init(); 190 1 UartInit(); 191 1 delay_xms(200); 192 1 Timer0Init(); 193 1 while(1) 194 1 { 195 2 196 2 if(JCount>500)//500ms采集一次 197 2 { 198 3 JCount=0; 199 3 if(openflag) 200 3 { 201 4 L1602_printf(0,0,"FUN:ON"); 202 4 switch(dw_val) 203 4 { 204 5 case 1: 205 5 set_pwm=300; 206 5 break; 207 5 208 5 case 2: 209 5 set_pwm=700; 210 5 break; 211 5 212 5 case 3: 213 5 set_pwm=pwm_max; 214 5 break; 215 5 } 216 4 217 4 218 4 }else 219 3 { 220 4 L1602_printf(0,0,"FUN:OFF"); 221 4 } 222 3 L1602_printf(0,1,"Gears:%d",dw_val); 223 3 } 224 2 } 225 1 226 1 227 1 228 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 499 ---- CONSTANT SIZE = 24 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 12 6 IDATA SIZE = ---- ---- BIT SIZE = 2 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)