久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

電子秤AD TM7710/TM7709測試程序

作者:佚名   來源:本站原創(chuàng)   點擊數:  更新時間: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]="閩潘實業(yè)有限公司歡迎您 !!"; 

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 發(fā)送數據子程序 

{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 發(fā)送指令子程序 

{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 發(fā)送數據子程序 

{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:
 

關閉窗口

相關文章

主站蜘蛛池模板: 一级片观看 | 不卡免费视频 | 高清乱码男女免费观看 | 超碰成人网 | 成人免费视频视频 | 精品一区二区免费视频 | 香蕉成人| 国产高潮在线 | 日韩在线精品视频 | av在线免费观看网站 | 黄色一级片网站 | 韩日视频| 日日日干干干 | 成人毛片在线播放 | h视频在线播放 | 五月婷视频 | 爱搞逼综合网 | 亚洲天堂偷拍 | 亚洲成人免费av | 99国产精品99久久久久久 | 成人免费毛片aaaaaa片 | 亚洲美女网站 | 国产精品一区在线播放 | 婷婷伊人网 | 一区二区三区四区在线视频 | 国内外成人免费视频 | 9999精品视频 | 狠狠五月| 精品国产一区二区三区四区 | 五月精品| 黄色片www | 国产欧美日韩综合 | 亚洲免费观看视频 | 国产精品美女久久久久av爽 | 亚洲精品www久久久久久广东 | 视频一二区| 亚洲va韩国va欧美va精品 | 黄色国产精品 | 日韩一区二区三区视频 | 午夜tv| 超碰在线网站 |