电子称设计,主要用于菜市场的电子称,可以设置价格,根据价格和重量计算出金额,该设计采用了Proteus仿真软件,采用AT89C51为主控,采用ADC0832芯片来进行ADC的转换,采用LCD1602显示屏显示,同时设计了矩阵键盘用于输入价格。设计难度3颗星(满星为5颗)。
首先设计电路图,由于模块不多,所以接口可以随意分配,电路仿真图如下图1。

设计时需要一步一步进行设计,一般设计开始尽量将人机交互的模块优先级调高。这里呢就优先对LCD1602进行设计,驱动程序如下:
void wrc(uint8 c)
{
delay(1);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(1);
e=0;
}
void wrd(uint8 dat)
{
delay(1);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(1);
e=0;
rs=0;
}
void init()
{
delay(1);
wrc(0x38);
wrc(0x38);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
屏幕显示有了,就可以对其他模块进行设计,按键和ADC优先级差不多,所以可以随意的选择,这里优先对ADC0832模块进行设计,代码如下:
unsigned char A_D(unsigned char CH) //AD函数
{
unsigned char i,adval,test; //定义局部变量并初始化
adval=0x00;
test=0x00;
Clk=0; //clk低电平
DI=1; //DI初始高电平在第一个时钟脉冲的下降沿前保持高电平,表示启动信号
_nop_();
CS=0; //片选
_nop_();
Clk=1; //clk上升沿,起始位写入
_nop_();
if(CH==0x00) //选择通道0
{
Clk=0; //clk低电平
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第一位写入
_nop_();
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第二位写入
_nop_();
}
else
{
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道1的第一位写入
_nop_();
Clk=0;
DI=1;
_nop_(); //clk上升沿,通道1的第二位写入
Clk=1;
_nop_();
}
Clk=0;
DI=1;
for(i=0;i<8;i++) //从高位向低位读取八位AD值
{
_nop_();
adval<<=1;
Clk=1;
_nop_();
Clk=0;
if(DO)
adval|=0x01;
else
adval|=0x00;
}
for(i=0;i<8;i++)
{
test>>=1; //从低位向高位读取八位AD值
if(DO)
test|=0x80;
else
test|=0x00;
_nop_();
Clk=1;
_nop_();
Clk=0;
}
if(adval==test) dat=test; //判断两个读取值是否相等相等就把读取的数赋值给DAT
_nop_();
CS=1;
DO=1;
Clk=1;
return dat;
}
最后来对矩阵键盘进行设计,这个也是比较简单的,一般学过单片机的都了解,代码如下:
uint8 keyscan() //按键扫描程序
{
uint8 h,l,value;
P1=0x0f;
h=P1&0x0f;
if(h!=0x0f)
{
delay(1);
if(h!=0x0f)
{
h=P1&0x0f;
l=P1|0xf0;
P1=l;
l=P1&0xf0;
h=P1&0x0f;
value=h+l;
}
return value;
}
}
驱动都由了,最后就是实现逻辑了,由于逻辑代码有点多,这里就不贴出来了,最后来看一看效果吧!

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
AT89C51
+关注
关注
27文章
543浏览量
81137 -
电子称
+关注
关注
1文章
26浏览量
12254 -
LCD1602
+关注
关注
14文章
607浏览量
52556 -
adc0832
+关注
关注
3文章
83浏览量
28383
发布评论请先 登录
相关推荐
lcd1602+ADC0832电子称程序和仿真图
本帖最后由 gk320830 于 2015-3-4 14:22 编辑
lcd1602+ADC0832电子称程序和仿真图
发表于 06-03 21:48
基于89C51+LCD1602+PCF8591有毒气体浓度报警器仿真与源程序
基于89C51+LCD1602+PCF8591有毒气体浓度报警器
内涵 实物图 原理图 源程序
发表于 01-11 17:31
•23次下载
使用51单片机和ADC0832设计LCD1602显示数字电压表的电路图和程序
本文档的主要内容详细介绍的是使用51单片机和ADC0832设计LCD1602显示数字电压表的电路图和程序资料合集免费下载。
发表于 08-07 08:00
•95次下载

使用89C51单片机实现LCD1602和LCD12864的显示电路原理图
本文档的主要内容详细介绍的是使用89C51单片机实现LCD1602和LCD12864的显示电路原理图。
发表于 03-05 08:00
•23次下载

使用51单片机和ADC0832应用LCD1602的程序和仿真资料
本文档的主要内容详细介绍的是使用51单片机和ADC0832应用LCD1602的程序和仿真资料。
发表于 06-30 17:34
•60次下载

LCD1602和DS18B20及ADC0832的程序和仿真工程文件免费下载
本文档的主要内容详细介绍的是LCD1602和DS18B20及ADC0832的程序和仿真工程文件免费下载。
发表于 07-24 17:30
•31次下载

51单片机驱动LCD1602显示原理及例程
①LCD1602A 可以显示两行字符,一行显示16个;②只能显示数字和字母(5X7的点阵)不能显示汉字;③每个字符之间有间隔;④引脚图2.LCD1602A中文手册 下载3.LCD1602A接线4.
发表于 11-10 19:51
•149次下载

51单片机采用ADC0808检测ADC_LCD1602显示
51单片机采用ADC0808检测ADC_LCD1602显示系统整体设计具体实现如下代码系统整体设计1)本设计的控制器采用
发表于 11-17 16:06
•38次下载

51单片机多路测温报警系统(AT89C51、多个DS18B20、LCD1602)
51单片机多路测温报警系统(AT89C51、多个DS18B20、LCD1602)一、简介** 此系统主要由AT89C51、多个DS18B20温度模块和
发表于 11-21 11:06
•19次下载

单片机液晶滚动显示(AT89C51、LCD1602)
单片机液晶滚动显示(AT89C51、LCD1602)一、简介此电路由AT89C51最小系统和LCD1602液晶模块组成。可实现上线垂直滚动、左右滚动和播放暂停。二、执行效果上下滚动左右
发表于 11-23 16:51
•43次下载

STC89C52_51单片机_LCD1602液晶
STC89C52_51单片机_LCD1602液晶简单显示实例显示:Pretty Girl i Love u#include<reg52.h>#define
发表于 11-23 17:06
•20次下载

评论