单片机入门-C51语言实现数字电压表用LCD12864显示结果解说

本项目实现数字电压表用LCD12864显示结果,通过本项目的练习,希望大家可以把学到的知识灵活应用到实际的电子产品设计中,活学活用,举一反三,触类旁通。以下总结本项目用到的知识:

一、ADC0809的使用总结

ADC0809时序中,CLK为转换时钟,要一直产生。转换过程为,ADC先在ALE引脚上产生上升沿进行通道地址锁存,将要转换的通道选中;接着在START引脚产生上升沿,启动转换进程;ADC转换开始后,EOC变低,表示正在转换过程中;当EOC变高时,表示转换结束,这时可以将OE引脚拉高,允许数据从AD中输出,最后通过D0~D7读取数据即可。

ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。

二、LCD12864使用方法总结

第一步:初始化,调用lcd_init(),lcd_clr();

第二步:根据具体情况调用相关的函数,

要显示汉字,调用dh(),要用字模转换软件先生存字模。

要显示单个字符,调用ds()。

要显示字符串,调用printchars()。

三、电路图如下:

电路

四、代码如下:

defineuintunsignedint

#include""

sbitST=P3^0;

sbitEOC=P3^2;

sbitOE=P3^1;

sbitCLK=P3^3;

sbitADDA=P3^4;

sbitADDB=P3^5;

sbitADDC=P3^6;

sbitALE=P3^7;

unsignedchardispbuf[]={"0.000V"};

unsignedchargetdata;

unsignedinttemp;

uchari,j;

voidt1(void)interrupt3using0

{

TH1=(65536-100)/256;

TL1=(65536-100)%256;

CLK=!CLK;

}

voidTimeInitial()

{

TMOD=0x10;

TH1=(65536-100)/256;

TL1=(65536-100)%256;

EA=1;

ET1=1;

TR1=1;

}

voidmain(void)

{

TimeInitial();

P0=0XFF;

P1=0XFF;

P2=0XFF;

P3=0XFF;

lcd_init();

lcd_clr();

while(1)

{

ALE=0;

ADDA=1;

ADDB=1;

ADDC=1;

ALE=1;

ST=0;

ALE=0;

OE=0;

ST=1;

ST=0;

while(EOC==0){printchars(0,0,dispbuf,0);}

OE=1;

getdata=P0;

OE=0;

temp=getdata*1.0/255*5000;

dispbuf[4]=temp%10+0x30;

dispbuf[3]=temp/10%10+0x30;

dispbuf[2]=temp/100%10+0x30;

dispbuf[0]=temp/1000+0x30;

printchars(0,0,dispbuf,0);

}

}

发布于 2025-05-12
135
目录

    推荐阅读