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

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示

  • 1.主要功能:
  • 讲解视频:
  • 2.仿真
  • 3. 程序代码
  • 4. 设计报告
  • 5. 设计资料内容清单&&下载链接
    • 资料下载链接(可点击):

51单片机PCF8591数字电压表数码管设计( proteus仿真+程序+设计报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0059

1.主要功能:

基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)

基于51单片机的数字电压表设计

1.采用PCF8591实现AD采样功能;

2.采样电压范围0-5V;

3.用数码管显示转换后的实际电压值

4.显示保留小数点后两位。

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

讲解视频:

仿真讲解+代码讲解

51单片机PCF8591数字电压表数码管( proteus仿真+程序+报告+讲解)

2.仿真

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。数码管显示电压值,精确到小数点后两位。可以调整范围0-5V。

img

3. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

img

main函数:

main()
{  while(1){/********以下AD-DA处理*************/  PCF8591_SendByte(AddWr,0);	 //启动转换D[0]=PCF8591_RcvByte(AddWr);  //读转换完的数字信号,ADC0 模数转换 范围是256-0;vol_value = PCF8591_RcvByte(AddWr); vol_value = vol_value*5.0*100/256;//得到范围是500-0,方便显示dis[0] = (vol_value%1000)/100; //百dis[1] = (vol_value%100)/10;  //十dis[2] = vol_value%10; C4 = C2 =C1 =0;      //关闭134数码管C3=1;                //打开第2位数码管Dp=0;     			  //打开小数点P1=table[dis[0]];    //显示整数部分及小数点delay(10);           //延时一定时间	C4 = C3 = C1=0;       //关闭第124位数码管C2=1;                //打开第3位数码管Dp=1;               P1=table[dis[1]];     delay(10);           C4 = C3 =C2 =0;      //关闭123数码管C1=1;                //打开第4位数码管Dp=1;               P1=table[dis[2]];   delay(10);           //延时一定时间}
}

PCF8591相关操作函数

/************************************************************
* 函数名        : Pcf8591_SendByte
* 函数功能		: 写入一个控制命令
* 输入          : addr(器件地址),channel(转换通道)
* 输出         	: 无
************************************************************/
bit PCF8591_SendByte(unsigned char addr,unsigned char channel)
{Start_I2c();              //启动总线I2C_SendByte(addr);            //发送器件地址if(ack==0)return(0);I2C_SendByte(0x40|channel);              //发送控制字节if(ack==0)return(0);Stop_I2c();               //结束总线return(1);
}/************************************************************
* 函数名       	: PCF8591_RcvByte
* 函数功能   	: 读取一个转换值
* 输入          :
* 输出          : dat
************************************************************/
unsigned char PCF8591_RcvByte(unsigned char addr)
{  unsigned char dat;Start_I2c();          //启动总线I2C_SendByte(addr+1);      //发送器件地址if(ack==0)return(0);dat=I2C_RcvByte();          //读取数据0Ack_I2c(1);           //发送非应答信号Stop_I2c();           //结束总线return(dat);
}

IIC通信函数

/*******************************************************************起动总线函数               
函数原型: void  Start_I2c();  
功能:     启动I2C总线,即发送I2C起始条件.  
********************************************************************/
void Start_I2c()
{sda=1;         /*发送起始条件的数据信号*/_nop_();scl=1;_nop_();        /*起始条件建立时间大于4.7us,延时*/_nop_();_nop_();_nop_();_nop_();    sda=0;         /*发送起始信号*/_nop_();        /* 起始条件锁定时间大于4μs*/_nop_();_nop_();_nop_();_nop_();       scl=0;       /*钳住I2C总线,准备发送或接收数据 */_nop_();_nop_();
}/*******************************************************************结束总线函数               
函数原型: void  Stop_I2c();  
功能:     结束I2C总线,即发送I2C结束条件.  
********************************************************************/
void Stop_I2c()
{sda=0;      /*发送结束条件的数据信号*/_nop_();       /*发送结束条件的时钟信号*/scl=1;      /*结束条件建立时间大于4μs*/_nop_();_nop_();_nop_();_nop_();_nop_();sda=1;      /*发送I2C总线结束信号*/_nop_();_nop_();_nop_();_nop_();
}/*******************************************************************字节数据发送函数               
函数原型: void  I2C_SendByte(UCHAR c);
功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)     发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void  I2C_SendByte(unsigned char  c)
{unsigned char  i;for(i=0;i<8;i++)  /*要传送的数据长度为8位*/{if((c<<i)&0x80)sda=1;   /*判断发送位*/else  sda=0;                _nop_();scl=1;               /*置时钟线为高,通知被控器开始接收数据位*/_nop_(); _nop_();             /*保证时钟高电平周期大于4μs*/_nop_();_nop_();_nop_();         scl=0; }_nop_();_nop_();sda=1;                /*8位发送完后释放数据线,准备接收应答位*/_nop_();_nop_();   scl=1;_nop_();_nop_();_nop_();if(sda==1)ack=0;     else ack=1;        /*判断是否接收到应答信号*/scl=0;_nop_();_nop_();
}/*******************************************************************字节数据接收函数               
函数原型: UCHAR  I2C_RcvByte();
功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。  
********************************************************************/    
unsigned char   I2C_RcvByte()
{unsigned char  retc=0,i; sda=1;                     /*置数据线为输入方式*/for(i=0;i<8;i++){_nop_();           scl=0;                  /*置时钟线为低,准备接收数据位*/_nop_();_nop_();                 /*时钟低电平周期大于4.7μs*/_nop_();_nop_();_nop_();scl=1;                  /*置时钟线为高使数据线上数据有效*/_nop_();_nop_();retc=retc<<1;if(sda==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */_nop_();_nop_(); }scl=0;    _nop_();_nop_();return(retc);
}

4. 设计报告

5133字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

img

5. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法–必读!!!!

1、仿真图

2、程序源码

3、功能要求

4、开题报告

5、设计报告

6、软硬件流程框图

7、讲解视频

Altium Designer 软件资料

KEIL软件资料

Proteus软件资料

单片机学习资料

答辩技巧

设计报告常用描述

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

img

资料下载链接(可点击):

https://docs.qq.com/doc/DS21ESENWS3RDdGFH

http://www.lryc.cn/news/225750.html

相关文章:

  • 普华永道于进博会首发“企业数据资源会计处理一体化平台”
  • IDEA 使用Reset Current Branch to Here 进行git 版本控制,图文操作
  • 有趣的 TCP 抢带宽行为
  • HCIP---VRRP
  • 在家用Python搞副业,也能月入10000+
  • play() failed because the user didn‘t interact with the document first.
  • Java任意视频转MP4
  • flutter实践:慎用Expanded
  • 华为防火墙vrrp+hrp双机热备负载分担(两端为交换机)
  • 欧拉角(横滚角、俯仰角、偏航角)、旋转矩阵、四元数的转换与解决万向节死锁
  • Java Post请求参数格式为XML
  • Windows 安装 JDK 8 和 JDK 17 和多版本JDK切换
  • SpringData、SparkStreaming和Flink集成Elasticsearch
  • 中国电子学会2023年09月份青少年软件编程Python等级考试试卷六级真题(含答案)
  • 基于STM32设计的智能水母投喂器(华为云IOT)
  • 合成数据加速机器视觉学习
  • 物业管理服务预约小程序的效果如何
  • ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决
  • backbone:从AlexNet到...(持续补充ing)
  • FiRa标准——MAC实现(二)
  • oracle中分组函数LISTAGG
  • 深度学习pytorch之hub模块
  • LeetCode 2258. 逃离火灾:BFS
  • C# PaddleInference.PP-HumanSeg 人像分割 替换背景色
  • Java 变量初始化的两种方式和优缺点比较
  • 15.三数之和
  • 竞赛选题 深度学习疲劳驾驶检测 opencv python
  • PROFINET和UDP、MODBUS-RTU通信速度对比实验
  • CSS3 多媒体查询、网格布局
  • SpringBoot基础(九)-- 配置文件优先级