《课程设计报告基于单片机的数字电子称设计.doc》由会员分享,可在线阅读,更多相关《课程设计报告基于单片机的数字电子称设计.doc(23页珍藏版)》请在三一办公上搜索。
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作为显示器件,再配以其他相关元器件来实现硬件电路的设计。三、 单元电路分析与设计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#include#include#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 code table=HELLO,WELCOME!;uchar code table1=De
14、sign2008041533;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(unsigned int i)for(;i0;i-);void delay1(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);voi
15、d 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);write_com(0x01);void MALL()while(1) RW=0;init();write_com(0X80+0x10);for(num=0;num14;num+)write_data(t
16、ablenum);delay1(5);write_com(0X80+0x50);for(num=0;num16;num+)write_data(table1num);delay1(5);for(num=0;num16;num+)write_com(0x18);delay1(400);delay1(3000);void MAII() RW=0;init();write_com(0X80);for(num=0;num10;num+)write_data(table2num);delay1(5);write_com(0X80+0x40);for(num=0;num16;num+)write_data
17、(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;delay(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);dela
18、y(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(unsigned char string)int i=0;while(stringi)LCD_WD(stringi+);delay(1000); void A_D(void)G=0;for(h=0;h10;h+)P1=0xFF;ST=0;delay(1
19、);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)return(0xff);temp=P2&0x0f;for(i=0;i1;key_num+;while(P2&0x0f)!=0x0f);return(key_num); void BCD_P(unsigned char b)bcd_P0=b%10+0x30;bcd_P1=0x
20、00;void BCD(unsigned char b)bcd_dis0=b/100+0x30;bcd_dis1=b/10%10+0x30;bcd_dis2=b%10+0x30;bcd_dis3=0x00;void 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;retur
21、n(d);void m_INIT(void)LCD_SET_POS(0x00);LCD_DISP(P:);LCD_SET_POS(0x08);LCD_DISP(M: g); 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_
22、dis2;bcd_M3=bcd_dis3;s=max;BCD_P(pr);LCD_SET_POS(0x42);BCD_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(?);b
23、reak;case 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_P0=0x3a)bcd_P0=0x30;LCD_SET_POS(0x02);
24、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(sM)B_DIS=0;void key_2(unsigned char b)if(count=1)bcd_P0-=1;if(bcd_P0=0x2
25、f)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_DISP(bcd_M);F_BCD();s=d;if(sl)/l是固定值,G/10是变化值M=G/10-l;
26、else M=l-G/10;else M=G/10;LCD_SET_POS(0X0a);BCD(M);LCD_DISP(bcd_dis);if(sM)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 1
27、 蜂鸣器 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-,红色长线为电压输入正极,黑线为电压
28、输入负极。最下面两个插针接电路板5V电压输入(上负下正),旁边为自锁开关控制电源通断。电路板有三个电位器,左上方的用来调节液晶亮度,左下方的为模拟传感器输出信号用的电位器,右上方电位器用来调节放大电路增益。按键从上到下依次为外加功能键、减一键、加一键、模式切换键、复位键。六、性能测试与分析1.通过查找相关资料得知,一般的MCS-51中ALE的输出波形是固定的,但有几条指令ALE的输出波形是不同的,所以proteus无法得知你的程序,也就无法给出确定的脉冲输出。所以虽然ALE在实际的电路中有信号输出,但用proteus仿真时ALE则一直为高电平状态,若用作74HC74时钟信号,ADC0808不能
29、正常进行没有信号输出,如下图所示:2.本设计仿真时用等效的2M时钟信号作为74HC74的时钟输入信号,如下图所示。图中按键自上而下依次为按键0,1,2,3。在仿真时,调整相关电阻值后,应变片电阻变化与电压和显示重量的对应变化关系如下表所示:应变片阻值变化/0.000.010.020.030.040.050.100.200.300.501.00电压/mV0.000.020.060.100.140.170.350.711.071.783.21质量/g11121314151621324262104线性符合设计要求。可推知,应变片电阻变化大于1时对应变化仍是线性关系,可测更大重量值。3.将SW1开关掷
30、向RV1,可模拟超重情形。一直增大模拟输入电压,当M值超过最大称量值Max=199时,显示器出现超重提示,同时喇叭LS1发出报警音。4.通过按模式切换键(按键0),可实现各种调节:由于仿真时系统需要时间进行计算以及考虑到电脑反应速度问题,按键时延时2s后松开,可确保仿真正确进行。(1)按一下,单价P后出现“?”即可通过按按键1和按键2进行加减调节单价,如下图所示:(2)按两下,Max后出现“?”即可通过按按键1和按键2进行加减调节最大称量值,如下图所示:(3)按三下,M值清零,即可通过按键1和按键2进行调节加减调节去皮值大小,去皮处理后的称量值等于原称量值减去去皮值。再按一下模式切换键即显示去
31、皮处理后状态。七、 结论与心得学习了电子系统设计课程,让我掌握了电子系统的设计要求,提高了系统设计的能力,还有这次【数字电子称】的实践,大大加深了我对这门课的重要性的感悟。【数字电子称】的制作中,我主要负责焊接还有编程,过程非常艰辛。我认为主要原因是因为平时只知从书本上学习理论知识,而没有去实践。因为学习和实践必须结合起来,才能真正弄懂专业知识。由于我们的作品飞线比较多,所以在焊接时遇到了许多麻烦,有的线碰触到一起,造成短路,差点让我们的作品功亏一篑。还好及时发现问题及时解决了。在上电时,首先遇到的问题是无法上点,又从头找起是否有虚焊。可以上电后,发现显示器并没有显示出我们预想的信息,所以又从程序中开始找起,调试完程序,真是一波三折,我们的【数字电子称】终于得以成功。八、参考文献1、童诗白、华成英模拟电子技术基础(第四版)高等教育出版社P3243342、余成波传感器与自动检测技术高等教育出版社P45533、郭天祥51单片机C语言教程电子工业出版社P1481564、李刚、林凌、姜苇.单片机系统设计与应用技巧.北京航空航天大学出版社P1521675、张靖武,周灵彬单片机原理、应用与PROTEUS仿真电子工业出版社P2232726、张莲,蒋亮,孙玉林Protel DXP电路设计入门与应用机械工业出版社P6678