仿真原理图如下(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.51hei.com/bbs/dpj-206869-1.html
|