基于stc89c52单片机设计电压表程序


-
目前单片机渗透到生活中的各个领域,广泛用于智能仪表、家用电器、医 疗设备、工业控制等诸多领域。本文使用单片机设计电压表, 具有开机后密码解锁,测量 0-5v 电压,以及输出 0-5v 间电压的功能。对该电压 表的设计使用了模块化的设计特点,主要用到了 C51 系列型号为 STC89C52RC 单 片机的矩阵键盘模块、AD/DA 转换模块、LCD 显示模块。该电压表相比于一般的 电压表,特点是体现了人机界面交互,即使用密码解锁后方可使用,与此同时, 进行电压输出时,可旋转变压器改变输出值。
unsigned char for(=0<8++)/*要传送的数据长度为8位树 f(c<<i)&0x80)da=1;/判断发送位 else sda=o nop sc|=1 置时钟线为高,通知被控器开始接收数据位 ; nop_0: /保证时钟高电平周期大于4μs nop o nop_o nop( sc|=0 nop_o nop_0 sda=1: /*8位发送完后释放数据线,准备接收应答位 nop_o nop_o nop_o op_0 p if(sda==1ack=0; else ack=1 /判断是否接收到应答信号* nop nop_o 字节数据接收函数 函数原型: UCHAR2 C_RCVByte( 功能 用来接收从器件传来的数据并判断总线错误(不发应答信号), 发完后请用应答函数应答从机。 大六大大士大大★★★★★★大大★大大大大水大大大大★大大★大大大大大x大大大大大头x大实x大实大x大 unsigned char 2C_Rcv Byte unsigned char retc=O, i da=1: /置数据线为翰入方式 for(=0;<8;1++) lop_0 scl=O /置时钟线为低,准备接收数据位* nop o p0; /时钟低电平周期大于475+ no no ppp Sc=1 /置时钟线为高使数据线上数据有效 nop_o nop_0 retc=retc<<1 f(sda=1)retc=retc+1;/读数据位接收的数据位放入retc中x pp_O n oo pp_0 nop_o return(retc 女★大★大★★★大★大★火★大★大★大★★★大★大★大文大x大x★大文★x头x大大大士★大★大★士★头★★★ 应答子函数 函数原型: void ack|2c(bita) 功能 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定) 大大大大大大大大十大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大大 void Ack_12c(bit a i(a==0)da=0 /在此发出应答或非应答信号* else sda=1 /0为发出应答,1为非应答信号* p_0 p_0 no p_0; nop_o /时钟低电平周期大于4us*/ nop_o 0; sc|=0: /*清时钟线,住|2C总线以便继续接收 nop_o ★★大为大大★火★火大大大大★大大大太火X大x大x大x大X大x大x大x大X大X大大大大大大大大★火大★ *函数名 Pcf8591 DaConversion 函数功能 PCF8591的输出端输出模拟量 *翰入 adr(器件地址), channel(转换通道), value(转换的数值) k输出 无 k大*大*★★大★大★大★★★大★*大大大*大**大大 bit Pcf8591_Da Conversion(unsigned char addr, unsigned char channel, unsigned char val) Start_12co ∥/启动总线 2C_ Send Byte(addr); 发送器件地址 f(ack==O)return(O) 12C_Send Byte(0x40 channel) /发送控制字节 t(ack==return(O) 12C- Send byte val) ∥/发送DAC的数值 flack==return(o) Stop 12c0 结束总线 return(1) 大★★计★★大★大★★★★大★★★大★大计大大★大xx大实太x大x大x大x大x大x大x大大大★大大头★★ 函数名 Pct8591 Send Byte 函数功能 写入一个控制命令 k输入 adr(器件地址), channel(转换通道) 输出 无 大六大十★大大★大大大★大大大★★大★大大大大★大大大大大大大★大大大大 bit PCF8591_ Send Byte(unsigned char addr, unsigned char channel) rt_12 c0 /启动总线 12C_Send Byteladdr) ∥/发送器件地址 if(ack==return(o) 12C_ Send Byte(0x40 channel) ∥/发送控制字节 if(ack==return(o) Stop_12 c0 结束总线 return(1) ★★★★★大★大★★★★大★大大★★大大★大★大★★大x大x大x大文大x大x大x大x大x大x大大火大大大★★★大★ 函数名 PCF8591 RcV Byte 函数功能 读取一个转换值 输入 输出 dat 大大★★大★★★★大★★大大★★大★大★★★★大★★大大大大大大大大大大大大大大大大★大大大x大x大x大x大★大实 unsigned char PCF8591_RcvByte(unsigned char addr) unsigned char dat Start 12c(; 启动总线 12C_Send Byte(addr+1); ∥发送器件地址 if(ack==Return(O) dat=12C_Rcv Byte O /读取数据0 Ack_12c(1; 送非应答信号 Stop_ 12co ∥结束总线 return(dat) /大木大★大大大大大★大大才大大大x大x大x大x大xx大x大大才★大大大大大大★大★大大/ 1602液晶屏相关函数 /★大大大大大大大大xxxx大xx大x大x大x大x大大才大大大大★才才大才/ void Delay Us(unsigned char us)//delay us unsigned char uscnt uscnt=us>>1; /* Crystal frequency in 12MHz*/ hile(--uscnt) 女★★★★★★★★★★★★★★★文文★大大文★x头文★x文★★★★★★★★/ void DelayS(unsigned char ms) //delay Ms hile(--ms) DelayS(250) DelayS(250) DelayS(250 DelayS(250): void Write Command (unsigned char c) DelayMs(5); //short delay before operation E=0 rs rw p0; E=1; Data=c E=0 /**大*大*★★**★* x*x*x*x*x*x*x*x*x大x void WriteData(unsigned char c) DelayMs(5); //short delay before operation E=0: rs=1 rW=0; nop_o E=1; Data=c E=0 /大六★大大大大大大大大大大大大六大大x六大★大★大★大★大六★大大★★大 void Show Char(unsigned char pos, unsigned char c) unsigned char p if (p p=pos+0xb0;/是第二行则命令代码高4位为0x 你=p00×30/足第二行则命令代码高4位为0×8 rite Command(p); //write command Write Data(c); //write data ★★★★★★★★★★★★★★★★★★★★★★★★*★*★文★文★文★文★文★文★文★文★文★文★★★★★★女★女*女*女*女*女★女★★女★ void Show String(unsigned char line, char *+ptr) unsigned char I =line<<4 for(=016++) Show Char(+,(ptr+);/循环显示16个字符 ★★★★★★大★大★★★★★★大★大★★★★★大大x大x大文大x大x大x大x大文大x大x大大★大★大★★★大★★★女大★★ void InitLcdo Delay Ms(15) Write Command(0x 38); //display mode Write Command(0x38); //display mode ommand(0x 38); //display mo WriteCommand(o×06);//显示光标移动位置 Writecommand(0×0c;显示开及光标设置 WriteCommand(0×01);/显示清屏 oid disp(void) FirstLine 2]='l FirstLine44]=N: FirstLine b3= FirstLine 6= FirstLine 9]=0+TempData2; FirstLine [11]=0+TempData3 FirstLine[10]= FirstLine [13]=V SecondLine[2]='o Second[4]=T dLine 3='l SecondLine[6]= SecondLine g=0+TempData[6 SecondLine[11]=0+TempData[71 Second[ l0 SecondLine[13]=v Show String(o, FirstLine Show String(1, SecondLine) 延时程序 void mDelayunsigned char j unsigned int i for (j>o j for(=0<125+ void delayuint xms)∥廷迟Xms for(i=xms; i>0; --) r(j=112」>0j--); void display()∥数码管显示函数 if(table l==0)&(table[2]==1)&(table3==2)&(table 4==3)) flag =1; void keyscan4x40 uchar temp, key, /第一行扫描∥ P3=0×fe;/1111110让P3.0口输出低 temp=P3 temp=temp&0xf0/1110000位与操作屏蔽后四位 if(temp!=0×0) delay(10) temp=P3 temp=temp&O×fo if(temp!=0×f0) temp=P3 switch(temp) case0xee:/11101110S1被按下 key=0 break case uxde /11011110S2被按下 key=1 break case Oxbe /10111110S3被按下 break case Ox7e /01111110S4被按下 break while(temp!=Oxf temp=P3 temp=temp&O×f0 tableinil=key n|+ if(ini>4 onetlag /1第二行扫描 P3=0xfd;//11101让P31口输出低 temp=P3 temp=temp&0xf0;/1110000位与操作屏蔽后四位 f(temp!=0×f0) delay (10) temp=P3 temp=temp& Oxfo f(temp!=0×f( temp=P3 h(temp) case0xed://11101101S5被按下 key=4 break case Odd /11011101S6被按下 key break case oxid 10111101S7被按下 break case Oxid //01111101S8被按下 key=7

