欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

電子秤AD TM7710/TM7709測試程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年11月26日   【字體:
#include <reg52.h> 

#include<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]="閩潘實業有限公司歡迎您 !!"; 

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++); 

} 

} 

參考書目:

《電子電路設計與實踐》 山東科學技術出版社 姚福安著

《新型集成電路》 西安電子科技大學出版社 楊振江著

《 8051 單片機實踐與應用》 清華大學出版社 吳金戎著

《積分式 A/D 轉換器其他專用集成電路分冊》

科學技術文獻出版社 梁廷貴著

Abstract
The design is based on the microcontroller AT89S52 system, has reliably actualized the meterage of weigh from 10g to 10Kg , and has the part of sampling circuit composed of ICL7135 、 a differential measuring amplifier .Our system can accurately measure weigh, and calculate the price .The data collected are processed by the microcontroller and then displayed in the LCD. In addition, to make the display more visual and convenient, our system can easily display the bill of every buyers.

Subject terms:
 

關閉窗口

相關文章