⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 electronic scale.txt

📁 基本的称重功能
💻 TXT
字号:
#i nclude <reg52.h> 

#i nclude<absacc.h> 

//ad 控制线 

#define ad_244 XBYTE[0xbfff]; 

sbit ad_stb=P3^3; 

sbit ad_start=P1^1; 

//lcd 控制线 

sbit lcd_di=P1^7; 

sbit lcd_rw=P1^2; 

sbit lcd_e=P1^0; 

//7289 控制线 

sbit cs7289=P1^3; 

sbit clk7289=P1^4; 

sbit dio7289=P1^5; 

//sbit key7289=P1^6; //7289 查询方式 

sbit key7289=P3^2; //7289 中断方式 

sbit baoj=P3^5; 

//7289 子程序 

void ini_7289(void); 

void send7289(short); 

short receive(void); 

void keyin(void); 

//lcd 子程序 

void ini_lcd(void); 

void lcdd_send(short); 

void lcdi_send(short); 

void chk_busy(void); 

//ad 子程序 

void ad(void); 

void baojing(void); 

void d_change(long); 

// 初始化,编号,日期 

void ini(); 

void error1(void); 

void nop1() 

{} 

void change(s) 

int dealy; // 全局变量 

short sh=0; // 商品号 

short dot=0; // 小数点标志 

bit list=0; 

short qb=0; 

char xdata shuju[7]=""; 

short xdata bcd[5]; 

char xdata s1[16]=" 单价 : 元 "; 

char xdata s2[16]=" 重量 : Kg"; 

char xdata s3[16]=" 金额 : 元 "; 

char xdata s4[16]=" 累计 : 元 "; 

char code message0[]=" 信息学院 大学 "; 

char code message1[]=" 输入收银员代号 :"; 

char code message2[]=" 输入日期 :"; 

char code message3[16]=" -- 大学 -- "; 

char code message5[16]=" XX公司欢迎您 !!"; 

char xdata bianhao[16]=" 收银员: "; 

char xdata riqi[16]=" - - "; 

long int xdata zongjia=0,jine=0,jine1=0; 

int xdata shizhong=0,pizhong=0,zhongliang=0; 

long int xdata qingdan[20][4]; 

char code shangpin[11][4]={{" 单价 "},{" 苹果 "},{" 梨 "},{" 花生 "},{" 大米 "}, 

{" 桃子 "},{" 塑料 "},{" 瓜子 "},{" 桔子 "},{" 香蕉 "},{" 玉米 "}}; 

long int xdata danjia[11]= 

{0,2000,3635,5502,6660,3320,5502,660,3210,6600,5600}; 

char xdata jiage[6]={0x0,0x0,0x0,0xfe,0x0,0x0}; // 0.00 

short xdata xiuzheng[]={0,2,5,6,7,8,9,12,13}; 

char s[16]; 

{s[6]=shuju[0]; 

s[7]=shuju[1]; 

s[8]=shuju[2]; 

s[9]=shuju[3]; 

s[10]=shuju[4]; 

s[11]=shuju[5]; 

s[12]=shuju[6]; 

} 

//**************************************************************** 

void main() 

