单片机教程网
电脑版
提示:
原网页
已由神马搜索转码, 内容由
www.51hei.com
提供.
51单片机
24小时必答区
单片机教程
单片机DIY制作
STM32
更多导航↓
Cortex M3
模数电子
电子DIY制作
音响/功放
拆机乐园
Arduino
嵌入式OS
程序设计
论坛
嵌入式/单片机论坛
51单片机
基于51单片机的ADC0804的电压表设计
查看:
3806
|
回复:
5
基于51单片机的ADC0804的电压表设计
[复制链接]
电梯直达
楼主
ID:216839
发表于 2017-7-24 11:20
|
只看该作者
|
只看大图
最近看网上有很少的ADC0804的设计了,都由0809代替,但是有个别因为成本原因和学校课程设计要求需要ADC0804的,可以看此程序,仿真一并配齐,全套资料请打包下载:
单片机源程序如下:
#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++);
}
uchar read_0804()
{
wr=0; //在片选信号CS为低电平情况下(由于CS接地,所以始终为低电平),
_nop_(); //WR由低电平到高电平时,即上升沿时,AD开始采样转换
wr=1;
delay(1); //延时1ms,等待采样转换结束
P1=0xff; //这条语句不能少,我也还不知道为什么
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
056-ADC0804电压表.zip
(2.83 MB, 下载次数: 123)
评分
参与人数
1
黑币
+50
收起
理由
admin
+ 50
共享资料的黑币奖励!
查看全部评分
收藏
3
淘帖
顶
踩
回复
沙发
ID:337367
发表于 2018-6-12 22:14
|
只看该作者
谢谢分享
回复
板凳
ID:236171
发表于 2018-6-27 11:28
|
只看该作者
P1=0xff; //这条语句不能少,我也还不知道为什么
回复楼主一下,因为P1做数据线的时候要先拉高才能读取数据
回复
地板
ID:360242
发表于 2018-6-27 14:24
|
只看该作者
谢谢了老铁,666
回复
5
#
ID:313760
发表于 2018-7-19 16:12
|
只看该作者
谢谢楼主
回复
6
#
ID:111875
发表于 2024-5-2 07:10
|
只看该作者
好资料感谢分享
回复
返回列表
手机版
|
小黑屋
|
51黑电子论坛
|
管理员QQ:125739409;技术交流QQ群281945664
Powered by
单片机教程网