|
源碼
#include<reg52.h>
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
int step=1;
int price=0;
int num=1;
int table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; //數碼管顯示0-9
unsigned char dispbuf[8]={0,0,0,0,0,0,0,};
int table2[]={0xe0,0xc0,0xa0,0x80,0x20};//控制退幣
int total_money=0;//所選商品總價格
int back_money=0; //應退金額
int in_money=0;
/*
延時功能
*/
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//?調用時重新初始化??復位函數
void reset()
{
step=1;
price=0;
num=1;
total_money=0;
back_money=0;
in_money=0;
}
/*
選擇商品函數?每個按鍵對應不同的物品價格及數量
*/
void choose()
{
if(key1==0)
{
delay(80);
if(key1==0)
{
num=1;
price=4;
}
}
else if(key2==0)
{
delay(80);
if(key2==0)
{
price=6;
num=1;
}
}
else if(key3==0)
{
delay(80);
if( key3==0)
{
price=10;
num=1;
}
}
}
/*
確定及取消
確定則執行?step加一?取消則執行step減一
*/
void apply()
{
if(key7==0)
{
delay(80);
if(key7==0)
{
step++;
}
}
else if(key8==0)
{
delay(80);
if(key8==0)
{
step--;
}
}
}
/*
計算所選商品所需金額
*/
void totalmoney()
{
total_money=price*num;
}
/*
//累加投入幣值
*/
void inmoney()
{
if(key4==0)
{
delay(80);
if(key4==0)
in_money+=1;
}
else if(key5==0)
{
delay(80);
if(key5==0)
in_money+=5;
}
else if(key6==0)
{
delay(80);
if(key6==0)
in_money+=10;
}
}
/*
計算所需退還幣值
*/
void backmoney()
{
back_money=in_money -total_money;
}
/*
顯示函數?每一步顯示不同的內容
*/
void display ()
{
if(step==1)
{
P2=0x04;
totalmoney();
P0 =table1[total_money%10];
delay(80);
P2 = 0x08;
P0 = table1[total_money/10];
delay(80);
}
else if(step==2)
{
P2=0x04;
inmoney();
P0=table1[in_money%10];
delay(80);
P2=0x08;
P0=table1[in_money/10];
delay(80);
}
else if(step==3)
{
P2=0xf0;
backmoney();
if(back_money<0)
{
step--;
P0=table1[in_money];
}
if(back_money>=0)
{
P2=0x04;
backmoney();
P0=table1[back_money%10];
delay(80);
P2=0x08;
P0=table1[back_money/10];
delay(80);
reset();
}
else
P0=table1[1];
}
}
/*
//主函數
*/
void main()
{
while(1)
{
choose();
apply();
display();
}
/*?if(back_money>=10)
{int?s=back_money/10;
for(s;s>0;s--?)
{led2=0;
delay(1000);
led2=1;
back_money-=10;
}
}
if(back_money<10&&back_money>0?)
{
led3=0;
delay(1000);
led3=1;
}
delay(1000);
{
led1=0;
delay(1000);
led1=1;
delay(1000);
led1=0;
delay(1000);
led1=1;
delay(1000);
led1=0;
delay(1000);
led1=1;
delay(1000);
}*/
}
|
|