当前位置: 首页 > news >正文

基于AT89C51单片机的直流数字电压表设计

目 录
摘 要 1
Abstract 2
1 引言 4
2 基于单片机的数字直流电压表设计 6
2.1 主要芯片选择 6
2.1.1 AT89C51单片机简介 6
2.1.2 AT89C51单片机的结构特点 7
2.1.3 AT89C51单片机的外部引脚 8
2.2 A/D转换芯片ADC0832 11
2.2.1 ADC0832特点 11
2.2.2 ADC0832 与单片机的接口电路: 12
2.2.3 单片机对ADC0832 的控制原理: 12
2.3 LCD液晶显示器 14
2.3.1液晶显示器LCD1602简介 14
2.3.2 LCD的基本指令 15
2.4 地址锁存器74LS373 17
2.4.1 74LS373简介 17
2.4.2 74LS373在单片机中的应用 18
3数字电压表硬件电路设计 19
3.1 单片机系统 19
3.2 A/D转换芯片与单片机的连接 19
3.3 时钟电路 20
3.4 复位电路 20
用AT89C51的复位电路如图3-4所示。当单片机一上电,立即复位。电容C3和电阻R1实现上电自动复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。 20
21
图3-4 复位电路 21
3.5 显示电路 21
3.6 输入电路 22
4系统的软件设计 24
4.1 ADC0832选通设计 24
4.2 LCD显示模块部分 24
4.2.1基本操作程序 24
4.2.2 RAM地址映射图 24
表4-1 对应关系 24
4.2.3状态字说明 24
4.2.4数据指针设置 25
4.2.5显示模式设置 25
4.2.6初始化设置 25
4.2.7其他设置 26
4.3 LCD显示设计 26
4.3.1 地址锁存器74LS373的设计 26
4.3.2 LCD显示程序设计 26
5系统调试 27
5.1软件调试 27
5.1.1 Proteus 简介 27
5.1.2 Keil 简介 27
5.1.3 Proteus与Keil连接调试 28
致谢 32
参考文献 33
附录 34
附录1:总体电路图 34
附录2:源程序 35
4系统的软件设计
4.1 ADC0832选通设计
由于本次的设计是两路的数字电压表,所以要使用2个ADC0832的通道,然而在正常的情况下,A/D转换是不能同时进行的,所以要一个个进行选通,再A/D转换,根据ADC0832的时序图,一个转换周期开始,CS=1,CLK=0,为第一个脉冲做准备,CS置0,片选有效。DIO置1,这个是规定的起始信号,CLK=1,这是第一个脉冲,然后第一个脉冲的下降沿,此前的DIO必须是高电平,然后DIO置1,开始通道选择,CLK=1,在第二个脉冲,第二,三个脉冲下沉之前,DI必须分别输入两位数据用于选择通道,第二个脉冲下降沿,CLK=0,然后DI置0,选择通道0,CLK=1第三个脉冲,CLK=0第三个脉冲下降沿,然后再第三个脉冲下沉之后,输入端DIO失去作用,DIO置1,CLK=1第四个脉冲。然后利用C语言中的For语句for(i=0;i<8;i++)高位在前,CLK=1第四个脉冲,CLK=0第四个脉冲下降沿,dat<<=1;将下面储存的低位数据向右移,dat|=(unsigned char)DIO; 将输出数据DIO通过或运算储存在dat最低位,CS=1片选无效,最后return dat将读输的数据返回。同样的,下次选择通道1,只要在第二个脉冲下降沿之后,DIO置1,就可以了。这样就能完成通道的选通和数据的传输。
4.2 LCD显示模块部分
4.2.1基本操作程序
读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字
读数据:输入:RS=H,RW=H,E=H 输出:无
写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:D0~D7=数据
写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲 输出:无
4.2.2 RAM地址映射图
控制器内部带有80字节的RAM缓冲区,对应关系如表4-1所示。

表4-1 对应关系
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E …… 27
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E …… 67
4.2.3状态字说明
1602的状态字说明如下表4-2所示。
其中,STA0~STA6为当前地址指针的数值,STA7读写操作使能,1是禁止,0是允许,每次对控制器进行读写操作之前,必须进行读写检测,本文转载自http://www.biyezuopin.vip/onews.asp?id=12939确保STA7为0。

STA7 STA6 STA5 STA4 STA3 STA2 STA1 STA0
D7 D6 D5 D4 D3 D2 D1 D0
表4-2 1602状态字说明
4.2.4数据指针设置
控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80字节的RAM。数据指针的设置见下表4-3所示。

#include<reg51.h>
#include<stdio.h>
#include<math.h>
#include <absacc.h>

#define WR_COM XBYTE[0x7ff0]
#define WR_DAT XBYTE[0x7ff1]