{short i,j; 

long int x,z; 

int y; 

int xdata duilie[3]={0}; 

P1=0xff; 

ini_lcd(); // 初始化 LCD 

lcdi_send(0x8a); 

while(message0[i]) lcdd_send(message0[i++]); 

ini_7289(); // 初始化 7289 

pizhong=ad1(); 

lcdi_send(0x1); // 总清 屏 

ini(); // 初始页面 , 收银员编号,日期 

lcdi_send(0x1); // 总清 屏 

EA=1;EX0=1; // 中断 

//EX1=1; 

//ad_start=1; 

while(1) 

{if(list){lcdi_send(0x80); // 显示单位名称 

for(i=0;i<16;i++) lcdd_send(message3[i]); 

x=qingdan[0][0]; // 商品名 单价 

for(i=0;i<4;i++) s1[i]=shangpin[x][i]; 

x=qingdan[0][1]; 

d_change(x); change(s1); 

lcdi_send(0x90); 

for(i=0;i<16;i++) lcdd_send(s1[i]); 

x=qingdan[0][2]; // 显示重量 

d_change(x); change(s2); 

s2[10]=s2[9];s2[9]='.'; 

if(s2[8]==32) s2[8]=0x30; 

lcdi_send(0x88); 

for(i=0;i<16;i++) lcdd_send(s2[i]); 

x=qingdan[0][3]; 

d_change(x); change(s3); 

lcdi_send(0x98); 

for(i=0;i<16;i++) lcdd_send(s3[i]); // 以上为第一页 

EA=0;EX0=0; // 关键盘中断 

for(j=1;j<qb;j++) 

{while(key7289); 

x=qingdan[j][2]; 

d_change(x); change(s2); // 显示数据 

s2[10]=s2[9]; 

s2[9]='.'; if(s2[8]==32) s2[8]=0x30; 

lcdi_send(0x90); 

for(i=0;i<16;i++) lcdd_send(s2[i]); 

x=qingdan[j][1]; 

d_change(x); change(s1); 

x=qingdan[j][0]; 

for(i=0;i<4;i++) s1[i]=shangpin[x][i]; 

lcdi_send(0x80); 

for(i=0;i<16;i++) lcdd_send(s1[i]); 

x=qingdan[j][3]; 

d_change(x); change(s3); 

lcdi_send(0x88); 

for(i=0;i<16;i++) lcdd_send(s3[i]); 

lcdi_send(0x98); 

for(i=0;i<16;i++) lcdd_send(0x20); 

lcdi_send(0x98); 

while(key7289==0); 

} 

while(key7289); 

d_change(zongjia); change(s4); 

lcdi_send(0x80); 

for(i=0;i<16;i++) lcdd_send(s4[i]); 

lcdi_send(0x90); 

for(i=0;i<16;i++) lcdd_send(bianhao[i]); 

lcdi_send(0x88); 

for(i=0;i<16;i++) lcdd_send(message5[i]); 

lcdi_send(0x98); 

for(i=0;i<16;i++) lcdd_send(riqi[i]); 

list=0; 

while(key7289==0); 

while(key7289==1); 

while(key7289==0); 

EA=1;EX0=1; 

} 

else{ y=0; 

/* duilie[2]=duilie[1]; // 数字滤波 

duilie[1]=duilie[0]; 

y=ad1(); 

duilie[0]=y>>1; 

x=duilie[0]; 

x=x<<1; 

x=x+duilie[1]+duilie[2]; */ 

zhongliang=ad1(); 

shizhong=zhongliang-pizhong; // 数据转换 

x=danjia[sh]; 

jine1=shizhong*x; 

jine=jine1/1000; 

d_change(shizhong); change(s2); // 显示数据 

s2[10]=s2[9]; s2[9]='.'; 

if(s2[8]==32) s2[8]=0x30; 

lcdi_send(0x90); 

for(i=0;i<16;i++) lcdd_send(s2[i]); 

d_change(danjia[sh]); change(s1); 

for(i=0;i<4;i++) s1[i]=shangpin[sh][i]; 

lcdi_send(0x80); 

for(i=0;i<16;i++) lcdd_send(s1[i]); 

d_change(jine); change(s3); 

lcdi_send(0x88); 

for(i=0;i<16;i++) lcdd_send(s3[i]); 

d_change(zongjia); change(s4); 

lcdi_send(0x98); 

for(i=0;i<16;i++) lcdd_send(s4[i]); 

lcdi_send(0x98); 

//while(1); 

} 

} 

} 

void keyin(void) interrupt 0 using 0 // 中断 0 服务程序 

