当前位置: 首页 > 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/229864.html

相关文章:

  • 分发饼干(贪心算法+图解)
  • vue项目路由使用history模式,nginx配置,刷新页面显示404
  • redis的redis.service配置
  • 高频SQL50题(基础版)-3
  • OpenMMlab导出yolov3模型并用onnxruntime和tensorrt推理
  • 单链表的插入删除
  • github使用手册
  • 怎样做ChatGPT应用开发?
  • 漏洞-任意账号注册
  • 一个关于jdbc操作mysql和java基础练手的通讯录管理系统小项目
  • C++用条件变量实现线程安全的queue容器
  • EDA实验-----3-8译码器设计(QuartusII)
  • NFTScan | 11.06~11.12 NFT 市场热点汇总
  • 2022年12月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 第三章 将对象映射到 XML - 使用列表或数组定义的属性
  • C/S架构学习之基于TCP的本地通信(客户机)
  • CCF 备忘
  • Spring Framework中的依赖注入:构造器注入 vs. Setter注入
  • Java学习之路 —— API篇
  • Windows下安装Anaconda5.3.1+Python3.8+TensorFlow2.13.0-CPU版本总结
  • DigitalVirt 日本 Lite VPS 测评
  • Ridgeline plot / 远山图 / 山脊图 怎么画?怎么优化?
  • 【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍
  • Vue3封装自定义指令+h()
  • 爆火的迅雷网盘推广,一手云盘app拉新推广渠道必备项目 学习资料
  • Jmeter 请求返回多字段 —— 传递登录接口!
  • es 7.0常用的命令
  • [文件读取]lanproxy 文件读取 (CVE-2021-3019)
  • 记录一种引起 CL.exe/ C++ 编译器无任何提示直接崩溃的问题
  • 【华为OD机试高分必刷题目】生理周期(C++-模拟迭代实现)