找一个51单片机自动售货机对两款不一样的产品同时出货能计算找零的程序
以下是一个51单片机自动售货机对两款不一样的产品同时出货能计算找零的程序,其中产品A的价格为5元,产品B的价格为10元,售货机只接受面额为1元、5元、10元的纸币和硬币。
#include <reg52.h>
#define PRODUCT_A_PRICE 5
#define PRODUCT_B_PRICE 10
sbit MOTOR1 = P1^0;
sbit MOTOR2 = P1^1;
unsigned char product_a_count = 10;
unsigned char product_b_count = 5;
unsigned char balance = 0; // 余额
unsigned char change = 0; // 找零
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
void display(unsigned char num)
{
P0 = num;
delay(5);
P0 = 0xff;
}
void disp_balance()
{
display(balance / 10);
delay(10);
display(balance % 10);
}
void disp_change()
{
display(change / 10);
delay(10);
display(change % 10);
}
void disp_product_a_count()
{
display(product_a_count / 10);
delay(10);
display(product_a_count % 10);
}
void disp_product_b_count()
{
display(product_b_count / 10);
delay(10);
display(product_b_count % 10);
}
void disp_no_change()
{
display(0);
delay(1000);
}
void disp_out_of_stock()
{
display(1);
delay(1000);
}
void disp_not_enough_money()
{
display(2);
delay(1000);
}
void disp_thank_you()
{
display(3);
delay(1000);
}
void disp_return_money()
{
display(4);
delay(1000);
}
void disp_balance_zero()
{
display(5);
delay(1000);
}
void disp_product_a_sold_out()
{
display(6);
delay(1000);
}
void disp_product_b_sold_out()
{
display(7);
delay(1000);
}
void main()
{
while(1) {
if (product_a_count == 0) {
disp_product_a_sold_out();
}
if (product_b_count == 0) {
disp_product_b_sold_out();
}
if (P2 == 0xfe) { // 选择产品A
if (product_a_count > 0) {
if (balance >= PRODUCT_A_PRICE) {
MOTOR1 = 1;
delay(1000);
MOTOR1 = 0;
product_a_count--;
balance -= PRODUCT_A_PRICE;
if (balance > 0) {
change = balance;
disp_change();
balance = 0;
}
disp_thank_you();
} else {
disp_not_enough_money();
}
} else {
disp_out_of_stock();
}
}
if (P2 == 0xfd) { // 选择产品B
if (product_b_count > 0) {
if (balance >= PRODUCT_B_PRICE) {
MOTOR2 = 1;
delay(1000);
MOTOR2 = 0;
product_b_count--;
balance -= PRODUCT_B_PRICE;
if (balance > 0) {
change = balance;
disp_change();
balance = 0;
}
disp_thank_you();
} else {
disp_not_enough_money();
}
} else {
disp_out_of_stock();
}
}
if (P2 == 0xfb) { // 插入纸币或硬币
if (P3 == 0xfe) { // 插入1元纸币
balance += 1;
}
if (P3 == 0xfd) { // 插入5元纸币
balance += 5;
}
if (P3 == 0xfb) { // 插入10元纸币
balance += 10;
}
disp_balance();
}
if (P2 == 0xf7) { // 退还余额
if (balance > 0) {
change = balance;
disp_change();
balance = 0;
disp_return_money();
} else {
disp_balance_zero();
}
}
disp_product_a_count();
disp_product_b_count();
}
}
``
原文地址: https://www.cveoy.top/t/topic/d85r 著作权归作者所有。请勿转载和采集!