标题:
可切换价格计算总价的电子秤仿真及源程序
[打印本页]
作者:
51黑ff
时间:
2016-9-25 19:58
标题:
可切换价格计算总价的电子秤仿真及源程序
给51黑电子论坛的朋友们分享一个可切换价格计算总价的电子秤仿真,下面是原理图:
0.png
(25.03 KB, 下载次数: 80)
下载附件
2016-9-25 19:56 上传
0.png
(48.65 KB, 下载次数: 90)
下载附件
2016-9-25 19:57 上传
所有资料下载:
电子秤仿真.zip
(77.93 KB, 下载次数: 53)
2016-9-25 19:58 上传
点击文件名下载附件
下载积分: 黑币 -5
源程序:
#include<reg51.h>
#include<intrins.h>
#include <ZM.h>
#define LCD P0
unsigned char a,i,j,k,ad_data;
float press=0.0;
int b;
int num=1,num_t=0;
sbit EXCHANGE=P1^0;
sbit MENU=P1^1;
sbit ADD=P1^2;
sbit SUB=P1^3;
sbit OK=P1^4;
sbit EN=P2^0;
sbit RW=P2^1;
sbit RS=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit BUSY=P0^0;
sbit ADCS =P3^5;
sbit ADDI =P3^7;
sbit ADDO =P3^7;
sbit ADCLK =P3^6;
float f_price[5]={10.5,11.5,12.5,13.5,14.5};
float sum=0;
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<100;j++)
;
}
void temer1() interrupt 2
{
EX1=0;
delay(10);
if(EXCHANGE==0)
{
num++;
if(num>=5)
{
num=0;
}
}
EX1=1;
}
//采集并返回
unsigned char Adc0832(unsigned char channel) //AD转换,返回结果
{
unsigned char j,i=0,ndat=0;
unsigned int dat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
void data_pro(void)
{
if(0<ad_data<256)
{
int vary=ad_data;
press=(0.019531*vary);
}
}
void total(float w,float p)
{
sum=w*p;
}
unsigned char t1[6]={"000.00"};
void turn(float t_float)
{
int temp=(int)t_float;
t1[0]=temp/100+0X30;
t1[1]=(temp%100)/10+0X30;
t1[2]=temp%10+0X30;
temp=(int)(t_float*100);
t1[4]=(temp%100)/10+0X30;
t1[5]=temp%10+0X30;
}
checkbusy()
{
EN=1;
RW=1;
RS=0;
LCD=0XFF;
if(BUSY);
}
writecode(unsigned char dat) //写命令
{
checkbusy();
EN=1;
RW=0;
RS=0;
LCD=dat;
EN=1;
EN=0;
}
writedata(unsigned char dat) //写数据
{
checkbusy();
EN=1;
RW=0;
RS=1;
LCD=dat;
EN=1;
EN=0;
}
void displayzifu(unsigned char page,unsigned char lineaddress,int n, unsigned char table[])
{
unsigned char temp[16];
if(lineaddress<0X80)
{
CS1=1;
CS2=0;
}
for(j=0;j<n;j++)
{
if(lineaddress>=0X80)
{
CS1=0;
CS2=1;
lineaddress=lineaddress-0X40;
}
b=table[j]-0X20;
for(k=0;k<16;k++)
{
temp[k]=ch2[b][k];
}
writecode(page);
writecode(lineaddress);
for(i=0;i<8;i++)
{
writedata(temp[i]);
}
writecode(page+1);
writecode(lineaddress);
for(i=8;i<16;i++)
{
writedata(temp[i]);
}
lineaddress+=8;
}
}
void clear(unsigned char page,unsigned char lineaddress,int n, unsigned char table[])
{
unsigned char temp[16];
if(lineaddress<0X80)
{CS1=1;
CS2=0;}
for(j=0;j<n;j++)
{
if(lineaddress>=0X80)
{
CS1=0;
CS2=1;
lineaddress=lineaddress-0X40;
}
b=table[j]-0X20;
for(k=0;k<16;k++)
{temp[k]=ch2[b][k];}
writecode(page);
writecode(lineaddress);
for(i=0;i<8;i++)
{ writedata(temp[i]);}
writecode(page+1);
writecode(lineaddress);
for(i=8;i<16;i++)
{ writedata(temp[i]);}
lineaddress+=8;
}
}
void displayhanzi(unsigned char page,unsigned char lineaddress,int n, unsigned char table[][16])
{
unsigned char temp[32];
if(lineaddress<0X80)
{
CS1=1; //left
CS2=0;
}
for(j=0;j<n;j++)
{
if(lineaddress>=0X80)
{
CS1=0; //right
CS2=1;
lineaddress=lineaddress-0X40;
}
for(k=0;k<16;k++)
{
temp[k]=table[j][k];
}
j+=1;
for(k=0;k<16;k++)
{
temp[16+k]=table[j][k];
}
writecode(page);
writecode(lineaddress);
for(i=0;i<16;i++)
{
writedata(temp[i]);
}
writecode(page+1);
writecode(lineaddress);
for(i=16;i<32;i++)
{
writedata(temp[i]);
}
lineaddress+=16;
}
}
void lcdinti()
{
writecode(0X3f);//显示开关关
writecode(0XC0);//修改显示起始行
writecode(0XB8);//修改页地址,x地址
writecode(0X40);//修改列地址,y地址
}
main()
{
unsigned char t[3]={'/','K','G'};
char m=':';
EA=1;
EX1=1;
lcdinti();
clear(0XB8,0X40,16,&table2);
clear(0XBa,0X40,16,&table2);
clear(0XBc,0X40,16,&table2);
clear(0XBe,0X40,16,&table2);
displayhanzi(0XB8,0X40,16,&TITLE);
displayhanzi(0XBa,0X40,4,&WEIGHT);
displayzifu(0XBa,0X60,1,&m);
displayhanzi(0XBc,0X40,4,&PRICE);
displayzifu(0XBc,0X60,1,&m);
displayhanzi(0XBE,0X40,4,&TOTAL);
displayzifu(0XBe,0X60,1,&m);
while(1)
{
ad_data =Adc0832(0); //采样值存储单元初始化为0
data_pro();
turn(press);
displayzifu(0XBa,0X68,5,&t1[1]);
displayzifu(0xba,0xB0,2,&t[1]);
delay(100);
turn(f_price[num]);
displayzifu(0XBc,0X68,6,&t1[0]);
displayhanzi(0xbc,0x98,2,&YUAN);
displayzifu(0XBc,0XA8,3,&t);
delay(100);
total(press,f_price[num]);
turn(sum);
displayzifu(0XBe,0X68,6,&t1);
displayhanzi(0xbe,0xB0,2,&YUAN);
delay(100);
}
}
复制代码
作者:
再挂东南枝
时间:
2016-12-19 02:43
谢谢 分享。。
作者:
fjc1979
时间:
2017-6-16 12:44
好文件
作者:
wxxdpj
时间:
2019-3-24 18:21
不能实现多个称重物体的价格l累加
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1