原创 数字电压表

2006-12-20 20:55 8329 7 9 分类: MCU/ 嵌入式

                                  


 简单的数字电压表


 


                                                        桂林电子科技大学  梁宇彤


 


 


这是本人比较早之前的做的课程设计,在这里放出来和大家分享一下:


通过AT89S52芯片为基础以LCD1602作为显示屏设计的数字电压表主要是使用8051连接A/D转换器ADC0804,并从ADC0804输入0V5V的类比电压,然后把输入的类比电压值在LCM上显示出来.


 


ADC0804的引脚说明:


2c0c2669-40e3-4c61-94cf-cf612285da99.jpg


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


1CS:芯片选择,低电位动作。


2RD:读取转换的数字数据,低电位动作。


3WR:要求ADC0804执行转换,低电位动作。


4CLKIN CLKRAD转换时的始终脉冲。             


5INTR:转换完成时,此引脚会变成低电位,所以将此引脚接到微处理器的中断引脚输入。


6+IN-IN:类比电压输入


7DB0DB7:转换数据的输出。


8Vref/2:类比电压输入最高值的一半,如果输入最高的类比电压是Vcc,这一支引脚可以空接。


9Vref:类比电压输入最高值


使用ADC0804时必须有工作时钟,工作时钟可以直接在CLKINCLKR两支引脚外接RC电路产生频率。当ADC0804CLKINCLKR两支引脚外接RC电路产生频率时,其转换时间大约为1/1.1RC;所以当ADC0804电阻10K、电容 200pf时,其转换频率大约是:1/(1.1x10kx200pf)=454kHz


转换时间约为1.1x10kx200pf=2.2us


ADC0804电压输入与数字输出关系如表所示:




 


十六进制


 


二进制码


与满刻度的比率


相对电应值VREF=2.560


高四位字节


低四位字节


高四位字节电压


低四位字节电压


F


1111


15/16


15/256


4.800


0.300


E


1110


14/16


14/256


4.480


0.280


D


1101


13/16


13/256


4.160


0.260


C


1100


12/16


12/256


3.840


0.240


B


1011


11/16


11/256


3.520


0.220


A


1010


10/16


10/256


3.200


0.200


9


1001


9/16


9/256


2.880


0.180


8


1000


8/16


8/256


2.560


0.160


7


0111


7/16


7/256


2.240


0.140


6


0110


6/16


6/256


1.920


0.120


5


0101


5/16


5/256


1.600


0.100


4


0100


4/16


4/256


1.280


0.080


3


0011


3/16


3/256


0.960


0.060


2


0010


2/16


2/256


0.640


0.040


1


0001


1/16


1/256


0.320


0.020


0


0000


 


 


0


0


 


LCD1602


功能介绍:


2.3 LCD1602


功能介绍:


LCD1602C是一款常用的液晶,可以显示216个字符,有8位数据总线D0- D7,和RSR/WEN三个控制端口,工作电压为5V,并且带有字符对比度调节(VOLCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,通常使用一个10K的电位器来调整对比度,或者直接串接一个1K的电阻到地)


 




管脚


名称


引脚说明


管脚


名称


引脚说明


1


GND


电源地


9


DB2


双向数据口


2


VDD


电源正极


10


DB3


双向数据口


3


V0


对比度调节


11


DB4


双向数据口


4


RS


数据/命令选择


12


DB5


双向数据口


5


RW


/写选择


13


DB6


双向数据口


6


E


模块使能端


14


DB7


双向数据口


7


DB0


双向数据口


15


BLA


背光正极


8


DB1


双向数据口


16


BLK


背光负极


lcd1602资料PDF下载:pdf


 


电路图及原理说明:


点击看大图


 


 


程序描述:数字电压表*/


/*  **************************************************** */


#include


#define  TIMER0_COUNT 0xDC11   /* 10000h-(11,059,200/(12*


                                  FREQ))-17 */


/* LCD command */


#define  DISPLAY_ON      56


#define  CURSOR_OFF      12


#define  CURSOR_RIGHT    6


#define  CLEAR           1


#define  CURSOR_HOME     2


#define  GOTO_LINE_2     192


#define  GOTO_LINE_1     128


/* LCD control lines */


#define  ENABLE          1


#define  DISABLE         0


#define  READ            1


#define  WRITE           0


#define  COMMAND         0


#define  DATA            1


#define  rs              P3_5


#define  rw              P3_4


#define  enable          P3_3


#define  adc_in          P0


#define  adc_rd          P2_0


#define  adc_wr          P2_1


static unsigned timer0_tick;


