C语言自动售货机程序:添加蜂鸣器提示功能
void main() { unsigned char ok = 0, water_type = -1, water_is_choose = 0,water_sit=-1 ; unsigned char add=0, minus=0; char water_count = 0; unsigned int flag = 0, money = 0, need_money; lcd_1602_init(); // LCD初始化 again: ok = 0; water_type = -1; water_count = 0; water_is_choose = -1; water_sit=-1 ; add=0, minus=0; 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++; water_is_choose = 1; if(water_type == 8) { water_type = 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++; if(type1 == 4) { type1 = 1; } led1 = 1; led2 = 1; led3 = 1; if (type1 == 1) { led1 = 0; } else if (type1 == 2) { led2 = 0; } else if (type1 == 3) { led3 = 0; } } break; case(0x05): if (!ok) { if(type1 == 0) { type1 = 3; } else { type1--; } led1 = 1; led2 = 1; led3 = 1; 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; unsigned char beep_flag = 0; //标志是否响蜂鸣器 unsigned long int start_time = get_time(); //获取开始时间 while(!ok) //get money { flag=key(); //按键扫描获取件值 if(flag) { switch(e) { case(0x09): money=money+1; break; case(0x0d): money=money+1; break; case(0x02): money=money+5; break; case(0x06): money=money+10; break; case(0x0a): money=money+20; break; case(0x0e): money=money+50; break; case(0x03): money=money+100; break; case(0x0f): //back lcd1602_info_display(CHANGE, money, CANCLE); P3 = 0xff; delay1(50000); goto again; break; default: break; } lcd_1602_inputing(need_money, money); //LCD显示钱总数 unsigned long int current_time = get_time(); //获取当前时间 if (current_time - start_time <= 15000) //判断是否在15秒内 { if (e == 0x09 || e == 0x0d || e == 0x02 || e == 0x06 || e == 0x0a || e == 0x0e || e == 0x03) { beep_flag = 0; //不响蜂鸣器 } } else //超过15秒 { if (beep_flag == 0) //之前没有响过 { BEEP = 1; //响蜂鸣器 delay1(50000); BEEP = 0; //停止响蜂鸣器 beep_flag = 1; //标志已经响过 } } } }
原文地址: https://www.cveoy.top/t/topic/n61D 著作权归作者所有。请勿转载和采集!