课程设计报告基于单片机的数字电子称设计_第1页
课程设计报告基于单片机的数字电子称设计_第2页
课程设计报告基于单片机的数字电子称设计_第3页
课程设计报告基于单片机的数字电子称设计_第4页
课程设计报告基于单片机的数字电子称设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、五邑大学 信息工程学院课 程 设 计 报 告课程名称: 电子系统设计技术 专 业: 通信工程 班 级: ap10059 学 号: ap1005941 姓 名: 张琰 指导教师: 周开利 设计时间: 2012/9/1/2013/1/5 评定成绩: 设计课题题目:_基于单片机的数字电子称设计_一、设计任务与要求1、通过单片机控制设计一个具有显示单价、质量和计算总价等智能数字电子秤。并通过电阻式应变片进行称重测量。2、通过按键可以调整单价、最大称量值,并且能实现去皮处理。3、具有超重自动报警功能。4、附加显示功能二、课题分析与方案选择数字电子秤通过秤量,需要将相关数据以及结果显示出来,所以需要有显示

2、电路。方案一:采用led数码管显示。led数码管经过合理的设置可以完成显示被测物质量、单价、总价,以及显示最大称量值的任务,并且经济耐用。同时led具有高亮度、高刷新率的优点,能提供宽达160度的视角,可以在较远的距离上看清楚。但是它的显示存在信息量少,显示不直观,不易理解,连线复杂等缺点。方案二:采用lcd液晶屏显示。lcd液晶屏具有字符显示的功能,不但可以同时显示被测物质量、单价、总价以及最大称量值,还可以同时显示相应的控制命令、指示符号及单位等,信息量丰富且直观易懂。另外,液晶显示具有功耗低,体积小,质量轻,寿命长,不产生电磁辐射污染等优点。综合比较两者的优缺点,本设计最终采用lcd16

3、02作为显示模块。总体方案设计:综合考虑本次设计要求、现有元器件资源、元器件价格和对元器件的熟悉掌握程度,本次设计选用stc89c52作为cpu控制器,adc0809作为模数转换器件,lcd1602作为显示器件,再配以其他相关元器件来实现硬件电路的设计。3、 单元电路分析与设计1传感器的设计:(!)使用应变片式的电阻传感器。(2)电阻应变式传感器测量电路设计:由于机械应变一般都很小,要把微小应变引起的微小电阻值的变化测量出来,就需要设计专用的测量电路。常采用桥式测量电路。桥式测量电路如下图所示,它有四个电阻,其中任何一个电阻均可以是应变片,当两组对边的阻值乘积相等(即r8*r10=r9*(rv

4、4+r11)时,电路平衡输出电压为零,当应变片电阻变化0.01(rv4变化1%)时都会有电压输出。本次设计采用一个应变片构成的单臂测量电路,而通过两个应变片可增大一倍的秤量值。图中用(rv4+r11)代替350应变片bf350-3aa (23) n8,u+、u-为输出端。(3)放大电路设计: 传感器输出电压为毫伏级,而a/d转换器所能处理的电压是05v,所以必须在a/d转换器前加入一个前置差动放大电路以实现电压的放大,放大倍数为1001000倍,使输出电压为05v。由于单运放在应用中要求外围电路匹配精度高、增益调整不便、差动输入阻抗低,而三运放结构具有差动输入阻抗高、共膜抑制比高、偏置电流低等

5、优点,且有良好的温度稳定性,低噪声输出和增益调整方便,适于在传感电路中应用。如图所示,采用lm324中的三个运放组成该放大电路。图中r为增益调节电阻,可实现1g级别调整。u1:a,b为两个电压跟随器,u1:c为差分放大器,根据计算公式:可知通过改变外围电阻值即可调整放大倍数,该电路放大倍数为500以上。u+、u-为感应信号信号输入端,out为输出端。2.a/d转换电路设计:(1)adc0809原理简介:adc0809是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行a/d转换。adc0808

6、是adc0809的简化版本,功能基本相同。一般在硬件仿真时采用adc0808进行a/d转换,实际使用时采用adc0809进行a/d转换。(2)a/d转换电路图:adc0809引脚功能:15和2628(in0in7):8路模拟量输入端。 8、14、15和1721:8位数字量输出端。 22(ale):地址锁存允许信号,输入,高电平有效。 6(start): ad转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动a/d转换)。 7(eoc): ad转换结束信号,输出,当ad转换结束时,此端输出一个高电平(转换期间一直为低电平)。 9(oe):数据输出

