51单片机自动售货机程序:多款商品同时出货
#include <reg52.h>
#define KEYPAD P1
sbit motor = P2^0; sbit led = P2^1;
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示表
void delay(int t) //延时函数 { int i,j; for(i=0;i<t;i++) for(j=0;j<120;j++); }
void display(unsigned char n) //数码管显示函数 { unsigned char i,j,k; for(i=0;i<3;i++) { k = n%10; n /= 10; if(i == 0) j = 0xfe; //第一位数码管 else if(i == 1) j = 0xfd; //第二位数码管 else j = 0xfb; //第三位数码管 P0 = j; //选中数码管 P2 = 0x00; //清零数码管段选 P0 = table[k]; //设置数码管段选 delay(1); //延时一段时间,使数码管显示稳定 } }
unsigned char getkey() //获取按键值函数 { unsigned char keyvalue = 0xFF; KEYPAD = 0x0F; //设置列为低电平 if(KEYPAD != 0x0F) //检测是否有按键按下 { delay(10); //延时一段时间,防止按键抖动 if(KEYPAD != 0x0F) //再次检测是否有按键按下 { KEYPAD = 0x0F; //读取行的值 switch(KEYPAD) //根据行的值确定按键值 { case 0x07: keyvalue = 1; break; case 0x0b: keyvalue = 2; break; case 0x0d: keyvalue = 3; break; case 0x0e: keyvalue = 4; break; } KEYPAD = 0xF0; //设置行为低电平 switch(KEYPAD) //根据列的值确定按键值 { case 0x70: keyvalue = keyvalue; break; case 0xb0: keyvalue += 4; break; case 0xd0: keyvalue += 8; break; case 0xe0: keyvalue += 12; break; } } } return keyvalue; //返回按键值 }
void main() { unsigned char key, num1 = 0, num2 = 0, num3 = 0; //num1~3分别表示三种商品的库存数量 led = 1; //初始化LED while(1) { key = getkey(); //获取按键值 switch(key) //根据按键值进行相应的操作 { case 1: if(num1 > 0) //如果商品1有库存 { motor = 1; //启动电机 delay(100); //延时一段时间,使商品掉落到出货口 motor = 0; //关闭电机 num1--; //商品1库存数量减1 display(num1100+num210+num3); //显示商品1库存数量 } else led = 0; //如果商品1没有库存,LED亮起 break; case 2: if(num2 > 0) //如果商品2有库存 { motor = 1; //启动电机 delay(100); //延时一段时间,使商品掉落到出货口 motor = 0; //关闭电机 num2--; //商品2库存数量减1 display(num1100+num210+num3); //显示商品2库存数量 } else led = 0; //如果商品2没有库存,LED亮起 break; case 3: if(num3 > 0) //如果商品3有库存 { motor = 1; //启动电机 delay(100); //延时一段时间,使商品掉落到出货口 motor = 0; //关闭电机 num3--; //商品3库存数量减1 display(num1100+num210+num3); //显示商品3库存数量 } else led = 0; //如果商品3没有库存,LED亮起 break; case 4: num1 = 10; num2 = 5; num3 = 3; //按下4键,初始化库存数量 display(num1100+num210+num3); //显示商品库存数量 led = 1; //关闭LED break; } } }
原文地址: https://www.cveoy.top/t/topic/nQfh 著作权归作者所有。请勿转载和采集!