目录
1、前言
2、资料内容
3、仿真图
4、程序
资料下载地址:基于51单片机的ADC0804的电压表设计(仿真+源码+设计资料)
1、前言
最近看网上有很少的ADC0804的设计了,都由0809代替,但是有个别因为成本原因和学校课程设计要求需要ADC0804的,可以看此程序,仿真一并配齐,全套资料请打包下载:
2、资料内容
3、仿真图
4、程序
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rd=P3^6; //ADC0804IO口定义
sbit wr=P3^5;
sbit cs=P3^7;
sbit int1=P3^4;
//液晶LCD1602定义
sbit rs=P2^5;
sbit rw=P2^6;
sbit e=P2^7;
//0804转换变量
unsigned int date;
uchar Vol;
uint V;
void delay_uint(uint z) //液晶驱动延迟
{
while(z--);
}
/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(25);
e=1;
delay_uint(100);
e=0;
}
/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(25);
e=1;
delay_uint(100);
e=0;
}
/***********************lcd1602上显示字符函数************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == '\0') break;
write_data(*p);
p++;
}
}
/***********************lcd1602上显示两位十进制数************************/
void write_sfm2(uchar hang,uchar add,uint date)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(0x30+date/100);
write_string(2,8,".");
write_data(0x30+date/10%10);
write_data(0x30+date%10);
}
/***********************lcd1602初始化设置************************/
void init_1602() //lcd1602初始化
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
delay_uint(1000);
write_string(1,0,"The Voltage is: ");
write_string(2,8,".");
write_string(2,11,"V ");
write_sfm2(2,7,date);
}
void delay(uint z)
{
uint x;
while(z--)
for(x=0;x<120;x++);
}