{char X,i; 

long int y; 

send7289(0x15); // 接收数据 

X=receive(); 

cs7289=1; 

X=X&0x1f; 

switch(X) 

{case 0xf : {zongjia=zongjia+jine; 

qingdan[qb][0]=sh; 

qingdan[qb][1]=danjia[sh]; 

qingdan[qb][2]=shizhong; 

qingdan[qb][3]=jine; 

qb++; sh=0;dot=0; 

danjia[0]=0; 

for(i=0;i<6;i++) jiage[i]=0; 

} 

break; // 累加 

case 0xe : pizhong=zhongliang; break; // 去皮 

case 0xd : {danjia[sh]=0;dot=0;} break; // 清单价 

case 0xc : {zongjia=0;jine=0;dot=0;list=0;qb=0;pizhong=0; 

if(sh==0) danjia[sh]=0;} break; // 总清 

case 0xa : dot=1;break; // 点 

case 0xb : list=1;break; // 清单 

case 0x19 : sh=10;break; 

case 0x18 : sh=9;break; 

case 0x17 : sh=8;break; 

case 0x16 : sh=7;break; 

case 0x15 : sh=6;break; 

case 0x14 : sh=5;break; 

case 0x13 : sh=4;break; 

case 0x12 : sh=3;break; 

case 0x11 : sh=2;break; 

case 0x10 : sh=1;break; 

case 0x1f : 

case 0x1e : 

case 0x1d : 

case 0x1c : 

case 0x1a : break; 

case 0x1b : dot=1;break; 

default :{ if(dot==0) {jiage[0]=jiage[1];jiage[1]=jiage[2];jiage[2]=X;} 

if(dot==1) {jiage[4]=X;dot++; } 

else if(dot==2) {jiage[5]=X; dot++;} 

else if(dot>2) break; 

// lcdi_send(0x84); 

y=jiage[0]; 

y=y*10+jiage[1]; 

y=y*10+jiage[2]; 

y=y*10+jiage[4]; 

danjia[sh]=y*10+jiage[5]; 

} 

} 

while(key7289==0); // 等待键盘松开 

} 

/* 

void ad(void) interrupt 2 using 1 

{short x,y; 

x=ad_244; 

y=x; 

if(x&0x80) baojing(); 

else x=x>>4; 

y=y&0xf; 

bcd[x]=y; 

} */ 

// 初始页面 

void ini() // 输入收银员编号 , 日期 

{short i,j; 

char X; 

lcdi_send(0x80); // 提示输入收银员编号 

i=0; 

while(message1[i]) lcdd_send(message1[i++]); 

for(i=8;i<12;i++) 

{ 

while(key7289); 

send7289(0x15); // 接收数据 

X=receive(); 

cs7289=1; 

bianhao[i]=X+0x30; 

lcdi_send(0x93); 

for(j=8;j<16;j++) lcdd_send(bianhao[j]); 

while(key7289==0); 

} 

lcdi_send(0x88); // 提示输入日期 

i=0; 

while(message2[i]) lcdd_send(message2[i++]); 

for(i=0;i<10;i++) // 输入日期 

{if(i==4||i==7) i++; 

while(key7289==1); 

send7289(0x15); // 接收数据 

X=receive(); 

cs7289=1; 

riqi[i]=X+0x30; 

j=0; 

lcdi_send(0x9a); 

for(j=0;j<10;j++) lcdd_send(riqi[j]); 

while(key7289==0); 

} 

while(key7289); 

nop1(); 

while(key7289==0); 

nop1(); 

lcdi_send(0x1); 

} 

//LCD 子程序 

void ini_lcd() //LCD 初始化子程序 

{ 

lcdi_send(0x30); 

lcdi_send(0x1); // 总清 

lcdi_send(0xc); 

lcdi_send(0x2); // 光标右移, AC+1 

} 

void lcdd_send(short X) //LCD 发送数据子程序 