const char  int2char[]="0123456789";


void delay_2ms(void)  {                   /* 时间延迟函数 */


  unsigned char i,j;                      /* 延迟2 ms   */


     for (i=0;i<3;i++)


            for(j=0;j<255;j++)


            ;


}


void write_LCD_command(unsigned command)


{


     rw=WRITE;


     rs=COMMAND;


     enable=ENABLE;


     P1=command;


     enable=DISABLE;


     rs=1;


     rw=1;


     delay_2ms();


}


void write_LCD_data(unsigned LCDdata)


{


     rw=WRITE;


     rs=DATA;


     enable=ENABLE;


     P1=LCDdata;


     enable=DISABLE;


     rs=0;


     rw=1;


     delay_2ms();


}


void set_LCD(void)


{


     write_LCD_command(DISPLAY_ON);


     write_LCD_command(CURSOR_OFF);


     write_LCD_command(CURSOR_RIGHT);


}


void clear_LCD()


{


     write_LCD_command(CLEAR);


     write_LCD_command(CURSOR_HOME);


}


display_LCD_string(char *p)


{


     while(*p)


     {


             write_LCD_data(*p);


             p++;


     }


}


void gotoxy(unsigned x,unsigned y)


{


     if(x==1)


             write_LCD_command(GOTO_LINE_1+y);


     else


     write_LCD_command(GOTO_LINE_2+y);


}


void display_LCD_number(unsigned char number)


{


     unsigned char x,y,i=2;


     int z;


     z=(int) number;


     z=z<<1;


     x=z/10;


     y=z-x*10;


     gotoxy(2,3);


     write_LCD_data(int2char[y]);


     z=x;


     x=z/10;


     y=z-x*10;


     gotoxy(2,2);


     write_LCD_data(int2char[y]);


     gotoxy(2,1);


     display_LCD_string(".");


     z=x;


     x=z/10;


     y=z-x*10;


     gotoxy(2,0);


     write_LCD_data(int2char[y]);


     gotoxy(2,4);


     display_LCD_string("Volt");


}


static void timer0_isr(void) interrupt 1 using 1


{


  TR0=0;


  TL0=(TIMER0_COUNT & 0x00FF);


  TH0=(TIMER0_COUNT >> 8);


  TR0=1;


  timer0_tick++;


  if (timer0_tick==200) {


        adc_wr=0;


        timer0_tick=0;


        adc_wr=1;      


  }            


}


static void int0_isr(void) interrupt 0 using 0


{


        unsigned char voltage;


        adc_in=0xFF;


        adc_rd=0;


        voltage=adc_in;


        voltage=voltage <<1;


        adc_rd=1;


        gotoxy(2,0);


        display_LCD_number(voltage);   


}


static void timer0_initialize(void)


{


  EA=0;  


  timer0_tick=0;


  TR0=0;


  TMOD &= 0XF0;


  TMOD |=0x01;


  TL0=(TIMER0_COUNT & 0x00FF);


  TH0=(TIMER0_COUNT >> 8);


  PT0=0;


  ET0=1;


  TR0=1;


  EA=1;


}


void main (void)  {


  set_LCD();


  clear_LCD();


  display_LCD_string("Input voltage=");


  timer0_initialize();


  IT0=1;


  EX0=1;


  while(1);                        /* 无穷循环 */


}


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1589396 2009-2-8 11:59

朋友,有没有数字电流表的电路图及汇编程序. 刘明,KLS-LM@163.COM 不胜感激.

wang1jin 2007-4-22 19:27

顶一下.HE HE...

做的不错.

相关推荐阅读
用户72992 2006-12-24 01:51
简易三极管参数测试仪
本设计以AT89C51单片机最小系统为核心,用汇编语言编程,用多组放大器组成恒流源采样电路,可靠地实现了对三极管基极和集电极电流的检测,通过ADC118和放大器组成数据采集电路。系统能准确地测量交直流...
用户72992 2006-12-21 23:09
嵌入式系统智能手机(PDA)设计方案
 这是我在大学中的一门课程《基于32位微处理器嵌入式系统》的一次作业。老师说这是一次与毕业设计难度相当的一个题目。(晕~作业变成毕设了)  虽然那时没多少时间,但最后还是花了整整一个星期的时间来把这份...
用户72992 2006-12-21 22:27
关于超声波测距仪的研究(适用于汽车泊车测距系统)
                 关于超声波测距仪的研究                                              桂林电子科技大学 梁宇彤  一些传统的距离测量方式在...
我要评论
2
7
关闭 站长推荐上一条 /3 下一条