7、允许信号,输入,高电平有效。当ad转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 10(clk):时钟脉冲输入端。要求时钟频率不高于640khz。 12(vref(+)和16(vref(-):参考电压输入端 2325(adda、addb、addc):3位地址输入线,用于选通8路模拟输入中的一路。11(vcc):主电源输入端;13(gnd):地。(图中没显示出来)上图中,74hc74为双上升沿d触发器。adda、addb、addc接地,选择in0为模拟量输入端。为了调试方便,输入端通过一个单刀双掷开关选择电位器模拟输出或应变片感应信号输出,先掷电位器端当adc0808工作正常时

8、,再掷向应变片感应信号输出端。由于adc0808芯片的时钟频率的要求,则需要将单片机的ale信号分频再传给adc0808,本设计选用两个d触发器对ale信号进行分频。adc0808数字输出端直接接单片机p1口即可。3.显示电路设计:(1)液晶显示原理简介:液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。本设计采用的是字符式液晶显示器lcd1602.用lcd显示一个字符时比较复杂,因为一个字符由或点阵组成,既要找到和显示屏幕上某几个位置对应的显示ram区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这

9、样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在lcd上开始显示的行列号及每行的列数找出显示ram对应的地址,设立光标,在此送上该字符对应的代码即可。(2)显示电路图:lcd1602引脚功能:3脚(vee)为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高会产生“鬼影”,实际使用时可以通过一个10k的电位器调整对比度。4脚(rs)为寄存器选择端,高电平时选择数据寄存器、低电平时选择指令寄存器。5脚(rw)为读写信号线,高电平时进行读操作、低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地

10、址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。6脚(e)为时能端,当e端由高电平跳变成低电平时,液晶模块执行命令。714脚(d0d7)为8位双向数据线。15脚为背光源正极;16脚为背光源负极。图中rn1为10k排阻,用作上拉电阻。4.报警电路设计:本设计采用蜂鸣器作为报警器,从而实现阀值报警功能。其设计电路如图所示,将蜂鸣器的正极接vcc,负极接pnp三极管s9012的集电极,s9012的基极串联一个2k的电阻再接到单片机p2.4口,当p2.4为高电平时,s9012无法导通,蜂鸣器不叫,当p2.4为低电平时,s9012导通,蜂鸣器报警。电路图如下:四、

11、总原理图及元器件清单1总原理图主程序设计的流程如下图所示,开机后先对lcd1602进行初始化,并显示单价及上限阀值,接下去则循环采集ad数据及键盘程序。2.ad数据采集程序设计:ad数据采集由adc0808芯片来完成,主要分为启动、读取数据、等待转换结束、读出转换结果、采集的数据求和、取平均几个步骤。adc0809初始化后,就具有了将某一通道输入的05v模拟信号转换成对应的数字量0x000xff,然后再存入指定缓冲单元中。其转换方式可以采用程序查询方式,延时等待方式和中断方式三种。本设计采用的是延时等待方式,具体程序流程图如图所示。ad采集子程序启动adc0808等待转换结束采集数据将所采集的

12、数据相加是否采集了10次?返回主程序采集数据取平均yn开始lcd1602初始化显示初始化ad数据采集及处理键盘扫描及处理3.键盘处理程序设计:在本设计中,总共用到三个按键。按键0是模式切换键,按一下进入单价设定状态,按两下进入最大称量值设定状态,按三下进入去皮处理状态,再按一下返回正常显示。按键1实现对单价或最大称量值加一的功能。按键2实现对单价或最大称量值减一的功能。每个按键对应的流程图如下所示。按键0子程序返回主程序count+1count=0count=1,进入单价调整状态count=2,进入上限调整状态count=3,进入去皮处理状态count=3?yn单价-1量程上限-1按键2子程序

13、返回主程序count=1?count=2?yynn单价+1量程上限+1按键1子程序返回主程序count=1?count=2?yynn程序如下:#include<stdio.h>#include<reg52.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intsbit an=p23;sbit ep=p25;sbit rw=p26;sbit rs=p27;sbit st=p35;sbit b_dis=p24;sbit busy=p33;sbit en=p34;uchar

14、code table="hello,welcome!"uchar code table1="design2008041533"uchar code table2="too heavy!"uchar code table3="please slow down"unsigned char count,pr=5,max=199,key_num=0,num,m,s,d,h,l;unsigned int g=0x00;unsigned char bcd_dis4,bcd_p2,bcd_m4,bcd_z5;void delay

15、(unsigned int i)for(;i>0;i-);void delay1(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com)rs=0;p0=com;delay1(5);ep=1;delay1(5);ep=0;void write_data(uchar date)rs=1;p0=date;delay1(5);ep=1;delay1(5);ep=0;void init()ep=0;write_com(0x38);write_com(0x0c);write_com(0x06);

16、write_com(0x01);void mall()while(1) rw=0;init();write_com(0x80+0x10);for(num=0;num<14;num+)write_data(tablenum);delay1(5);write_com(0x80+0x50);for(num=0;num<16;num+)write_data(table1num);delay1(5);for(num=0;num<16;num+)write_com(0x18);delay1(400);delay1(3000);void maii() rw=0;init();write_c

17、om(0x80);for(num=0;num<10;num+)write_data(table2num);delay1(5);write_com(0x80+0x40);for(num=0;num<16;num+)write_data(table3num);delay1(12);delay1(400);void lcd_wc(unsigned char command)rs=0;rw=0;ep=0;delay(2);p0=command;delay(4);ep=1;delay(4);ep=0;void lcd_wd(unsigned char dat)rs=1;rw=0;ep=0;d

18、elay(2);p0=dat;delay(2);ep=1;delay(4);ep=0;void lcd_on(void)lcd_wc(0x0c);delay(256); void lcd_clear(void)lcd_wc(0x01);delay(256);void lcd_set_pos(unsigned char wz)lcd_wc(wz|0x80); /?delay(256);void lcd_init(void)lcd_wc(0x38);delay(256);lcd_on();lcd_wc(0x06);delay(256);lcd_clear(); void lcd_disp(unsi

19、gned char string)int i=0;while(stringi)lcd_wd(stringi+);delay(1000); void a_d(void)g=0;for(h=0;h<10;h+)p1=0xff;st=0;delay(1);st=1;delay(1);st=0;while(busy);g=g+p1;delay(1000);unsigned char key(void)unsigned char temp,i;key_num=0;if(p2&0x0f)=0x0f)return(0xff);delay(5);if(p2&0x0f)=0x0f)retu

