数显称设计.docx
- 文档编号:28957863
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:33
- 大小:698.10KB
数显称设计.docx
《数显称设计.docx》由会员分享,可在线阅读,更多相关《数显称设计.docx(33页珍藏版)》请在冰豆网上搜索。
数显称设计
课程设计
数显称
电子信息工程11-1班
蒋薇薇
2014年03月04日
目录
一、用户需求1
二、设计任务1
三、原理框图及说明1
3.1原理框图1
3.2系统工作原理2
3.3模块介绍2
四、主要元件说明、原件选择及参数计算3
4.1复位与振荡电路3
4.2矩阵键盘电路4
4.3显示电路4
4.4压力传感器与HX711模数转换电路5
4.41集成电路HX7116
4.5电源电路7
五、软件规划8
5.1软件划分及主流程图8
六、测试12
七、体会与感想12
参考资料29
附录1电路原理图13
附录2程序清单14
附录3使用说明书25
附录4参考资料33
一、用户需求
设计一个实用电子称,可以用键盘简单的设计单价,称量时能显示物体的重量和金额。
根据“压力测量实验”的原理,设计出称重方案,对压力值进行标定、转换,能够检测出并在LCD1602液晶屏上显示出物体的重量,分析现在设备的最大分辨率。
二、设计任务
设计一电子称:
(1)显示重量和金额
(2)键盘设定单价,单位:
元/千克
(3)计算总金额
三、原理框图及说明
3.1原理框图
根据设计任务,设计如下框图:
图1、原理框图
3.2系统工作原理:
当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力一电效应,将物体的重量转换成与被称物体重量成一定函数关系的电信号。
此信号由放大电路进行放大、经滤波后再由模/数(A/D)转换电路进行转换,转换后的数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析,并显示结果。
单片机最小系统由STC90C52RD和外围的时钟电路及复位电路组成。
显示电路设计采用1602液晶显示,对各部分的控制由采用C语言编程的软件来实现。
3.3模块介绍
v数据采集模块:
压力传感与HX711转换电路
①5kg传感器:
满量程输出电压=激励电压*灵敏度1.0mv/v
②HX711模块对产生的5mv电压进行采样。
概述:
711模块A通道带有128倍信号增益,可以将5mv的电压放大128倍,然后采样输出24bitAD转换的值,单片机通过指定时序将24bit数据读出。
v键盘模块:
设置的12位按键分别为:
0~9为单价选择键,分别代表单价:
元/千克;计算键,功能:
设置好单价并点击,根据重量进行计算金额总数;重置键,功能:
①进行计算后归零;②屏幕出现花屏时,可重置;退格键,功能:
清除上一个输入的数字。
v电子秤键盘面板:
0
--
称重
(E)
总价
(D)
1
2
3
删除(C)
4
5
6
清零(B)
7
8
9
校准(A)
v显示模块:
采用1602液晶显示。
显示格式为“WEI|PRI|MON
0.000|00.0|00.0”
四、主要电路说明、元件选择及参数计算
4.1复位与振荡电路
复位电路如图2,由C5和R48构成。
由于51单片机为低电平复位,图示电路利用电容的特性,在刚刚外加5V电源时RST脚的电压为低。
时间常数=RC=38mS,满足芯片复位要求。
(P4,RST段)由于电压为5V,可选择耐压6.3V的电解电容即可。
图2、复位与振荡电路
振荡电路按照说明书的推荐,选择6MHz晶体,C7、C8选择30pF瓷片电容。
4.2矩阵键盘电路
矩阵式键盘又叫行列式键盘。
用I/O口线组成行、列结构,按键设置在行列的交点上。
例如,用2×2的行列结构可构成4个键的键盘,4×4行列结构可构成16个键的键盘。
因此,在按键数量较多时,可以节省I/O口线。
相对于专用芯片式可以节省成本,且更为灵活。
缺点就是需要用软件处理消抖、重键等问题。
图3、按键电路
4.3显示电路
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,1602LCD主要技术参数:
显示容量:
16×2个字符,芯片工作电压:
4.5—5.5V,工作电流:
2.0mA(5.0V),模块最佳工作电压:
5.0V,字符尺寸:
2.95×4.35(W×H)mm[19]。
电路图:
图4、显示电路
引脚功能说明:
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
4.4压力传感器与HX711模数转换器电路
考虑到单片机是数字电路,工作时在VCC上产生干扰尖脉冲。
为消除它通过电源耦合到其他器件,影响其他器件的工作,一般要就近在本芯片的VCC引脚加退耦电容,0.1uF。
电路图:
图5、ADC模块电路
ADC模块元件清单:
4.41集成电路HX711
HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。
HX711管脚说明如图3所示:
图6HX711管脚图
HX711管脚描述如表1所示:
4.5电源电路
由51单片机提供。
VCC=+5V。
图7、电源电路
五、软件规划
5.1软件划分及主流程图
(1)设计的全局变量:
v数据缓冲区:
Price_Buffer[3];
v当前键盘值:
KEY_NUM;
v总额:
longMoney;
v实物重量:
Weight_Shiwu;
v单价的位数:
Price_Count;
v各接口变量:
HX711_DOUT,HX711_SCK,LCD1602_RS,LCD1602_RW,
LCD1602_EN等。
(2)设计函数如下:
v矩阵键盘扫描unsignedcharKEY_Scan()
功能:
扫描键盘,返回按下的数字值。
入口:
直接调用。
出口:
返回键值。
v液晶初始化voidInit_LCD1602()
功能:
写入控制字,状态等,为后来使用。
入口:
无,出口:
无。
v液晶功能子函数
voidLCD1602_write_com(unsignedcharcom),写指令函数;
voidLCD1602_write_data(unsignedchardat),写数据函数;
voidLCD1602_write_word(unsignedchar*s),连续写函数;
功能:
根据功能选择,对液晶显示操作。
入口:
无,出口:
功能选择值。
v延时函数voidLCD1602_delay_ms(unsignedintn)
功能:
进行延时。
入口:
无,出口。
vHX711初始化函数HX711_Buffer=HX711_Read()
功能:
获取当前采样的AD值,最大2147483,存放在long型变量HX711_Buffer中,因long型变量计算速率和存放空间占用资源太多,固除以100,缩放int型,以便计算。
入口:
出口:
v主函数main()
入口:
无,出口:
无。
一个大的循环,程序用不结束。
功能:
对LCD1602进行初始化,显示开机画面;延迟3秒,进入测量页面,最左边显示实物的重量,中间单价,需自己键入,右边总额,需计算。
(3)流程图:
主程序流程图
N
Y
N
LCD1602流程图
矩阵键盘扫描流程图
六、测试(测试方案设计、测试记录、结果分析)
制作完成后,进行如下测试,结果合格。
功能要求
功能描述
测试结果
(1)按键是否满足设计的功能
0~9按下,键入单价
通过
A键按下,进行校准
通过
B键按下,进行清零
通过
C键按下,进行删除
通过
D键按下,计算总价
通过
E键按下,进行称重
通过
(2)LCD是否正常显示
显示重量,单价,总价。
通过
(3)称量精度测试
测量结果与实际相对比
误差:
0~2g
(4)是否反复使用
多次使用没有产生问题
通过
7、体会与感想
单片机课程设计结束了,在设计之初并没象想象的那么简单,因为平时总是学的理论,而这次是亲手的动手操作,虽然说很累,但感觉收获却特别大。
我现在很欣慰,因为毕竟付出了汗水,索性的是我也成功了。
也使我更加体会到那种不付出汗水怎会有果实的快感。
同时我也学会了很多芯片的原理,虽然我只用上几个芯片,可我是从很多很多芯片中筛选出来了,因此对很多芯片都有了初步的了解。
像90C52等芯片在平常学习时并不清楚它的具体功能,也没想到它们会与我们的生活联系那么密切,通过这几天的课程设计,查资料,仔细研究它们的逻辑功能,用途,要求等,终于基本完成了
数显称的设计。
这激发了我学习专业知识的兴趣,也增强了我的动手能力。
但同时,由于掌握的知识有限,在设计过程中我遇到一些问题我暂时还没有能力去解决。
因此,我会在以后的学习中,尽可能地扩大自己的知识面,不能仅仅只局限课本,要更加刻苦地努力地去学习专业知识,充分利用图书馆和网络资源,多查多学多练,打好扎实功底,为以后的更好的发展奠定一个坚实的基础。
此次课程设计,我还发现,理论上的理解,实践中不一定能够完全正确应用,自己的动手能力还有待一步的锻炼提高。
同时经过这次课程设计我也更懂得了知识的重要性,大科学家培根说的一点都不错“知识就是力量”,通过对知识的灵活运用,再加上恒心、毅力、团队协作、能够做到许多平时连想都不敢想的东西。
通过此次课程设计也更加坚定了我学好后续课程和温习学过的知识还有利用课余时间拓展自己知识面的决心!
相信在系里各位老师的指导下,再加上自己不懈努力,我一定不会辜负社会,老师,家长的期望,成为一名真真正正学有专长而又兼有广博知识的现代化的高素质人才!
争取早日为祖国,为社会,为人民献上我们的一腔热血,实现我的人生价值!
我觉得这不仅仅是一个设计,更重要的是一个人生的锻炼,相信我会从中走向成熟,走向自己新的目标,并为此努力!
附1、原理图
附2、程序清单
#include
#include
unsignedlongHX711_Buffer=0;
unsignedintWeight_Maopi=0,Weight_Shiwu=0;
charPrice_Count=0;
unsignedcharKEY_NUM=0;
unsignedcharPrice_Buffer[3]={0x00,0x00,0x00};
unsignedlongMoney=0;
bitFlag_OK=0;
intq=0;
//HX711IO设置
sbitHX711_DOUT=P0^7;
sbitHX711_SCK=P0^6;
//LCD1602IO设置
#defineLCD1602_PORTP0
sbitLCD1602_RS=P2^4;
sbitLCD1602_RW=P2^5;
sbitLCD1602_EN=P2^6;
//延时函数
voidDelay__hx711_us(void)
{
_nop_();
_nop_();
}
//读取HX711
unsignedlongHX711_Read(void)//增益128
{
unsignedlongcount;
unsignedchari;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
Delay__hx711_us();
HX711_SCK=0;
return(count);
}
voidLCD1602_delay_ms(unsignedintn)
{
unsignedinti,j;
for(i=0;i for(j=0;j<123;j++); } //写指令 voidLCD1602_write_com(unsignedcharcom) { LCD1602_RS=0; LCD1602_delay_ms (1); LCD1602_EN=1; LCD1602_PORT=com; LCD1602_delay_ms (1); LCD1602_EN=0; } //写数据 voidLCD1602_write_data(unsignedchardat) { LCD1602_RS=1; LCD1602_delay_ms (1); LCD1602_PORT=dat; LCD1602_EN=1; LCD1602_delay_ms (1); LCD1602_EN=0; } //连续写字符 voidLCD1602_write_word(unsignedchar*s) { while(*s>0) { LCD1602_write_data(*s); s++; } } voidInit_LCD1602() { LCD1602_EN=0; LCD1602_RW=0;//设置为写状态 LCD1602_write_com(0x38);//显示模式设定 LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置 LCD1602_write_com(0x06);//写一个字符后指针加一 LCD1602_write_com(0x01);//清屏指令 } //获取毛皮重量 voidGet_Maopi() { HX711_Buffer=HX711_Read(); Weight_Maopi=HX711_Buffer/100; } //称重 voidGet_Weight() { HX711_Buffer=HX711_Read(); HX711_Buffer=HX711_Buffer/100; if(HX711_Buffer>Weight_Maopi) { Weight_Shiwu=HX711_Buffer; Weight_Shiwu=Weight_Shiwu-Weight_Maopi; //获取实物的AD采样数值。 Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/4.22+0.05); } } //矩阵键盘扫描 unsignedcharKEY_Scan() { unsignedchartemp=0; unsignedcharcom=0x55,com1=0,com2=0; P3=0xfe; temp=P3; temp=temp&0xf0; while(temp! =0xf0) { LCD1602_delay_ms(5); temp=P3; temp=temp&0xf0; while(temp! =0xf0) { temp=P3; switch(temp) { case0xee: com=7; break; case0xde: com=8; break; case0xbe: com=9; break; case0x7e: com=10; break; } while(temp! =0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp! =0xf0) { LCD1602_delay_ms(5); temp=P3; temp=temp&0xf0; while(temp! =0xf0) { temp=P3; switch(temp) { case0xed: com=4; break; case0xdd: com=5; break; case0xbd: com=6; break; case0x7d: com=11; break; } while(temp! =0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp! =0xf0) { LCD1602_delay_ms(5); temp=P3; temp=temp&0xf0; while(temp! =0xf0) { temp=P3; switch(temp) { case0xeb: com=1; break; case0xdb: com=2; break; case0xbb: com=3; break; case0x7b: com=12; break; } while(temp! =0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp! =0xf0) { LCD1602_delay_ms(5); temp=P3; temp=temp&0xf0; while(temp! =0xf0) { temp=P3; switch(temp) { case0xe7: com=0; break; case0xd7: com=15; break; case0xb7: com=14; break; case0x77: com=13; break; } while(temp! =0xf0) { temp=P3; temp=temp&0xf0; } } } return(com); } voidmain() { Init_LCD1602();//初始化LCD1602 LCD1602_write_com(0x80);//指针设置 LCD1602_write_word("Welcometouse! ");//开机画面第一行 LCD1602_write_com(0x80+0x40+5); LCD1602_delay_ms(3000);//延时2s loop: Price_Count=0; Price_Buffer[0]=0; Price_Buffer[1]=0; Price_Buffer[2]=0; Flag_OK=0; LCD1602_write_com(0x80);//指针设置 LCD1602_write_word("+WEI|PRI|MON"); LCD1602_write_com(0x80+0x40);//指针设置 LCD1602_write_word("0.000|.|."); Get_Weight();//获取重量 if(q==1) { Weight_Shiwu=Weight_Shiwu-10; } LCD1602_write_com(0x80+0x40); LCD1602_write_data(Weight_Shiwu/1000+0x30); LCD1602_write_data('.'); LCD1602_write_data(Weight_Shiwu%1000/100+0x30); LCD1602_write_data(Weight_Shiwu%100/10+0x30); LCD1602_write_data(Weight_Shiwu%10+0x30); while (1) { KEY_NUM=KEY_Scan(); P3=0x00; if(KEY_NUM! =0x55)//当返回的不是初值时候,确认按键按下。 { if(KEY_NUM==10)//数字A键,去皮功能 { Get_Maopi();//去皮 q=1; gotoloop; } if(KEY_NUM==11)//置位键 { q=0; gotoloop; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数显称 设计