目录
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 charsbit 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);elsewrite_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);elsewrite_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++);
}