1KB
简易数字电压表的设计
2014-04-05用A/D(模/数)转换接口芯片ADC0809和六位7段LED数码显示管设计一个能测量及显示电压范围为 0.00 ~ 5.00V的简易数字电压表。
99KB
电压表的代码
2017-07-07万用表代码
129KB
数字电压表的源代码及PROTEUS仿真(5V LED数码管显示)
2012-10-11通过51单片机搭建模拟电压转为数字电压的电路,用ADTLC549芯片实现模数转换,并且通过LED显示器显示出来。编译通过并且仿真运行可以达到想要的效果,实际搭建电路也可以实现但有轻微的闪烁。
4KB
数字电压表的汇编源代码
2011-03-20基于单片机的数字电压表的设计,完整汇编程序
70KB
高精度数字电压表原理图及源程序
2009-09-25利用单片机和AD574构成的高精度数字电压表
1.7MB
智能数字电压表
2019-04-15基于51单片机的只能数字电压表设计,使用AD0809转换器,并在HB12864液晶屏上进行显示
求数字电压表设计代码实现_course
2011-11-29利用8255、ADC0809等器件,制作1个数字显示的电压表。ADC0809的模拟输入为一个可变电位器的输出,输出电压为0-5V,将该模拟量数字化后,在屏幕上显示电位器的输出电压值,保留小数点2位(采
哪位大神来帮我看看这个51单片机实现数字电压表的代码_course
2016-06-20#include <reg52.h> #include <intrins.h> #define _Nop() _nop_();//空操作 sbit ST = P3^0; sbit OE = P3^1;
数字电压表简单仿真下载_course
2019-07-24数字电压表 基于proteus的仿真,以及源程序代码,简单的一种 相关下载链接://download.csdn.net/download/arshavinjj/3736042?utm_source=b
11KB
全国新冠疫情疑似数据.xlsx(2020/1/20-2020/6/8)仅疑似
2020-07-19内容包括我国整体!!整体!!2020/1/20-2020/6/8的当天的疑似数据,数据可能有误差,要求十分精确的勿扰。仅仅包含一个指标、疑似。
人脸识别项目实战特训营
2020-07-06人脸识别的技术及业务已经广泛应用于各行各业,如住宅安全管理、电子身份证护照、公安、司法和刑侦、自助服务、信息安全等。本训练营连续4天的时间,通过Opencv来采集需要识别的人脸数据库,并建立相关的ID信息标签,利用开源数据集,通过MTCNN模型、FaceNet模型的学习,编写人脸识别程序,并实现整个项目。
6.14MB
2019美赛ABCDEF题题目(附C题数据)
2019-01-312019美赛题目,完全是从官网下载,无翻译,可使用有道软件翻译浏览
Python进阶-Pandas数据分析库
2018-12-18您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Pandas是python中非常常用的数据分析库,在数据分析,机器学习,深度学习等领域经常被使用。本课程会讲解到pandas中最核心的一些知识点,包括Series以及DataFrame的构建,赋值,操作,选择数据,合并等等,以及使用pandas对文件进行读取和写入,使用pandas绘图等等。
43.61MB
windows运行go项目完整教程.zip
2021-01-18视频包含以下几部分: - go项目的下载 - go环境的下载和安装 - goland软件的下载安装 - goland导入项目与运行项目
WebSocket整合SpringBoot、SockJS、Stomp、Rabbitmq分布式消息推送
2020-04-28(1)HTML5 WebSocket、异常重连、心跳检测; (2)SockJS、Stomp、RabbitMQ Stomp消息代理; (3)负载均衡Nginx和SpringCloudGateway实现。
34.18MB
2020美赛A题海温数据.zip
2020-02-142020美赛a题海温数据,1877年至今,趁比赛还没结束上传赚点资源值 全球海洋温度影响某些海洋生物的栖息地质量。当温度变化太大,它们无法继续繁荣时,这些物种就会迁移到其他更适合它们现在和未来生活和繁
-
学院
Java Web开发之Java语言基础
Java Web开发之Java语言基础
-
下载
C#中的委托和事件(1)
C#中的委托和事件(1)
-
博客
OpenLooKeng连接hive出现UnknownHostException
OpenLooKeng连接hive出现UnknownHostException
-
下载
使用python创建一个简单的restful风格的webservice应用
使用python创建一个简单的restful风格的webservice应用
-
下载
接口测试实践篇
接口测试实践篇
-
下载
FP-PSO算法在认知无线电频谱分配上的应用研究
FP-PSO算法在认知无线电频谱分配上的应用研究
-
下载
接口测试自动化生成框架
接口测试自动化生成框架
-
博客
什么是django自带的用户系统1.27
什么是django自带的用户系统1.27
-
学院
Laya 2.0 开发3D小游戏 入门教学
Laya 2.0 开发3D小游戏 入门教学
-
学院
【2021】UI自动化测试框架(Selenium3)
【2021】UI自动化测试框架(Selenium3)
-
下载
AI潮流:腾讯云人脸特效的最新实践 .pdf
AI潮流:腾讯云人脸特效的最新实践 .pdf
-
下载
大数据机器学习系统研究进展
大数据机器学习系统研究进展
-
学院
PHP支付宝微信支付配置教程
PHP支付宝微信支付配置教程
-
博客
【算法百题之六十】下一个排列
【算法百题之六十】下一个排列
-
下载
中小型研发团队架构实践:微服务架构
中小型研发团队架构实践:微服务架构
-
学院
微信支付2021系列之付款码支付一学就会java版
微信支付2021系列之付款码支付一学就会java版
-
下载
一张图读懂SVN和Git原理(附环境搭建和使用)
一张图读懂SVN和Git原理(附环境搭建和使用)
-
学院
Qt and Qt Charts
Qt and Qt Charts
-
博客
2021-01-27
2021-01-27
-
下载
AJAX教程
AJAX教程
-
博客
js逆向-猿人学(10-11)js和app协议破解
js逆向-猿人学(10-11)js和app协议破解
-
学院
转行做IT-第8章 类与对象、封装、构造方法
转行做IT-第8章 类与对象、封装、构造方法
-
学院
微信支付V3版微信小程序支付C#版
微信支付V3版微信小程序支付C#版
-
学院
python办公自动化技巧
python办公自动化技巧
-
学院
全网唯一的为GIS+BIM而生的cesiumjs或cesium视频教程
全网唯一的为GIS+BIM而生的cesiumjs或cesium视频教程
-
下载
DragView.7z
DragView.7z
-
学院
SQL Server 2016 高可用灾备技术合集
SQL Server 2016 高可用灾备技术合集
-
下载
京东大规模数据中心网络运维监控之眼
京东大规模数据中心网络运维监控之眼
-
学院
Qt项目实战之基于Redis的网络聊天室
Qt项目实战之基于Redis的网络聊天室
-
博客
Invoke-customs are only supported starting with Android O (--min-api 26)
Invoke-customs are only supported starting with Android O (--min-api 26)