#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ADCS=P3^5;
sbit ADDI=P3^7;
sbit ADDO=P3^7;
sbit ADCLK=P3^6;
uint x1,y1,z1=0,w1;
uchar ad_data,k,n,m,e,num,s;
uint temp1;
sbit beep=P3^0;
char press_data;
float press;
uchar ad_alarm,temp;
uchar abc[5]={48,46,48,48,48};
uchar price_all[6]={48,48,46,48,48,48};
float price_unit[19]={5,5,2,8,3,6,4,5,5,8,6,8,7,9,8,0,9,5,0};
uchar price_danjia[5]={48,46,48,48,48};
float price;
uint price_temp1,price_temp2;
uchar Adc0832(uchar channel);
void alarm(void);
void data_pro(void);
void dalay(uint k);
void keyscan();
void disp_init();
void price_jisuan();
void main(void)
{
delay(500);
//ad_data=0;
lcd_init();
disp_init();
delay(1000);
clear_lcd(0,4,40);
clear_lcd(16,0,100);
clear_lcd(28,0,40);
clear_lcd(44,0,100);
clear_lcd(56,0,40);
clear_lcd(72,0,100);
clear_lcd(84,0,40);
clear_lcd(100,0,100);
clear_lcd(112,0,40);
write_lcd(0,8,"实用电子秤");
while(1)
{
ad_data=Adc0832(0);
alarm();
data_pro();
keyscan();
wrire_lcd(40,0,"------------------------------");
wrire_lcd(56,0,"单 价:");
wrire_lcd(56,11,price_danjia);
wrire_lcd(56,20,"元/千克");
wrire_lcd(72,20,"总重量:");
wrire_lcd(72,11,abc);
wrire_lcd(72,20,"千克");
wrire_lcd(88,0,"总 价");
price_jisuan();
wrire_lcd(88,10,price_all);
wrire_lcd(88,20,"元");
}
}
//读ADC0832函数
uchar Adc0832(uchar channel)
{
uchar i=0;
uchar j
uint dat=0;
uchar udat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
ADCLK=1;
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
ADCLK=1;
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;
ADDI=1;
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat=ADD0;
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADD0;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADD0;//
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
i=j<<7;
nadt=nadt|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉高CS端
ADCLK=0;
ADD0=1;
dat<<=8;
dat|=dat;
return(dat);
}
void data_pro(void)
}
uint;
if(0
{
int vary=ad_data;
press=(0.019531*vary);
temp1=(int)(press*1000);
abc[0]=temp1/1000+48;
abc[1]=46;
abc[2]=(temp1%1000)/100+48;
abc[3]=((temp1%1000)%100)/10+48;
abc[4]=((temp1%1000)%100)%10+48;
}
}
//报警子函数
void alarm(void)
{
if(ad_data>=253)
beep=0;
else
beep=1;
}
void delay(uint k)
{
uint i,j;
for(i=0;i
for(j=0;j<100;j++);
}
//开机欢迎界面
void disp_init()
{
write_lcd(56,8,"欢迎使用电子秤");
lcd(112,0,"设计日期:2016年5月");
}
//键盘服务程序
void keyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay=(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=1,price=price_unit[0],write_lcd(24,0,"名称:杏仁");
break;
case 0xde:num=2,price=price_unit[1],write_lcd(24,0,"名称:李子");
break;
case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,"名称:草莓");
break;
case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,"名称:葡萄");
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay=(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=5,price=price_unit[4],write_lcd(24,0,"名称:西瓜");
break;
case 0xde:num=6,price=price_unit[5],write_lcd(24,0,"名称:苹果");
break;
case 0xbe:num=7,price=price_unit[6],write_lcd(24,0,"名称:雪梨");
break;
case 0x7e:num=8,price=price_unit[7],write_lcd(24,0,"名称:核桃");
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay=(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=9,price=price_unit[8],write_lcd(24,0,"名称:香蕉");
break;
case 0xde:num=10,price=price_unit[9],write_lcd(24,0,"名称:商品代码");
break;
case 0xbe:num=11,price=price_unit[1],write_lcd(24,0,"名称:大米");
break;
case 0x7e:num=12,price=price_unit[2],write_lcd(24,0,"名称:星星");
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay=(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7;num=13,price_nuit[3];
break;
case 0xd7;num=14,price_nuit[4];
break;
case 0xb7;num=15,price_nuit[5];
break;
case 0x77;num=16,price_nuit[6];
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
price_temp1=(int)(price*1000;
price_danjia[0]=price_temp1/1000+48;
price_danjia[1]=46;
price_danjia[2]=(price_temp1%1000)/100+48;
price_danjia[3]=((price_temp1%1000)%100)/10+48;
price_danjia[4]=((price_temp1%1000)%100)%10+48;
}
void price_jisuan()
{
price_temp2=(int)(price*1000;
price_danjia[0]=price_temp2/10000+48;
price_danjia[1]=(price_temp2%1000)/10+48;
price_danjia[2]=46;
price_danjia[3]=(price_temp2%1000)/100+48;
price_danjia[4]=((price_temp2%1000)%100)/10+48;
price_danjia[5]=((price_temp2%1000)%100)%10+48;
}