{chk_busy(); 

nop1(); 

lcd_di=1;lcd_rw=0;lcd_e=0; 

P0=X; 

for(dealy=0;dealy<5;dealy++);// 

lcd_e=1; X=X; 

P0=0xff; 

} 

void lcdi_send(short X) //LCD 发送指令子程序 

{chk_busy(); 

nop1(); 

lcd_di=0;lcd_rw=0;lcd_e=0; 

P0=X; 

for(dealy=0;dealy<5;dealy++);// 

lcd_e=1; X=X; 

P0=0xff; 

} 

void chk_busy() 

{short i=0xff; 

while(i&0x80) 

{lcd_di=0; 

lcd_rw=1; 

lcd_e=0; 

i=P0; 

lcd_e=1; 

} 

} 

//7289 子程序 

void ini_7289() 

{short i; 

cs7289=1; key7289=1; dio7289=1; //7289 初始化子程序 

for(i=0;i<50;i++) 

for(dealy=0;dealy<5000;dealy++); // 延时 25ms 

send7289(0xa4); cs7289=1; 

} 

void send7289(short X) //7289 发送数据子程序 

{short i,j=1; 

cs7289=0; 

for(dealy=0;dealy<6;dealy++); // 延时 50us 

for(i=7;i>=0;i--) 

{j=j<<i; 

dio7289=X&j; 

j=1;j=1;clk7289=1; 

for(dealy=0;dealy<1;dealy++) ; // 延时 10us 

clk7289=0; 

for(dealy=0;dealy<1;dealy++) ; // 延时 10us 

} 

dio7289=0; 

} 

short receive() //7289 接收数据子程序 

{short i,X=0; 

dio7289=1; 

for(dealy=0;dealy<6;dealy++); // 延时 50us 

for(i=0;i<=7;i++) 

{clk7289=1; 

for(dealy=0;dealy<1;dealy++); // 延时 10us 

X=X<<1; 

if(dio7289)X++; 

clk7289=0; 

for(dealy=0;dealy<1;dealy++); // 延时 10us 

} 

dio7289=0; 

return(X); 

} 

//ad 

//AD 子程序 

int ad1() 

{short k,x; 

int ad_zhi=0,xz; 

EA=0; 

ad_start=1; 

for(k=0;k<5;k++) 

{ while(ad_stb); 

x=ad_244; 

x=x&0xf; 

ad_zhi=ad_zhi*10+x; 

} 

ad_start=0; 

EA=1;EX0=1; 

ad_zhi=ad_zhi>>1; 

xz=ad_zhi-50; 

xz=xz/100; 

ad_zhi=ad_zhi+xiuzheng[xz]; 

return(ad_zhi); 

void d_change(long X) 

{char qian,bai,shi,ge,shifen,baifen; 

long int yu; 

if(X>999999) error1(); 

qian=X/100000; yu=X%100000; 

bai=yu/10000; yu=yu%10000; 

shi=yu/1000; yu=yu%1000; 

ge=yu/100; yu=yu%100; 

shifen=yu/10; 

baifen=yu%10; 

qian=qian+0x30; 

bai=bai+0x30; 

shi=shi+0x30; 

ge=ge+0x30; 

shifen=shifen+0x30; 

baifen=baifen+0x30; 

if(qian==0x30) 

{qian=0x20; 

if(bai==0x30) 

{bai=0x20; 

if(shi==0x30) shi=0x20; 

} 

} 

shuju[0]=qian; 

shuju[1]=bai; 

shuju[2]=shi; 

shuju[3]=ge; 

shuju[4]='.'; 

shuju[5]=shifen; 

shuju[6]=baifen; 

} 

void baojing() 

{short i; 

for(i=0;i<50;i++) 

{baoj=0; 

for(dealy=0;dealy<10;dealy++); 

baoj=1; 

for(dealy=0;dealy<10;dealy++); 

} 

} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -