基于单片机的数字电压表

来源:互联网 发布:stm32f103 编程 编辑:程序博客网 时间:2024/04/29 16:18

 

此款电压表主要是利用adc0832作为ad转换芯片,可测范围为0~5v 。lcd16025作为显示芯片。

源程序如下:

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^2;
sbit bf=P0^7;
sbit cs=P1^2;
sbit clk=P1^1;
sbit dio=P1^0;
uchar code table[]="0123456789";
void delay(uint z)
{uint x,y;
for(x=z;x>0;x--)
 for(y=110;y>0;y--);}
bit busytest()
{bit result;
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
result=bf;
e=0;
return result;}
void write_date(uchar date)
{while(busytest()==1);
rs=1;
rw=0;
P0=date;
e=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
e=0;}
void write_com(uchar com)
{while(busytest()==1);
rs=0;
rw=0;
P0=com;
e=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
e=0;}
void lcd_init()
{delay(15);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x01);
delay(5);
write_com(0x06);
delay(5);
write_com(0x0c);
delay(5);}
read_date()
{uchar i,dat;
cs=1;
clk=0;
cs=0;
dio=1;
clk=1;
clk=0;
dio=1;    //选择单通道模式
clk=1;
clk=0;
dio=0;    //选择0通道
clk=1;
clk=0;
dio=1;
clk=1;
for(i=0;i<8;i++)
{clk=1;
clk=0;
dat<<=1;
dat|=dio;}
cs=1;
return dat;}
void display_char()
{write_com(0x00+0x80);
write_date('D');
write_com(0x01+0x80);
write_date('=');
write_com(0x00+0x80+0x40);
write_date('V');
write_com(0x01+0x80+0x40);
write_date('=');
write_com(0x03+0x80+0x40);
write_date('.');
write_com(0x07+0x80+0x40);
write_date('v');}
void display_dv(uchar dv)
{uchar i,j,k;
i=dv/100;
j=dv%100/10;
k=dv%10;
write_com(0x02+0x80);
write_date(table[i]);
write_com(0x03+0x80);
write_date(table[j]);
write_com(0x04+0x80);
write_date(table[k]);}
void display_v(uchar dat)
{uchar i,j,k;
i=dat/51;
j=(dat%51)/10;
k=(dat%51)%10;
write_com(0x02+0x80+0x40);
write_date(table[i]);
write_com(0x04+0x80+0x40);
write_date(table[j]);
write_com(0x05+0x80+0x40);
write_date(table[k]);}
void main()
{uchar temp;
lcd_init();
display_char();
while(1)
{temp=read_date();
display_dv(temp);
display_v(temp);
}}

 

原创粉丝点击