20、rn(0xff);temp=p2&0x0f;for(i=0;i<3;i+)if(temp&0x01)=0)break;temp=temp>>1;key_num+;while(p2&0x0f)!=0x0f);return(key_num); void bcd_p(unsigned char b)bcd_p0=b%10+0x30;bcd_p1=0x00;void bcd(unsigned char b)bcd_dis0=b/100+0x30;bcd_dis1=b/10%10+0x30;bcd_dis2=b%10+0x30;bcd_dis3=0x00;voi

21、d bcd_z(unsigned int b)bcd_z0=b/1000+0x30; bcd_z1=b/100%10+0x30; bcd_z2=b/10%10+0x30;bcd_z3=b%10+0x30; bcd_z4=0x00;unsigned char f_bcd(void)d=(bcd_m0-0x30)*100+(bcd_m1-0x30)*10+bcd_m2-0x30;return(d);void m_init(void)lcd_set_pos(0x00);lcd_disp("p:");lcd_set_pos(0x08);lcd_disp("m: g&quo

22、t;); lcd_set_pos(0x40);lcd_disp("$:");lcd_set_pos(0x48);lcd_disp("max:");lcd_set_pos(0x02);bcd_p(pr);lcd_disp(bcd_p);lcd_set_pos(0x4c);bcd(max);lcd_disp(bcd_dis);b_dis=1;bcd(max);bcd_m0=bcd_dis0;bcd_m1=bcd_dis1;bcd_m2=bcd_dis2;bcd_m3=bcd_dis3;s=max;bcd_p(pr);lcd_set_pos(0x42);bcd

23、_z(int)m*(bcd_p0-0x30);lcd_disp(bcd_z);void key_0(void)if(count=3)count=0;else count+=1;switch(count)case 1:lcd_set_pos(0x4f);lcd_disp(" ");lcd_set_pos(0x05);lcd_disp("?");break;case 2:lcd_set_pos(0x05);lcd_disp(" ");lcd_set_pos(0x4f);lcd_disp("?");break;case

