C51 COMPILER V8.02 BIAOJUE 06/25/2010 13:35:57 PAGE 1 C51 COMPILER V8.02, COMPILATION OF MODULE BIAOJUE OBJECT MODULE PLACED IN biaojue.OBJ COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE biaojue.c BROWSE DEBUG OBJECTEXTEND line level source 1 /********************************************************************************* 2 “天祥电子” 倾情奉献 3 4 www.txmcu.cn 5 www.txmcu.com 6 7 ********************************************************************************** 8 9 程序功能:表决器,模拟三位评委的表决,并做出判断,将结果显示于1602上。 10 共用到TX-1C学习板上左二列的S6,S7,S10,S11,S14,S15,S18七个按键。 11 其中S18为清零键,对1602进行清屏和对相关变量清零。 12 每位评委操控两个按键,分别代表“通过”和“不通过”。 13 第一位评委控制S6(通过)与S7(不通过); 14 第二位评委控制S10(通过)与S11(不通过); 15 第三位评委控制S14(通过)与S15(不通过); 16 当按“通过”次数多于“不通过”时,1602将显示“yes”,否则显示“no”。 17 在一个回合中,每位评委只有一次按键的权利,一旦按下,其操控的两个 18 按键均将被封锁,再按也不会有任何作用。除非按下清零键S18清零后开始下一回合。 19 20 ************************************************************************************/ 21 22 #include 23 #define uchar unsigned char 24 #define uint unsigned int 25 sbit dula=P2^6; 26 sbit wela=P2^7; 27 sbit rs=P3^5; 28 sbit beep=P2^3; 29 sbit lcden=P3^4; 30 31 bit ok1,ok2,ok3,clear; 32 33 uchar pass,nopass,temp; 34 uchar table[]="yes"; 35 uchar table1[]="no"; 36 uchar table2[]="agree"; 37 uchar table3[]="disagree"; 38 uchar table4[]=" "; 39 uchar table5[]=" "; 40 41 void delay(uint z) 42 { 43 1 uint x,y; 44 1 for(x=z;x>0;x--) 45 1 for(y=110;y>0;y--); 46 1 } 47 48 49 50 void write_com(uchar com) 51 { 52 1 rs=0; 53 1 lcden=0; 54 1 P0=com; 55 1 delay(5); C51 COMPILER V8.02 BIAOJUE 06/25/2010 13:35:57 PAGE 2 56 1 lcden=1; 57 1 delay(5); 58 1 lcden=0; 59 1 } 60 61 void write_date(uchar date) 62 { 63 1 rs=1; 64 1 lcden=0; 65 1 P0=date; 66 1 delay(5); 67 1 lcden=1; 68 1 delay(5); 69 1 lcden=0; 70 1 } 71 72 73 74 void init() 75 { 76 1 // uchar a; 77 1 dula=0; 78 1 wela=0; 79 1 write_com(0x38); 80 1 delay(20); 81 1 write_com(0x0c); 82 1 delay(20); 83 1 write_com(0x06); 84 1 delay(20); 85 1 write_com(0x01); 86 1 delay(20); 87 1 88 1 } 89 90 void yes() 91 { 92 1 uchar a; 93 1 write_com(0x80+12); 94 1 delay(20); 95 1 for(a=0;a<3;a++) 96 1 { 97 2 write_date(table[a]); 98 2 delay(20); 99 2 } 100 1 } 101 102 void no() 103 { 104 1 uchar a; 105 1 write_com(0x80+0x40+12); 106 1 delay(20); 107 1 for(a=0;a<2;a++) 108 1 { 109 2 write_date(table1[a]); 110 2 delay(20); 111 2 } 112 1 } 113 114 void agree() 115 { 116 1 uchar a; 117 1 write_com(0x80); C51 COMPILER V8.02 BIAOJUE 06/25/2010 13:35:57 PAGE 3 118 1 delay(20); 119 1 for(a=0;a<5;a++) 120 1 { 121 2 write_date(table2[a]); 122 2 delay(20); 123 2 } 124 1 } 125 126 void disagree() 127 { 128 1 uchar a; 129 1 write_com(0x80+0x40); 130 1 delay(20); 131 1 for(a=0;a<8;a++) 132 1 { 133 2 write_date(table3[a]); 134 2 delay(20); 135 2 } 136 1 } 137 138 void keyscan() 139 { 140 1 if(!ok1) 141 1 { 142 2 P3=0xfe; 143 2 temp=P3; 144 2 temp=temp&0xf0; 145 2 if(temp!=0xf0) 146 2 { 147 3 delay(10); 148 3 if(temp!=0xf0) 149 3 { 150 4 temp=P3; 151 4 switch(temp) 152 4 { 153 5 case 0xee: 154 5 pass++; 155 5 ok1=1; //一号评委已判决。 156 5 break; 157 5 158 5 case 0xde: 159 5 nopass++; 160 5 ok1=1; 161 5 break; 162 5 } 163 4 while(temp!=0xf0) 164 4 { 165 5 temp=P3; 166 5 temp=temp&0xf0; 167 5 beep=0; 168 5 } 169 4 beep=1; 170 4 } 171 3 } 172 2 } 173 1 if(!ok2) 174 1 { 175 2 P3=0xfd; 176 2 temp=P3; 177 2 temp=temp&0xf0; 178 2 if(temp!=0xf0) 179 2 { C51 COMPILER V8.02 BIAOJUE 06/25/2010 13:35:57 PAGE 4 180 3 delay(10); 181 3 if(temp!=0xf0) 182 3 { 183 4 temp=P3; 184 4 switch(temp) 185 4 { 186 5 case 0xed: 187 5 pass++; 188 5 ok2=1; 189 5 break; 190 5 191 5 case 0xdd: 192 5 nopass++; 193 5 ok2=1; 194 5 break; 195 5 } 196 4 while(temp!=0xf0) 197 4 { 198 5 temp=P3; 199 5 temp=temp&0xf0; 200 5 beep=0; 201 5 } 202 4 beep=1; 203 4 } 204 3 } 205 2 } 206 1 if(!ok3) 207 1 { 208 2 P3=0xfb; 209 2 temp=P3; 210 2 temp=temp&0xf0; 211 2 if(temp!=0xf0) 212 2 { 213 3 delay(10); 214 3 if(temp!=0xf0) 215 3 { 216 4 temp=P3; 217 4 switch(temp) 218 4 { 219 5 case 0xeb: 220 5 pass++; 221 5 ok3=1; 222 5 break; 223 5 224 5 case 0xdb: 225 5 nopass++; 226 5 ok3=1; 227 5 break; 228 5 } 229 4 while(temp!=0xf0) 230 4 { 231 5 temp=P3; 232 5 temp=temp&0xf0; 233 5 beep=0; 234 5 } 235 4 beep=1; 236 4 } 237 3 } 238 2 } 239 1 P3=0xf7; 240 1 temp=P3; 241 1 temp=temp&0xf0; C51 COMPILER V8.02 BIAOJUE 06/25/2010 13:35:57 PAGE 5 242 1 if(temp!=0xf0) 243 1 { 244 2 delay(10); 245 2 if(temp!=0xf0) 246 2 { 247 3 temp=P3; 248 3 switch(temp) 249 3 { 250 4 case 0xe7: 251 4 clear=1; 252 4 break; 253 4 254 4 } 255 3 while(temp!=0xf0) 256 3 { 257 4 temp=P3; 258 4 temp=temp&0xf0; 259 4 beep=0; 260 4 } 261 3 beep=1; 262 3 } 263 2 } 264 1 } 265 266 void main() 267 { 268 1 uchar a,b; 269 1 init(); 270 1 while(1) 271 1 { 272 2 agree(); 273 2 disagree(); 274 2 keyscan(); 275 2 if(pass||nopass) 276 2 { 277 3 write_com(0x80+10); 278 3 delay(20); 279 3 write_date(0x30+pass); 280 3 write_com(0x80+0x40+10); 281 3 delay(20); 282 3 write_date(0x30+nopass); 283 3 } 284 2 a=pass+nopass; 285 2 if(a==3) 286 2 { 287 3 if(pass>nopass) 288 3 yes(); 289 3 if(pass