123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- 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)
|