仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
 
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar shu[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- float u,ti;
- double r,z4,z2,cun;
- long jie;
- double sum,money,date1,date2; //sum為重量,money為總金額, date為輸入單價, date1單價整數
- uint y,t;
- uint zhen,zhan,pan;
- uchar comcode,empt1,empt0,biaozhi,zheng,xiao;
- uchar g,m,h,ss,n,f1,f2,z,zengshu,qq,jia;
- uchar n,k,s,bb=0,data1,dip=0,dap=0;//n用來顯示總輸入,k識別輸入字符性質,dap識別顯示方式,dip為小數識別,bb小數字位數識別
- uchar jia1[]={0,0,0,0,0};
- uchar money1[]={0,0,0,0,0,0};//金額顯示
- void jianpan() ;//鍵盤函數申明
- sbit speak=P2^7;//報警
- sbit k2=P2^5;
- sbit d0=P2^0;//對應著138的A輸入端
- sbit d1=P2^1;//對應著138的B輸入端
- sbit d2=P2^2;//對應著138的C輸入端
- sbit d3=P2^3;//對應著138的E2控制端
- sbit m6=P0^6;
- sbit zt=P2^4;
- sbit xiaoshu=P0^7;
- void delay(uint z) //延時1mS函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=60;y>0;y--);
- }
- /******************************************************************************
- AD0832AD轉換子程序
- *******************************************************************************/
- sbit bADcs=P3^4; //片選位
- sbit bADcl=P3^6; //時鐘位
- sbit bADda=P3^7; //數據位
- void ad(void)
- { uchar i;
- bADcs = 0;//當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,開始工作CS為低電平
- bADcl=0; //第一個時鐘下降沿前da為1,第二個與第三時鐘下降沿前的數據為通道選擇
- bADda=1; //選置起始位
- bADcl=1;
- bADcl=0; // 1down
- bADda=1; //通道選擇第1位
- bADcl=1;
- bADcl=0; // 2 down
- bADda=0; //通道選擇第2位,通道選擇為1,0選通道0
- bADcl=1;
- bADcl=0; // 3 down
- bADda=1;
- bADcl=1;
- bADcl=0; // 4 down
- for(i=8;i>0;i--)
- {
- data1<<=1; //從第7位開始,要左移data1=data1<<1
- bADcl=0;
- bADcl=1;
- if(bADda==1) data1|=0x01; //如果輸出1,data1最后一位補1
- }
- bADcs=1; //轉換完后CS置1
- }
- /******************************************************************************
- AD0832AD數據處理程序
- *******************************************************************************/
- void zhiliang()
- {
- d3=0;
- sum=data1*0.0196078;
- zengshu=(uchar)sum;
- t=(uint)((sum-zengshu)*1000);
- P0=0x00;
- P0=shu[zengshu];
- d2=0;d1=0;d0=0;
- xiaoshu=1;
- delay(5);
- //xiaoshu=0;
- P0=0x00;
- P0=shu[t/100];
- d2=0;d1=0;d0=1;
- delay(5);
- P0=0x00;
- P0=shu[(t%100)/10];
- d2=0;d1=1;d0=0;
- delay(5);
- P0=0x00;
- P0=shu[(t%100)%10];
- d3=0;
- d2=0;d1=1;d0=1;
- delay(5);
- }
- void qian()//對總的金額進行處理
- {
- if(k=='=')//判斷是否對輸入的單價肯定
- {
- d3=1;
- money=ti*sum;
- z=(unsigned char)money;//取出總金額的8位整數部分
- if(money>255)//判斷是否超限
- {
- qq=1;//置其標志位,為零對金額進行顯示
- //k2=0;
- z=0;//清零
- speak=0;//報警標志
- }
- if(qq==0)//沒超出顯示的范圍且顯示金額
- {
- d3=1;//對138進行片選
- y=(money-z)*10;//取出小數部分
- P0=0x00;
- P0=shu[y];
- d2=1;d1=0;d0=1;
- xiaoshu=0;
- delay(5);
- P0=0x00;
- P0=shu[z%100%10];
- d2=1;d1=0;d0=0;
- xiaoshu=1;
- delay(5);
- P0=0x00;
- P0=shu[z%100/10];
- d2=0;d1=1;d0=1;
- delay(5);
- P0=0x00;
- P0=shu[z/100];
- d2=0;d1=1;d0=0;
- delay(5);
- //P0=0x00;
- //P0=shu[z/1000];
- //d2=0;d1=0;d0=1;
- //delay(5);
- //P0=0x00;
- //P0=shu[z/1000];
- //d2=0;d1=0;d0=0;
- //delay(5);
- }
- }
- }
- void zht()
- { TI=0;
- RI=0;
- dip=0;
- zt=0;
- k2=0;
- m=0;//清除按下數字鍵的個數
- r=0;//清除鍵值數據
- n=0;//清除鍵值
- h=0;//清除小數點的位數
- g=0;//清除按鍵的次數
- zhen=0;//清除鍵值處理好的數據
- zhan=0;//清除鍵值處理好的數據
- biaozhi=0;
- comcode=0;
- }
- /******************************************************************************
- 鍵盤子程序
- *******************************************************************************/
- void jianpan()
- { uchar temp;
- EX1=0;
- P1=0xfe;//判斷7、8、9、。
- temp=P1;
- temp=temp&0xf0;//判斷有無按鍵
- if(temp!=0xf0)
- {
- delay(5);
- temp=P1;
- temp=temp&0xf0;
- while(temp!=0xf0)//有按鍵
- {
- temp=P1;
- switch(temp)
- {
- case 0xee:n=7;k=1;s++;break;//K為數字與功能的判斷
- case 0xde:n=8;k=1;s++;break;
- case 0xbe:n=9;k=1;s++;break;
- case 0x7e:k='.';s++;break;
- }
- while(temp!=0xf0)//等待按鍵放開
- {
- temp=P1;
- temp=temp&0xf0;
- }
- }
- }
- P1=0xfd;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(5);
- temp=P1;
- temp=temp&0xf0;
- while(temp!=0xf0)
- {
- temp=P1;
- switch(temp)
- {
- case 0xed:n=4;k=1;s++;break;
- case 0xdd:n=5;k=1;s++;break;
- case 0xbd:n=6;k=1;s++;break;
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
- }
- }
- P1=0xfb;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(5);
- temp=P1;
- temp=temp&0xf0;
- while(temp!=0xf0)
- {
- temp=P1;
- switch(temp)
- {
- case 0xeb:n=1;k=1;s++;break;
- case 0xdb:n=2;k=1;s++;break;
- case 0xbb:n=3;k=1;s++;break;
- case 0x7b:k='-';break;//進入累加的標志位
- }
- if(temp==0x7b)//如果按下了清零鍵則將金額清零
- {
- zht();
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
- }
- }
- P1=0xf7;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(5);
- temp=P1;
- temp=temp&0xf0;
- while(temp!=0xf0)
- {
- temp=P1;
- switch(temp)
- {
- case 0xe7:k=' ';break;
- case 0xd7:n=0;k=1;s++;;break;
- case 0xb7:k='=';dip=1;jia=1;break;
- case 0x77:k='+';dap=2;break;//累加等于打標志位
- }
-
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
- }
- }
- }
-
- void tuichu()
- {qq=0;
- k=0;
- //if(k==' ')//判斷是否有退出鍵按下
- speak=1;//取消報警
- g=0;//清除按鍵的次數
- dip=0;//取消等于鍵按下的標志
- dap=0;//取消累加等于的標志
- jie=0;//清除累加的整數數據
- date2=0;//清除小數累加的數據
- m=0;//清除數字鍵按下的次數
- r=0;//清除鍵值
- n=0;
- h=0;//清除小數點的位置
- zhen=0;//清除單價值
- zhan=0;//清除單價值
- ti=0;//清除鍵值
- z=0;//清除累加的整數值
- y=0;//清除累加的小數值
- money=0;//清除金額
- zt=1;//取消報警
- bb=0;//清除累加的次數
- biaozhi=0;
-
- }
- void faleijia()//發累加的函數
- {TI=0;
- RI=0;
- zheng=0;
- zheng=(jie/256)+128;//一次計算的金額不會超過256,最先發送的是最高位
-
- xiao=y;
- //chaobiao=1;//抄表標志位置1
- EA=0;
- SBUF=zheng;//發高8位
- while(TI==0);
- TI=0;
- zheng=jie%256;//發送的是次高位
- //sum=data1*0.0196 ;
- //EA=0;//關中斷
- SBUF=zheng;//發整數
- while(TI==0);
- TI=0;
- SBUF=xiao;//發小數
- while(TI==0);
- TI=0;
- EA=1;
- }
- void leijia()//累加的函數
- {
- while(jia==1)//判斷是否按下了等于鍵,如果按下了則將當前的金額進行保存
- {bb=bb+1;//累加的次數
- //cun=sum;//將當前的
- ss=(uchar)money;//對當前的金額進行取整處理
- jie=jie+(long)ss;//累加上當前的整數金額
- cun=money-ss;//取出當前金額的小數部分
- date2=date2+cun;//累加上當前的小數金額
- jie=jie+(long)date2;//將小數累加的結果進行取整后,與累加的金額進行和運算
- z=(uchar)date2;//取出小數累加的整數,以便取出其小數
- y=(date2-z)*10;//將高位的小數擴大十倍,轉換成一位整數
- //z=(unsigned int)date2;
- //y=(date2-z)*10;
- jia=0;//等待下一次的按鍵
- //z=(unsigned char)date2;
- //y=(date2-z)*10;
- //qian();
- }//進入累加的顯示
- if(dap==2)//累加顯示
- {d3=1;//對138進行控制
- //k2=0;
- dip=1;//等于鍵的標志位
- //y=(money-z)*10;//取出小數部分
- P0=0x00;//段碼初始化
- P0=shu[y];//顯示小數
- d2=1;d1=0;d0=1;//位碼的地址
- delay(4);//調延時
- P0=0x00;//段碼初始化
- P0=shu[jie%10];//顯示累加的各位
- d2=1;d1=0;d0=0;
- xiaoshu=1;//固定顯示小數點
- delay(4);
- P0=0x00;//段碼初始化
- P0=shu[jie%100/10];//顯示累加的十位
- d2=0;d1=1;d0=1;
- delay(4);
- P0=0x00;//段碼初始化
- P0=shu[(jie/100)%10];//顯示累加的百位
- d2=0;d1=1;d0=0;
- delay(4);
- //P0=0x00;//段碼初始化
- //P0=shu[(jie/1000)%10];//顯示累加的千位
- //d2=0;d1=0;d0=1;
- //delay(4);
- //P0=0x00;
- //P0=shu[jie/10000];//顯示累加的萬位
- //d2=0;d1=0;d0=0;
- //delay(4);//進入累加的顯示
- d3=0;
- P0=0x00;//段碼初始化
- P0=shu[bb%10];//顯示累加的次數
- d2=1;d1=0;d0=0;
- delay(4);
- P0=0x00;//段碼初始化
- P0=shu[bb/10];//顯示累加的次數
- d2=1;d1=0;d0=1;
- delay(4);
- }
- }
- void zh()// 錄入數據的函數
- {
- if(s>0)//確認有數字和小數鍵按下了
- {
- g=g+1;//確定按下鍵的次數,并保存
- s=0;//準備下一次按鍵
- if(k==1)//確定是數字鍵按下了
- {
- m=m+1;//保存按下數字鍵的次數
- k=0;//保證只有數字按下鍵才執行,準備下一次按鍵
- switch(m)//開關判斷語句,無論小數都將其轉換為整數
- {
- //cy=m;//保存按下數字鍵的次數
- case 1:r=n;k=0;f1=r;break;//確認只有一個數字鍵按下了
- case 2:r=(r*10)+n;k=0;f2=r;break;//確認只有二個數字鍵按下了
- case 3:r=(r*10)+n;k=0;break;//確認只有三個數字鍵按下了
- }
- }
- if(k=='.')//判斷是否有小數點按下
- {
- //k2=0;
- //w='.';
- //e=1;//置其標志位
- h=g;//將按鍵的次數保存到h
- k=0;//準備下一次按鍵
- }
- if((h==m)&&(m==2))//一位小數和一位整數的處理
- {
- r=f1+(n*0.1);
- u=f1+(n*0.1);//考慮
- }
- if((h==m)&&(m==3))//一位小數和兩位整數的處理
- {
- r=f2+(n*0.1);
- z4=r;//考慮
- }
- if((m==3)&&(h==2))//兩位小數和一位整數的處理
- {
- //k2=0;
- r=u+(n*0.01);
- //r=c;
- z2=r;
- }
- if((h==2)&&(m==4))//三位小數和一位整數的處理
- {
- r=z2+(n*0.001); //r=u;
- }
- if((h==3)&&(m==4))//兩位小數和兩位整數的處理
- {
- r=z4+(n*0.01);}
- if((h==4)&&(m==4))//一位小數和三位整數的處理
- {
- r=r+(n*0.1);}
- if(((r>255)&&(h==0))||(m>4))//如果鍵值超限則報警
- {
- //write_com(0x01);//有問題
- //r=0;//清除超限的數據
- speak=0;//置報警標志
- //WriteString(runout,0,0);
- }
- }
- ti=r;//
- }
- void danjiaxian()//單價的顯示程序
- {
- P0=0x00;//清零
- //P2=0xff;
- d3=0;//數碼管的控制端
- if(m==1)//顯示一位數字
- {
- P0=shu[n];
- d2=1;d1=0;d0=0;//位碼地址
- delay(5);//調延時
- }
- if((g==2)&&(m==1))//有兩次按鍵,一次整數,一次小數點,即顯示一位數字和一位小數
- {
- xiaoshu=1;//小數點控制位
- d2=1;d1=0;d0=0;
- delay(5);}
- if(m==2)//顯示兩位數字
- {
- zhan=(unsigned int)r;//對鍵值進行取整數處理
- if(zhan<=9)//有小數點按下了
- {//xiao=1;
- zhan=zhan*10+n;//兩位數中如果有一位小數則擴大十倍
- }
- if((h==3)&&(m==2))
- {
- xiaoshu=1;
- d2=1;d1=0;d0=0;
- delay(5);}
- P0=0x00;
- //P2=0xff;
- P0=shu[zhan%10];
- d2=1;d1=0;d0=0;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhan/10];
- d2=1;d1=0;d0=1;
- delay(5);
- }
- if((r<10)&&(m==2))
- {
- xiaoshu=1;
- d2=1;d1=0;d0=1;
- delay(5);
- }
-
- if(m==3)
- {
- zhen=(unsigned int)r;//(uint)r;
- //pan=zhen;
- if(zhen<10)
- {pan=zhen;
- //if(er==1)//三位數中如果有兩位小數則擴大百倍
- zhan=(r-zhen)*100;
- zhen=zhen*100+zhan;
- }
- if(zhen<=99)
- {pan=zhen;
- zhan=(r-zhen)*10;
- zhen=zhen*10+zhan;
- }
- if((r>99)&&(h==4))
- {xiaoshu=1;
- d2=1;d1=0;d0=0;
- delay(2);}
- if((h==3)&&(m==3))
- {
- xiaoshu=1;
- d2=1;d1=0;d0=1;
- delay(5);}
- P0=0x00;
- //P2=0xff;
- P0=shu[n];
- d2=1;d1=0;d0=0;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhen/10%10];
- d2=1;d1=0;d0=1;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhen/100];
- d2=1;d1=1;d0=0;
- delay(5);
- }
- if((r<10)&&(m==3))
- {xiaoshu=1;
- d2=1;d1=1;d0=0;
- delay(5);}
- if(m==4)
- {
- //if(r==1999)
- //k2=0;
- zhen=(uint)r;
- if(zhen<10)
- {
- //if(er==1)//三位數中如果有兩位小數則擴大百倍
- zhan=(r-zhen)*1000;
- zhen=zhen*1000+zhan;
-
- }
- if(zhen<=99)
- {zhan=(r-zhen)*100;
- zhen=zhen*100+zhan;
- }
- if(zhen<255)
- {
- zhan=(r-zhen)*10;
- zhen=zhen*10+zhan;
-
- }
- if((h==4)&&(m==4))
- {
- d2=1;d1=0;d0=1;
- xiaoshu=1;
- delay(5);
- }
- if((h==2)&&(m==4))
- {
- d2=1;d1=1;d0=1;
- xiaoshu=1;
- delay(5);
- }
- if((h==3)&&(m==4))
- {
- d2=1;d1=1;d0=0;
- xiaoshu=1;
- delay(5);
- }
- P0=0x00;
- //P2=0xff;
- P0=shu[n];
- d2=1;d1=0;d0=0;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhen/10%10];
- d2=1;d1=0;d0=1;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhen/100%10];
- d2=1;d1=1;d0=0;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[zhen/1000];
- d2=1;d1=1;d0=1;
- delay(5);
- }
- }
- void danjia1()//下位機接受單價并顯示的程序
- {
- d3=0;
- jia1[0]=empt1/100;
- jia1[1]=(empt1%100)/10;
- jia1[2]=(empt1%100)%10;
- jia1[3]=empt0/10;
- r=empt1+jia1[3]*0.1;//把上位機發過來的值變成單價,只要有單價則就有金額 有問題
- money=r*sum;//計算出此次測量的金額
- //jia1[4]=empt0%10;
- P0=0x00;
- //P2=0xff;
- P0=shu[jia1[0]];
- d2=1;d1=1;d0=1;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[jia1[1]];
- d2=1;d1=1;d0=0;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[jia1[2]];
- d2=1;d1=0;d0=1;
- xiaoshu=1;
- delay(5);
- P0=0x00;
- //P2=0xff;
- P0=shu[jia1[3]];
- d2=1;d1=0;d0=0;
- delay(5);
- //empt1=0;
- //empt0=0;
- //biaozhi=0;
-
- }
- void jine1()
- {
- d3=1;//對138進行片選
- jia1[0]=empt1/100;
- jia1[1]=(empt1%100)/10;
- jia1[2]=(empt1%100)%10;
- jia1[3]=empt0/10;
- P0=0x00;
- P0=shu[jia1[3]];
- d2=1;d1=0;d0=1;
- xiaoshu=0;
- delay(5);
- P0=0x00;
- P0=shu[jia1[2]];
- d2=1;d1=0;d0=0;
- xiaoshu=1;
- delay(5);
- P0=0x00;
- P0=shu[jia1[1]];
- d2=0;d1=1;d0=1;
- delay(5);
- P0=0x00;
- P0=shu[jia1[0]];
- d2=0;d1=1;d0=0;
- delay(5);
- //empt1=0;
- //empt0=0;
- //biaozhi=0;
- //comcode=0;
- }
- void sendcishu()
- {
- RI=0;
- EA=0;
- SBUF=8;//發高8位
- while(TI==0);
- TI=0;
- //sum=data1*0.0196 ;
- //EA=0;//關中斷
- SBUF=bb;//發整數
- while(TI==0);
- TI=0;
- SBUF=bb;//發小數
- while(TI==0);
- TI=0;
- EA=1;
- }
- void send()//抄表發送程序
- {zheng=0;
- TI=0;
- zheng=(uchar)data1*0.0196078;//一次計算的金額不會超過256
- RI=0;
- xiao=(uchar)((sum-zheng)*100);
- //chaobiao=1;//抄表標志位置1
- EA=0;
- SBUF=4;//發高8位
- while(TI==0);
- TI=0;
- //sum=data1*0.0196 ;
- //EA=0;//關中斷
- SBUF=zheng;//發整數
- while(TI==0);
- TI=0;
- SBUF=xiao;//發小數
- while(TI==0);
- TI=0;
- EA=1;
- }
- void senddanjia()//抄表發送程序
- { zheng=0;
- EA=0;
- RI=0;//拒絕此時接受
- TI=0;
- zheng=(uchar)r;//取出單價的整數
- xiao=(uchar)((r-zheng)*100);//取出單價的小數部分
- SBUF=5;//發出單價識別項
- while(TI==0);
- TI=0;
- SBUF=zheng;//發送單價的整數部分
- while(TI==0);
- TI=0;
- SBUF=xiao;//發送單價的小數部分
- while(TI==0);
- TI=0;
- EA=1;//重新開中斷
- }
- void sendjine()//抄表發送程序
- { zheng=0;
- EA=0;//關掉中斷但各標志位都是有效的
- RI=0;//拒絕此時此刻的接受
- TI=0;//發送標志位清零
- zheng=(uchar)money;//取出金額的整數
- xiao=(uchar)((money-zheng)*100);//取出金額的小數部分
- SBUF=6;//發出單價識別項
- while(TI==0);
- TI=0;
- SBUF=zheng;//發送單價的整數部分
- while(TI==0);
- TI=0;
- SBUF=xiao;//發送單價的小數部分
- while(TI==0);
- TI=0;
- EA=1;//重新開中斷
- }
- //danjia[4]=empt0%10;
- void main()
- {
- TMOD=0x20;//T0計數,工作方式2,自動再裝
- SCON=0x50;//串口通信方式1,波特率由T1的溢出率決定
- //TH0=224;//32個脈沖為0。01度電
- //TL0=224;
- TH1=0xfd;//波特率9600
- TL1=0xfd;
- PCON=0x00;PS=1;//SMOD=0,波特率不倍增,串口中斷優先
- EA=1;ES=1;//開中斷,注意ET1不能開放,否則死機
- TR1=1;//啟動定時
- while(1)
- {
- //if(ddd==0)
- ad();//adc的轉換程序
- jianpan();//鍵盤的處理程序
- zh();//鍵盤的轉換程序
- //if(dip==0)
- zhiliang();//重量的顯示程序
- //qingling();
- if((dap!=2)&&(d3!=1))
- danjiaxian();//單價的顯示程序
- if(dip==1)
- {
- senddanjia();
- delay(2);
- //jia=0;
- //delay(5);
- sendjine();
- }
- qian();//金額的顯示程序
- //if(k==' ')//判斷是否有退出鍵按下
- //{
- //dip=0;//使金額不顯示
- //}
- send();
- leijia();//調用累加函數
- if(dap==2)
- {RI=0;
- sendcishu();
- delay(2);
- RI=0;
- faleijia();//發累加給上位機
- }
- if(k==' ')//判斷是否有退出鍵按下
- tuichu();
- if(biaozhi==2)
- {
- jine1();
- }
- if(biaozhi==1)
- danjia1();
- if(biaozhi==3)
- tuichu();
- if(biaozhi==5)
- {
- zht();
- biaozhi=0;
- }
- if(biaozhi==4)
- dap=2;//打開累加顯示
- //if(k=='+')
- //{dip=0;
- //leijia();
- //if((jie==jie+(r*sum))
- }
- }
- void int4() interrupt 4//串口中斷函數
- {
- EA=0;//先關閉中斷,防止共他中斷干擾
- RI=0;
- TI=0;
-
- comcode=SBUF; //再收控制碼
- if(comcode==2)
- {
- biaozhi=5;}
- if(comcode==4)
- {//RI=0;
- // biaozhi=0;
- //comcode=0;
- biaozhi=4;}
- if(comcode!=4)
- {
- if(comcode!=2)
- {
- //comcode=SBUF; //再收控制碼
- if(comcode!=7)
- {
- while(RI==0);
- RI=0;
- empt1=SBUF; //接收充值的整數
- while(RI==0);
- RI=0;
- empt0=SBUF;//接收充值的小數
- }
- if(comcode==1)
- {//RI=0;TI=0;//繼續接受
- biaozhi=1;
- //comcode=0;
- }
-
- //zhenshu=empt1+(empt0*0.01);//合成整數
- //dim=1;//存儲標志置1,存一次
-
- //if(comcode==3)) //如控制碼為2,為抄重量
- //{
- //sum=data1*0.0196 ;
- //zheng=(uchar)sum;
- //xiao=(uchar)((sum-zheng)*100);
- //chaobiao=1;//抄表標志位置1
- // EA=0;//關中斷
- //SBUF=data1;//發整數
- //while(TI==0);
- //TI=0;
- //SBUF=data1;//發小數
- // while(TI==0);
- //TI=0;
- //comcode=0;
- //EA=1;//重新開中斷
- // }
- if(comcode==3) //如控制碼為3為寫金額
- {jia=1;
- //bb=bb+1;
- //comcode=0;
- //biaozhi=0;
- //RI=0;TI=0;
- biaozhi=2;
- }
-
- if(comcode==7)
- {
- //RI=0;
- //biaozhi=0;
- //comcode=0;
- biaozhi=3;}}}
-
- EA=1;//重新開中斷
- }
復制代碼
仿真工程下載:http://www.raoushi.com/bbs/dpj-206869-1.html
|