|
#include<reg52.h>
#include<intrins.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
extern void ADC();
extern uchar Adc0832(unsigned char channel); //AD轉(zhuǎn)換,返回結(jié)果
extern uchar bai,shi,ge;
uchar table[]="P:000.0";
char press_data;
uint ya;
uchar ad_data;
void data_pro1();
void qupi();
void leijia(); ///
uint t; ////
//unsigned long temp1; ///
uchar a1,a2,a3,a4,a5,a6; ///
uint c,d,e;
uchar num ,s1num,s2num,s3num,s5num,s6num;
uchar code table1[]="Y:000000.00";
uchar code table2[]="M: g";
sbit lcden=P0^5;
sbit lcdrw=P0^6;
sbit lcdrs=P0^7;
sbit cs=P0^0;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit s4=P3^3;
sbit s5=P3^4;
sbit s6=P3^5;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;//寫指令
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{ lcdrw=0;
lcden=0;
write_com(0x38);//顯示模式設(shè)置
write_com(0x0c); //開顯示,不顯示光標(biāo),光標(biāo)不閃爍
write_com(0x06);//當(dāng)讀或?qū)懸粋(gè)字符后地址指針加1,且光標(biāo)加1,整屏顯示不移動(dòng)
write_com(0x01); //清屏
}
void display(unsigned long a,unsigned long b)
{
unsigned long temp;
// uchar a1,a2,a3,a4,a5,a6;
temp=a;
temp=b*a; //a*b
a1=temp/100000;
a2=temp%100000/10000;
a3=temp%100000%10000/1000;
a4=temp%100000%10000%1000/100;
a5=temp%100000%10000%1000%100/10;
a6=temp%100000%10000%1000%100%10;
write_com(0xc3);
write_data('0'+a1);
write_com(0xc4);
write_data('0'+a2);
write_com(0xc5);
write_data('0'+a3);
write_com(0xc6);
write_data('0'+a4);
write_com(0xc7);
write_data('0'+a5);
write_com(0xc9);
write_data('0'+a6);
}
void keyscan()
{
if(s1==0)//s1按下
{
delay(10);
if(s1==0)//檢測(cè)確實(shí)按下
{
{ s1num++; //小數(shù)十分位
while(!s1);
if(s1num==1)
{
write_com(0x86);
write_com(0x0c);
write_data(0x30+s1num);
write_com(0x86);
}
else if(s1num<10)
{
write_com(0x86);
write_com(0x0c);
write_data(0x30+s1num);
write_com(0x86);
}
else if(s1num>=10) //個(gè)位
{
s1num=0;
s1num=s1num%10;
write_data(0x30+s1num);
write_com(0x84);
write_com(0x0c);
write_com(0x84);
}
}
}
}
if(s2==0)//s1按下
{
delay(10);
if(s2==0)//檢測(cè)確實(shí)按下
{
{ s2num++;
while(!s2);
if(s2num<=10)
{
write_com(0x84);
write_com(0x0c);
write_data(0x30+s2num);
write_com(0x84);
}
else if(s2num>10)
{
s2num=-1;
write_data(0x30+s2num);
s2num=s2num++;
write_com(0x84);
write_com(0x0c);
write_com(0x84);
}
}
}
}
if(s3==0)//s1按下
{
delay(10);
if(s3==0)//檢測(cè)確實(shí)按下
{
{ s3num++;
while(s3==0);
if(s3num<10)
{
write_com(0x83);
write_com(0x0c);
write_data(0x30+s3num);
write_com(0x83);
}
else if(s3num>=10)
{
s3num=0;
write_data(0x30+s3num);
write_com(0x83);
s3num=s3num++;
write_com(0x0c);
write_com(0x83);
}
}
}
}
/* if(s5==0)//s1按下
{
delay(10);
if(s5==0)//檢測(cè)確實(shí)按下
{ s5num++;
while(s5==0);
if(s5num==1)
{
bai1=bai;
shi1=shi;
ge1=ge;
}
}
if(s5num==2) s5num=0;
}
}*/
if(s4==0) ////
{ delay(10); ////////
if(s4==0)//檢測(cè)確實(shí)按下
{ write_com(0x86);
write_com(0x84);
write_com(0x83);
write_com(0x0c);
}
while(1)
{
ADC();
write_com(0x80+10);
write_data('0'+bai);
write_com(0x80+11);
write_data('0'+shi);
write_com(0x80+12);
write_data('0'+ge);
//keyscan();
display(s3num*100+s2num*10+s1num,bai*100+shi*10+ge);//顯示
if(s4!=0)
break;
}
}
}
/// // /////////去皮程序
void qupi()
{
if(s5==0)//s1按下
{
delay(10);
if(s5==0)//檢測(cè)確實(shí)按下
{ s5num++;
while(s5==0);
if(s5num==1)
{
t=bai*100+shi*10+ge;
while(!s5);
}
if(s5num==2)
{ uint p;
p=bai*100+shi*10+ge-t;
bai=p/100;
shi=(p%100)/10;
ge=(p%100)%10;
write_com(0x80+10);
write_data('0'+bai);
write_com(0x80+11);
write_data('0'+shi);
write_com(0x80+12);
write_data('0'+ge);
display(s3num*10+s2num,bai*100+shi*10+ge);//顯示
s5num=0;
while(!s5);
}
}
}
}
//////////////// 累加金額 //// // /////////
void leijia()
{
if(s6==0)//s6按下
{
delay(10);
if(s6==0)//檢測(cè)確實(shí)按下
{ s6num++;
while(s6==0);
if(s6num==1)
{ c=(s3num*100+s2num*10+s1num)*(bai*100+shi*10+ge);
a1=c/100000;
a2=c%100000/10000;
a3=c%100000%10000/1000;
a4=c%100000%10000%1000/100;
a5=c%100000%10000%1000%100/10;
a6=c%100000%10000%1000%100%10;
write_com(0xc3);
write_data('0'+a1);
write_com(0xc4);
write_data('0'+a2);
write_com(0xc5);
write_data('0'+a3);
write_com(0xc6);
write_data('0'+a4);
write_com(0xc7);
write_data('0'+a5);
write_com(0xc9);
write_data('0'+a6);
while(!s6);
}
if(s6num==2)
{ d=(s3num*100+s2num*10+s1num)*(bai*100+shi*10+ge);
d=d+c;
a1=d/100000;
a2=d%100000/10000;
a3=d%100000%10000/1000;
a4=d%100000%10000%1000/100;
a5=d%100000%10000%1000%100/10;
a6=d%100000%10000%1000%100%10;
write_com(0xc3);
write_data('0'+a1);
write_com(0xc4);
write_data('0'+a2);
write_com(0xc5);
write_data('0'+a3);
write_com(0xc6);
write_data('0'+a4);
write_com(0xc7);
write_data('0'+a5);
write_com(0xc9);
write_data('0'+a6);
while(!s6);
} if(s6num==3)
{
e=(s3num*100+s2num*10+s1num)*(bai*100+shi*10+ge);
e=e+d;
a1=e/100000;
a2=e%100000/10000;
a3=e%100000%10000/1000;
a4=e%100000%10000%1000/100;
a5=e%100000%10000%1000%100/10;
a6=e%100000%10000%1000%100%10;
write_com(0xc3);
write_data('0'+a1);
write_com(0xc4);
write_data('0'+a2);
write_com(0xc5);
write_data('0'+a3);
write_com(0xc6);
write_data('0'+a4);
write_com(0xc7);
write_data('0'+a5);
write_com(0xc9);
write_data('0'+a6);
s6num=0;
while(!s6);
}
}
}
}
/////////////
void main()
{ //ad_data=0;
init();
write_com(0x80);
for(num=0;num<8;num++)
{
write_data(table[num]);
delay(20);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_data(table1[num]);
delay(20);
}
write_com(0x80+8);
for(num=0;num<9;num++)
{
write_data(table2[num]);
delay(20);
}
delay(20);
ADC(); ///////
write_com(0x80+10); /////////
write_data('0'+bai); //
write_com(0x80+11); //////
write_data('0'+shi);
write_com(0x80+12); ////
write_data('0'+ge); //////////
//keyscan();
display(s3num*100+s2num*10+s1num,bai*100+shi*10+ge);//顯示
while(1)
{ ad_data =Adc0832(0); //采樣值存儲(chǔ)單元初始化為0
data_pro1();
keyscan();
qupi();
leijia();
}
/* if(s5==0)
{
int c;
c=bai*100+shi*10+ge;
if(c<100)
{
;
}
} */
}
////////////////////
void data_pro1(void)
{
//unsigned int;
float press;
if(0<ad_data<256)
{
int vary=ad_data;
press=(0.012*(vary-7.680)*5.000);
ya=(int)(press*1000); //放大1000倍,便于后面的計(jì)算
bai=ya/1000; //取壓力值百位
shi=(ya%1000)/100; //取壓力值十位
ge=((ya%1000)%100)/10; //取壓力值個(gè)位
//press_qianfen=((temp1%1000)%100)%10; //取壓力值十分位
}
}
|
|