extern void delay();
extern void lcdprintf(char x,char y,char *s);
extern void init_LCD();

sbit CS=P3^0;       //将CS位定义为P3.0引脚
sbit CLK=P3^1;      //将CLK位定义为P3.1引脚
sbit DIO=P3^2;       //将DIO位定义为P3.2引脚
char buff[30];
code char *name="200xxxxx";


unsigned char  A_D1()
{
  unsigned char i,dat;
   CS=1;   //一个转换周期开始
   CLK=0;  //为第一个脉冲作准备
   CS=0;  //CS置0,片选有效

   DIO=1;    //DIO置1,规定的起始信号  
   CLK=1;   //第一个脉冲
   CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   DIO=1;   //DIO置1, 通道选择信号  
   CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 
   CLK=0;   //第二个脉冲下降沿 
   DIO=0;   //DI置0,选择通道0
   CLK=1;    //第三个脉冲
   CLK=0;    //第三个脉冲下降沿 
   DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      CLK=1;         //第四个脉冲
      CLK=0; 
      dat<<=1;       //将下面储存的低位数据向右移
		dat|=(unsigned char)DIO; 	 //将输出数据DIO通过或运算储存在dat最低位 
    }	  		        
    CS=1;          //片选无效 
	 return dat;	 //将读书的数据返回     
  }
unsigned char  A_D2()
{
  unsigned char i,dat;
   CS=1;   //一个转换周期开始
   CLK=0;  //为第一个脉冲作准备
   CS=0;  //CS置0,片选有效

   DIO=1;    //DIO置1,规定的起始信号  
   CLK=1;   //第一个脉冲
   CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   DIO=1;   //DIO置1, 通道选择信号  
   CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH1 
   CLK=0;   //第二个脉冲下降沿 
   DIO=1;   //DI置1,选择通道1
   CLK=1;    //第三个脉冲
   CLK=0;    //第三个脉冲下降沿 
   DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      CLK=1;         //第四个脉冲
      CLK=0; 
      dat<<=1;       //将下面储存的低位数据向右移
		dat|=(unsigned char)DIO; 	 //将输出数据DIO通过或运算储存在dat最低位 
    }	  		        
    CS=1;          //片选无效 
	 return dat;	 //将读书的数据返回     
  }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 脚本控制向Android模拟拨打电话,发送短信,定位设置功能
  • 深度理解微服务
  • 在 ABAP 开发工具运行时错误显示界面里植入思否猫
  • Matlab激光雷达相机联合标定经验分享
  • JVM<二>JVM调优(你想要的调优都在这里了)
  • Flowable监听器动态调用Springcloud接口
  • 数字电路和模拟电路-3二极管与三极管、基本逻辑运算
  • 机器学习——BP神经网络详细介绍及案例Python代码实现
  • 了解如何通过 UltraEdit丨UEStudio 中的窗口停靠系统显示、控制和配置文件选项卡
  • Flutter SDK 自带的 10 个最有用的 Widget
  • 计算机网络-应用层篇-HTTP协议
  • Kafka 认证二:ScramLoginModule 认证及 Java 连接测试
  • 1024程序员节主题征文 | 程序员节节日祝福语大全
  • 【DETR 论文解读】End-to-End Object Detection with Transformer
  • 分类和回归-决策树算法(ID3、C4.5和CART)
  • Angular数据绑定机制
  • JS 面试题总结
  • PHP 的 SAPI 是个什么东西
  • Ruby 2.x 源代码分析:扩展 概述
  • spring boot 整合mybatis 无法输出sql的问题
  • Terraform入门 - 3. 变更基础设施
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 新手搭建网站的主要流程
  • 阿里云服务器如何修改远程端口?
  • ​iOS安全加固方法及实现
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (12)Hive调优——count distinct去重优化
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)甲方乙方——赵民谈找工作
  • .Net - 类的介绍
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET分布式缓存Memcached从入门到实战
  • .NET企业级应用架构设计系列之结尾篇
  • @Resource和@Autowired的区别
  • [20171113]修改表结构删除列相关问题4.txt
  • [Angular] 笔记 7:模块
  • [Enterprise Library]调用Enterprise Library时出现的错误事件之关闭办法
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [LeetCode系列]子集枚举问题[无重复元素]
  • [Linux]——彻底学通权限
  • [mvc] 简单的forms认证
  • [Nginx]反向代理Node将3000端口访问转换成80端口
  • [python] RRT快速拓展随机树
  • [Python学习笔记][Python内置函数]
  • [Servlet 3]会话管理、进阶API、监听过滤器
  • [UVa11292] Dragon of Loowater
  • [激光原理与应用-29]:典型激光器 -1- 固体激光器
  • [架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法