24、3:lcd_set_pos(0x05);lcd_disp(" ");lcd_set_pos(0x4f);lcd_disp(" ");l=g/10;/?/lcd_set_pos(0x0a);/bcd(m);/lcd_disp(bcd_dis);break;default:lcd_set_pos(0x05);lcd_disp(" ");lcd_set_pos(0x4f);lcd_disp(" ");break;void key_1(unsigned char b)if(count=1)bcd_p0+=1;if(bcd_

25、p0=0x3a)bcd_p0=0x30;lcd_set_pos(0x02);lcd_disp(bcd_p);if(count=2)bcd_m2+=1;if(bcd_m2=0x3a) bcd_m2=0x30;bcd_m1+=1;if(bcd_m1=0x3a)bcd_m1=0x30;bcd_m0+=1;if(bcd_m0=0x32)&(bcd_m1=0x30) bcd_m0=0x30;bcd_m1=0x30;bcd_m2=0x31;lcd_set_pos(0x4c);lcd_disp(bcd_m);f_bcd();s=d;if(s<m)b_dis=0;void key_2(unsig

26、ned char b)if(count=1)bcd_p0-=1;if(bcd_p0=0x2f)bcd_p0=0x39;lcd_set_pos(0x02);lcd_disp(bcd_p);if(count=2)bcd_m2-=1;if(bcd_m2=0x2f) bcd_m2=0x39;bcd_m1-=1;if(bcd_m1=0x2f)bcd_m1=0x39;bcd_m0-=1;if(bcd_m0=0x30)&(bcd_m1=0x30)&(bcd_m2=0x30) bcd_m0=0x32;bcd_m1=0x30;bcd_m2=0x30;lcd_set_pos(0x4c);lcd_d

27、isp(bcd_m);f_bcd();s=d;if(s<m)b_dis=0;void main()unsigned char k=0xff;en=1;lcd_init();delay(15*256);m_init();while(1)an=1;a_d();k=key();b_dis=1;switch(k)case 0:key_0();break;case 1:key_1(m);break;case 2:key_2(m);break;default:break;if(an=0)mall();if(count=3)if(g/10>l)/l是固定值,g/10是变化值m=g/10-l;el

28、se m=l-g/10;else m=g/10;lcd_set_pos(0x0a);bcd(m);lcd_disp(bcd_dis);if(s<m)b_dis=0;maii();lcd_init();delay(15*256);m_init();lcd_set_pos(0x42);bcd_z(int)m*(bcd_p0-0x30);lcd_disp(bcd_z); 2元件清单器件名称个数器件名称个数adc08091电解电容4.7uf1lcd16021电解电容10uf1lm324 1电容0.1uf2stc89c521电容22pf274hc74 1电位器10k2电阻1k 1复位键 5电阻2k

29、 1 蜂鸣器 1电阻10k 5 三极管pnp90121电阻20k 2 发光二极管1电阻1m 2 电源 1开关 1 晶体振荡器1重力传感器1五、安装与调试1.pcb设计: 本设计通过altium designer 6软件设计pcb电路板,先进行原理图设计,然后导入pcb图布局布线。下图分别为原理图和pcb图。2.元器件焊接与功能调试:pcb图中元器件焊接完成后,进行桥式测量电路的焊接,并将其用双面胶黏在电路板上。经过测试,实现了通过手按应变片的压力大小改变液晶显示称量值功能,而且称量值与压力基本上成正比。桥式电路引出的四条线中,红色短线为输出u+,蓝色导线输出u-,红色长线为电压输入正极,黑线为

30、电压输入负极。最下面两个插针接电路板5v电压输入(上负下正),旁边为自锁开关控制电源通断。电路板有三个电位器,左上方的用来调节液晶亮度,左下方的为模拟传感器输出信号用的电位器,右上方电位器用来调节放大电路增益。按键从上到下依次为外加功能键、减一键、加一键、模式切换键、复位键。六、性能测试与分析1.通过查找相关资料得知,一般的mcs-51中ale的输出波形是固定的,但有几条指令  ale 的输出波形是不同的,所以proteus无法得知你的程序,也就无法给出确定的脉冲输出。所以虽然ale在实际的电路中有信号输出,但用proteus仿真时ale则一直为高电平状态,若用作74hc74时钟信号,adc0808不能正常进行没有信号输出,如下图所示:2.本设计仿真时用等效的2m时钟信号作为74hc74的时钟输入信号,如下图所示。图中按键自上而下依次为按键0,1,2,3。在仿真时,调整相关电阻值后,应变片电阻变化与电压和显示重量的对应变化关系如下表所示:应变片阻值变化/0.000.010.020.030

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论