• 基于AT89C51单片机的数字电压表PROTEUS仿真设计


    目录
    前 言 1
    第一章 工作原理 2
    1.1设计目标 2
    1.1.1基本功能 2
    1.1.2主要技术参数 2
    1.2设计原理 2
    第二章 硬件设计与原理 3
    2.1 总设计框图 3
    2.2 硬件设计分析 3
    2.2.1 电源的设计 3
    2.2.2 单片机最小系统 4
    2.2.3 显示系统 10
    2.2.4 模数转换 10
    第三章 软件设计与分析 13
    3.1 软件设计的组成 13
    3.2 源程序 15
    第四章 软件仿真 24
    4.1 PROTEUS简介 24
    4.2仿真图 26
    4.3原理图 27
    4.4 元件清单 28
    总结 29
    致 谢 30
    参考文献 31
    第一章 工作原理
    1.1设计目标
    1.1.1基本功能
    利用51单片机作为主控芯片,模拟量输入范围直流0v-5v。模拟量经A/D(ADC0809)模数转换芯片,把模拟量转换为数字量输入到单片机的P0口,再由单片机控制LCD1602液晶显示模拟量输入的电压值。
    1.1.2主要技术参数
    测量电压范围:0v至5v
    A/D转换器:ADC0809(8位模数转换器)。
    显示方式: LCD1602液晶
    1.2设计原理
    此次设计的是数字电压表,要求的电压范围是0~5v。系统设计主要包括四个部分:分别是电源模块、AD模数转换部分、51单片机最小系统部分、数码管显示部分。首先由单片机初始化ADC0809模数转换芯片和共阴数码管显示,本文转载自http://www.biyezuopin.vip/onews.asp?id=14840当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在LCD1602液晶上面。

    第二章 硬件设计与原理
    以AT89C51单片机为核心,起着控制作用。系统包括LCD1602液晶显示电路、复位电路、时钟电路、模数转换电路电路。设计思路分为五个模块:复位电路、晶振电路模块、AT89C51、LCD1602液晶显示电路、模数转换器电路这五个模块。

    //<程序名>:数字电压表																 		 **
    //<功能>:使用LCD显示被检测电压,精度为0.05V,范围是0~5V。									 **
    #include"includes.h"
    #define TIME0H 0x3C
    #define TIME0L 0xB0
    uchar uc_Clock=0;		//定时器0中断计数
    bit b_DATransform=0;
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把电压显示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    void vShowVoltage(uint uiNumber)
    {
    	uchar ucaNumber[3],ucCount;
    	if(uiNumber>999)					
    		uiNumber=999;
    	ucaNumber[0]=uiNumber/100;								//把计算数字的每个位存入数组。
    	ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;							
    	ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
    	for(ucCount=0;ucCount<3;ucCount++)
    	{
    		vShowOneChar(ucaNumber[ucCount]+48);				//从首位到末位逐一输出。
    		if(ucCount==0)
    			vShowOneChar('.');
    	}
    }
    //*************************************************************************************************
    //*																								  *
    //*			  ********************************主函数******************************				  *
    //*																								  *
    //*************************************************************************************************
    void main()
    {
    	TMOD=0x01;			//定时器0,模式1。
    	TH0=TIME0H;
    	TL0=TIME0L;
    	TR0=1;				//启动定时器。
    	ET0=1;				//开定时器中断。
    	EA=1;				//开总中断
    	vdInitialize();
    	vWriteCMD(0x84);	   //写入显示起始地址(第一行第4个位置)
    	vShowChar("voltage");
    	vWriteCMD(0xC9);     
    	vShowChar("(V)");
    	while(1)
    	{
    		if(b_DATransform==1)
    		{
    			b_DATransform=0;
    			vWriteCMD(0xC4);
    			vShowVoltage(uiADTransform());
    		}
    	}
    }
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    void t0() interrupt 1
    {
    	if(uc_Clock==0)
    	{
    		uc_Clock=5;
    		b_DATransform=1;
    	}
    	else
    		uc_Clock--;
    	TH0=TIME0H;		   //恢复定时器0。
    	TL0=TIME0L;
    }
    
    
    
    

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

  • 相关阅读:
    JCF之List集合实现——Vector
    变焦镜头内参数如何获得?
    K8S折磨的安装篇
    阅读笔记——A Frustratingly Easy Approach for Entity and Relation Extraction
    Spring Boot开发时Java对象和Json对象互转
    【大模型系列】指令微调
    Android dumpsys 常用命令
    分组后合并记录中的字段值
    【JS】最大公约数
    blender光照系统设置
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127066404