历史上的今天
今天是:2026年03月27日(星期五)
2023年03月27日 | 采用AT89C51+ADC0832+LCD1602的电子称设计
2023-03-27 来源:elecfans
电子称设计,主要用于菜市场的电子称,可以设置价格,根据价格和重量计算出金额,该设计采用了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;
}
}
驱动都由了,最后就是实现逻辑了,由于逻辑代码有点多,这里就不贴出来了,最后来看一看效果吧!
史海拾趣
|
功率MOSFET具有导通电阻低、负载电流大的优点,因而非常适合用作开关电源(switch-mode power supplies,SMPS)的整流组件,不过,在选用MOSFET时有一些注意事项。 功率MOSFET和双极型晶体管不同,它的栅极电容比较大,在导通之前要先对该电容充 ...… 查看全部问答> |
|
我用TLV2553采集两个相邻通道的信号,发现有串扰问题,具体是:有两个传感器,在单通道进行测量时,零点很准确。但两个传感器同时采集时,发现第二通道的零点,会随着第一通道传感器的信号变化,而发生变化。 总是想不通是如何来的?如何解决? ...… 查看全部问答> |
|
将当今的汽车说成是电子产品毫不过分,而且有人预言今后还会在安全、环保和信息化这三个领域加速实现电子化。这一趋势今后肯定只会 加速而不可能停滞。因为汽车厂商在安全、环保和信息化这三个领域里早就提出了加速实现电子化的方针。而其中最值得 ...… 查看全部问答> |
|
呵呵,我们的Freescale。终于有Freescale的版块了,现在把以前写的一些东西转过来,希望能有更多人的关注Freescale。 MCF52233_DMA&UART—Direct Memory Access & Universal Asynchronous receiver/transimtters Coldfire有三个独立的全双 ...… 查看全部问答> |
|
E:\\WINCE600\\OSDesigns\\liyutai\\liyutai\\RelDir\\liyutai_ARMV4I_Debug>viewbin eboot. bin ViewBin... eboot.bin Image Start = 0x80021000, length = 0x00000000 Done. boot.bib文件如下: MEMORY ; Name &nbs ...… 查看全部问答> |
|
我用的操作系统是XP SP2, 之前已经安装过WINCE, Activesync 4.5.. 从微软官网下了的EVC4, 解压后直接点击SETUP安装, 安装过程提示需要先安装Microsoft Windows CE Platform Manager, 于是我就确认安装.. 结果在安装Platform Manager的过程中就出 ...… 查看全部问答> |
|
一台电脑出厂时候,需要进行耳机和麦克风测试:是否能正常输出声音与输入,现在想改进以前的测试方式,可否将耳机与麦的两者的接口直接用一跟线连接起形成一简单的工作回路测试(耳机与麦都是3pin脚),直接将耳机的输出信号当作麦克风的输入信号,并保存成 ...… 查看全部问答> |
|
使用WinDbg與Virtual PC調試驅動程序時,如果讓Virtual PC停止全速運\行進行單步調試時,Virtual PC會占用100%的CPU資源,宿主電腦會運\行得很慢,請問這個有辦法解決嗎?… 查看全部问答> |
|
1.引言随着红外焦平面阵列技术的快速发展,红外成像系统实现了高帧频、高分辨率、高可靠性及微型化,在目标跟踪、智能交通监控中得到了越来越多的应用,并向更加广泛的军事及民用领域扩展。实时红外图像处理系统一般会包括非均匀校正、图像增强、 ...… 查看全部问答> |




