您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子秤566797677
单片机课程设计课程设计题目:电子秤设计学院:物理与电子科学学院专业:电子信息科学与技术班级:08级电子3班队员姓名:伍贯礼学号:200840620335王礼涛学号:200840620331杨占胜学号:200840620350方华荣学号:200840620305指导教师:王宪菊设计要求:利用电位器电压模拟外部变化的重量信号,在1602第一行显示重量,通过4*4键盘(采用proteus里的KEYPAD-SMALLCALC)输入单价,在第二行显示总价。基本电路:单片机LCD16024*4按键ADC0832电子秤的工作原理:当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力-电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。此信号由放大电路进行放大、经滤波后再由模/数(A/D)器进行转换,数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各种功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到内存贮器,需要显示时,CPU发出指令,从内存贮器中读出送到显示器显示,或送打印机打印。一般地信号的放大、滤波、A/D转换以及信号各种运算处理都在仪表中完成。设计思路:利用电位器电压模拟外部变化的重量信号,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。单片机经过相应的处理后,得出当前所称物品的重量及总额,然后再显示出来。此外,还可通过键盘设定所称物品的价格。主要技术指标为:称量范围0~10kg;分度值10/256kg。系统总图系统方案论证与选型程序代码#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#definenop_nop_()#definechannal_00x02sbitlcden=P2^1;//液晶使能端sbitlcdrs=P2^0;//液晶数据命令选择端sbitcs=P2^2;//adc0832片选端sbitclk=P2^3;//adc0832时钟sbitd=P2^4;//adc0832的输入通道及数字量输出端sbitACC1=ACC^1;sbitACC0=ACC^0;ucharcodetable[]=kg;ucharcodetable1[]=yuan/kg;ucharcodetable2[]=Price:;ucharcodetable3[]=yuan;ucharcodetable4[]=total:;ucharcodetable5[]=Weight:;ucharnum,n,s,k;uintm1;延时子程序voiddelay(uintz)//延时z毫秒{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}lcd1602写命令函数输入:comvoidwrite_com(ucharcom){lcdrs=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;}lcd1602写数据函数输入:datevoidwrite_data(uchardate){lcdrs=1;P1=date;delay(5);lcden=1;delay(5);lcden=0;}lcd1602初始化函数voidinit(){lcden=0;write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口write_com(0x0c);//设置开显示,不显示光标write_com(0x06);//写一个字符后地址指针加1write_com(0x01);//显示清零,数据指针清零}adc0832启动函数voidstart()//在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。{cs=1;nop;clk=0;nop;cs=0;nop;d=1;nop;clk=1;nop;d=0;clk=0;nop;}adc0832读函数ucharadc0832(ucharchannal)//在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能{uchari;start();ACC=channal;//应用ACC可以位寻址d=ACC1;clk=1;nop;d=0;clk=0;d=ACC0;clk=1;nop;d=1;clk=0;clk=1;nop;ACC=0;for(i=0;i8;i++)//转化后的数字量送到ACC中{clk=0;ACC=ACC1;ACC0=d;clk=1;}cs=1;returnACC;}键盘扫描函数voidkey(){uchartemp;P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0)//按键消抖{delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp)//判断第一行哪一个按键按下{case0xee:num=1;n=7;k=1;break;case0xde:num=2;n=8;k=1;break;case0xbe:num=3;n=9;k=1;break;case0x7e:num=4;k='/';break;}while(temp!=0xf0)//直到按键松开{temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp)//判断第二行哪一个按键按下{case0xed:num=5;n=4;k=1;break;case0xdd:num=6;n=5;k=1;break;case0xbd:num=7;n=6;k=1;break;case0x7d:num=8;k='*';break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp)//判断第三行哪一个按键按下{case0xeb:num=9;n=1;k=1;break;case0xdb:num=10;n=2;k=1;break;case0xbb:num=11;n=3;k=1;break;case0x7b:num=12;k='-';break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp)//判断第四行哪一个按键按下{case0xe7:num=13;k='';break;case0xd7:num=14;n=0;k=1;break;case0xb7:num=15;k='=';break;case0x77:num=16;k='+';break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}}主函数voidmain(){ucharnum1,date,i;uchara1,a2,a3,a4;uints1,s2,s3;init();write_com(0x80+14);while(table[num1])//显示table的内容{write_data(table[num1]);delay(5);num1++;}write_com(0x80);//显示table5的内容for(i=0;i7;i++){write_data(table5[i]);delay(5);}num1=0;write_com(0x80+0x40);while(table2[num1])//显示table3的内容{write_data(table2[num1]);delay(5);num1++;}while(1){date=adc0832(channal_0);//选择通道0s1=date*10/256;//把0~255转化成0~10s2=((date*10%256)*10)/256;s3=((((date*10%256)*10)%256)*10)/256;write_com(0x80+8);//在第一行显示重量write_data(0x30+s1);write_data('.');write_data(0x30+s2);write_data(0x30+s3);key();if(k==1)//有数字键按下{write_com(0x80+0x40);//在第二行显示table2内容for(i=0;i6;i++){write_data(table2[i]);delay(5);}write_com(0x80+0x40+7);//显示输入的价格write_data(0x30+n);write_com(0x80+0x40+9);//显示table1的内容for(i=0;i7;i++){write_data(table1[i]);delay(5);}}if(k=='=')//按下=号{write_com(0x80+0x40);//显示table4的内容for(i=0;i6;i++){write_data(table4[i]);delay(5);}m1=s1*100+s2*10+s3;//计算总价m1=m1*n;a1=m1/1000;a2=m1%1000/100;a3=m1%100/10;a4=m1%10;write_com(0x80+0x40+6);//显示总价write_data(0x30+a1);write_data(0x30+a2);write_data('.');write_data(0x30+a3);write_data(0x30+a4);write_com(0x80+0x40+11);//显示table3的内容if(k=='')//按下on/c键{num1=0;write_com(0x80+0x40);//显示table2的内容while(table2[num1]){write_data(table2[num1]);delay(5);num1++;}}}}谢谢观赏
本文标题:电子秤566797677
链接地址:https://www.777doc.com/doc-76428 .html