采集模拟信号(AD0804),然后转换成数字量,并在1602LCD 显示.
第二行显示实际电压“CH1--1.2344V”*/
/***********************************************************************/
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
uchar code table[]="Voltage Is:";
uchar code dis[]="CH1--1.2344V";
char str[6]; //定义一个6位的一维数组
float voltage; //定义ad_vo为浮点形数
uchar num;
sbit lcden=P3^4; // LCD 使能信号E
sbit lcdrs=P3^5; // LCD 数据/命令先择端 RS
sbit dula=P2^6;//数码管段选信号
sbit wela=P2^7; //数码管位选信号,Q7为ADC0804_CS片选信号
sbit adwr=P3^6; //AD0804 写信号位
sbit adrd=P3^7; //AD0804 读信号位
uchar get_ad(); //AD 读取子函数
void init();//初始化子函数
void write_com(uchar com); //LCD 写命令子函数
void write_dat(uchar dat); //LCD 写数据子函数
void delayms(uint xms); //延时子函数
void main()
{
init();
for(num=0;num<11;num++)
{
write_dat(table[num]); //写入第一行数据
delayms(10);
}
write_com(0x80+0x40);//数据指针初始化,换一行显示下面的数据(0x40)
for(num=0;num<5;num++)
{
write_dat(dis[num]);
delayms(10);
}
write_com(0x80+0x40+5);//数据指针初始化
voltage=(float)get_ad()*5.0/256.0;
sprintf(str,"%4f",voltage);//将浮点数转化为字符,并显示小数点后4位,并把这个字符串赋给str[6];
for(num=0;num<6;num++)
{
write_dat(str[num]);
delayms(10);
}
delayms(10);
write_com(0x80+0x40+11);//数据指针初始化
write_dat(dis[11]);
delayms(10);
while(1);
}
void init();
void write_com(uchar com); //LCD 写命令子函数
void write_dat(uchar dat); //LCD 写数据子函数
void delayms(uint xms); //延时子函数
uchar get_ad(); //AD 读取子函数
void init()
{
dula=0; //关数码管的段(因LCD与数码管都用P0口)
wela=0; //关数码管的位(因LCD与数码管都用P0口)
lcden=0;// LCD 使能信号E 设为低电平
write_com(0x38);// 显示模式设置,设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);// 显示开/关设置即00001100,开显示且不显示光标
write_com(0x06);// 光标设置00000110,当读/写一个字符后地地指针加1,且光标加1,且整屏显示不移动
write_com(0x01);// 清屏指令,数据指针清零,所有显示清零。
write_com(0x80);// 数据指针初始化,指向0x00
}
void write_com(uchar com)//LCD 写命令子函数
{
lcdrs=0; // LCD 数据/命令先择端 RS设为低电平,即命令输入
P0=com; //把此命令赋给P0。即LCD的Data I/O 口。
delayms(5);
lcden=1; // LCD 使能信号E 设为高电平
delayms(5);
lcden=0; // LCD 使能信号E 设为低电平,一个高脉冲,LCD 读走命令。
}
void write_dat(uchar dat) //LCD 写数据子函数
{
lcdrs=1; // LCD 数据/命令先择端 RS设为低电平,即数据输入
P0=dat; //把此数据赋给P0。即LCD的Data I/O 口。
delayms(5);
lcden=1; // LCD 使能信号E 设为高电平
delayms(5);
lcden=0; // LCD 使能信号E 设为低电平,一个高脉冲,LCD 读走数据。
}
void delayms(uint xms) //延时子函数
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
uchar get_ad() //AD 读取子函数
{
uchar ad_val;
wela=1;
P0=0x7f; //将AD0804片选信号置0 (0111 1111=0x7f)
wela=0;
adwr=1;//关AD转换
_nop_();//等待一个机器周期
adwr=1;//开AD转换,将读到的值送入AD0804的锁存器中
_nop_();//等待一个机器周期
adwr=0;//关AD转换
P1=0xff; //P1口置高位
adrd=1;//关AD0804读信号脚
_nop_();
adrd=0;//开AD0804读信号脚,单片机读取AD0804的锁存器中的值到P1口
_nop_();
ad_val=P1;//将AD0804的锁存器中读到的值赋给voltage
adrd=1;//关AD0804读信号脚
return ad_val;//将变量voltage的值返回给要调用的AD读取子函数的函数
}
期待中,希望会很有帮助
我以在开发板上测试过。OK。
得到的电压是静态的,如何能显示实时动态电压?
我写的没用 和你的挺像的 连基本的table里的都不显示 可以帮我看看吗
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit adcs=P2^0; //片选
sbit adwr=P2^1;
sbit adrd=P2^2;
sbit lcden=P3^4;
sbit lcdrs=P3^5; //数据还是命令
sbit lcdrw=P3^6; //读高写低
uchar num;
/*
sbit vR1=P3^0;
sbit VR2=P3^1;
sbit VR3=P3^2;
sbit VR4=P3^3;
*/
uchar dianyar,dianyax;
uchar code table[]="R is:";
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void read_ad0804()
{
adcs=0;
while(1)
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
dianyar=P1;
adrd=1;
adcs=1;
}
}
void display()
{
// uchar qian,bai,shi,ge;
write_com(0x80);
for(num=0;num<5;num++)
{
write_data(table[num]);
delay(5);
}
/* dianyax=dianyar*10000/(5-dianyar);
write_com(0x86);
qian=dianyax/1000;
write_data(qian);
bai=dianyax/100%10;
write_data(bai);
shi=dianyax%100/10;
write_data(shi);
ge=dianyax%10;
write_data(ge);
*/
}
void main()
{
init();
read_ad0804();
display();
while(1);
}
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit adcs=P2^0; //片选
sbit adwr=P2^1;
sbit adrd=P2^2;
sbit lcden=P3^4;
sbit lcdrs=P3^5; //数据还是命令
sbit lcdrw=P3^6; //读高写低
uchar num;
/*
sbit vR1=P3^0;
sbit VR2=P3^1;
sbit VR3=P3^2;
sbit VR4=P3^3;
*/
uchar dianyar,dianyax;
uchar code table[]="R is:";
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void read_ad0804()
{
adcs=0;
while(1)
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
dianyar=P1;
adrd=1;
adcs=1;
}
}
void display()
{
// uchar qian,bai,shi,ge;
write_com(0x80);
for(num=0;num<5;num++)
{
write_data(table[num]);
delay(5);
}
/* dianyax=dianyar*10000/(5-dianyar);
write_com(0x86);
qian=dianyax/1000;
write_data(qian);
bai=dianyax/100%10;
write_data(bai);
shi=dianyax%100/10;
write_data(shi);
ge=dianyax%10;
write_data(ge);
*/
}
void main()
{
init();
read_ad0804();
display();
while(1);
}
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit adcs=P2^0; //片选
- sbit adwr=P2^1;
- sbit adrd=P2^2;
- sbit lcden=P3^4;
- sbit lcdrs=P3^5; //数据还是命令
- sbit lcdrw=P3^6; //读高写低
- uchar num;
- /*
- sbit vR1=P3^0;
- sbit VR2=P3^1;
- sbit VR3=P3^2;
- sbit VR4=P3^3;
- */
- uchar dianyar,dianyax;
- uchar code table[]="R is:";
- void delay(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void write_com(uchar com)
- {
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date)
- {
- lcdrs=1;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void init()
- {
- lcden=0;
- lcdrw=0;
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- }
- void read_ad0804()
- {
- adcs=0;
- while(1)
- {
- adwr=1;
- _nop_();
- adwr=0;
- _nop_();
- adwr=1;
- P1=0xff;
- adrd=1;
- _nop_();
- adrd=0;
- _nop_();
- dianyar=P1;
- adrd=1;
- adcs=1;
- }
- }
- void display()
- {
- // uchar qian,bai,shi,ge;
- write_com(0x80);
- for(num=0;num<5;num++)
- {
- write_data(table[num]);
- delay(5);
- }
-
- /* dianyax=dianyar*10000/(5-dianyar);
- write_com(0x86);
- qian=dianyax/1000;
- write_data(qian);
- bai=dianyax/100%10;
- write_data(bai);
- shi=dianyax%100/10;
- write_data(shi);
- ge=dianyax%10;
- write_data(ge);
- */
- }
- void main()
- {
- init();
- read_ad0804();
- display();
- while(1);
- }