void main() { unsigned char ok = 0, water_type = -1, water_is_choose = 0, water_sit=-1 ; char water_count = 0; unsigned int flag = 0, money = 0, need_money, time_counter = 0; lcd_1602_init(); // LCD初始化 again: ok = 0; water_type = -1; water_count = 0; water_is_choose = -1; water_sit=-1 ; flag = 0; money = 0; need_money = 0; lcd1602_info_display(WAIT_SALE, 0, 0); // LCD显示 while(!ok) //choose the water and count { flag=key(); if(flag) { switch(e) { case(0x00): water_type++; // 类型变量+1 water_is_choose = 1; if(water_type == 8) // 如果类型变量等于8 water_type = 0; // 类型变量变为0 P3 = water_change(0xff, water_type); // 显示价格指示 break; case(0x04): water_type--; water_is_choose = 1; if(water_type == -1 || water_type == -2) water_type = 7; P3 = water_change(0xff, water_type);// 显示价格指示 break; case(0x01): if (!ok) { type1++; // 类型变量+1 if(type1 == 4) // 如果类型变量等于4 type1 = 1; // 类型变量变为1 led1 = 1; led2 = 1; led3 = 1; // 按下按键后,led灯亮 if (type1 == 1) { led1 = 0; } else if (type1 == 2) { led2 = 0; } else if (type1 == 3) { led3 = 0; } } break; if (!ok) { case(0x05): if(type1 == 0) // 如果类型变量等于0 type1 = 3; // 类型变量变为3 else type1--; led1 = 1; led2 = 1; led3 = 1; // 按下按键后,led 灯亮 if (type1 == 1) { led1 = 0; } else if (type1 == 2) { led2 = 0; } else if (type1 == 3) { led3 = 0; } break; case(0x08): if(water_is_choose == 1) { water_count++; if(water_count > water_total[water_type]) { water_count = water_total[water_type]; } } break; case(0x0c): if(water_is_choose == 1) { water_count--; if(water_count < 0) { water_count = 0; } } break; case(0x0b): // 返回 goto again; break; case(0x0f): // 确认 if (water_is_choose == 1 && water_count != 0) { ok = 1; } break; default: break; } lcd_1602_saling(water_type, water_count); } } //choose ok: calculate the money //计算钱的总数 need_money = water_count * water_price[water_type]; lcd_1602_inputing(need_money, money);//LCD显示钱总数 ok = 0; time_counter = 0; while(!ok) //get money { flag=key(); //按键扫描获取件值 if(flag) { time_counter = 0; //重置计时器 switch(e) { case(0x09): money=money+1; //1元硬币 break; case(0x0d): money=money+1; //1元纸币 break; case(0x02): money=money+5; //5元 break; case(0x06): money=money+10; //10元 break; case(0x0a): money=money+20; //20元 break; case(0x0e): money=money+50; //50元 break; case(0x03): money=money+100; //100元 break; case(0x0f): //back lcd_1602_info_display(CHANGE, money, CANCLE); P3 = 0xff; delay1(50000); goto again; break; default: break; } if (money >= need_money) { ok = 1; } else { lcd_1602_inputing(need_money, money); //更新LCD显示 } } else { time_counter++; //计时器加1 if (time_counter >= 1500) { //超过15秒 BEEP = P2^1; //蜂鸣器响 delay1(50000); if (time_counter >= 3000) { //超过30秒 lcd1602_info_display(WAIT_SALE, 0, 0); //跳到初始界面 goto again; } } } } //give change //找零 lcd_1602_info_display(CHANGED, money-need_money, 0); P3 = water_change(0x00, water_type); //出货 delay1(50000); P3 = 0xff; goto again;

void main unsigned char ok = 0 water_type = -1 water_is_choose = 0water_sit=-1 ; char water_count = 0; unsigned int flag = 0 money = 0 need_money; lcd_1602_init; LCD初始化 again ok = 0; water_type = -1

原文地址: https://www.cveoy.top/t/topic/fcME 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录