没有合适的资源?快使用搜索试试~ 我知道了~
首页基于stc89c52单片机设计电压表程序
基于stc89c52单片机设计电压表程序
5星 · 超过95%的资源 需积分: 39 24 下载量 65 浏览量
更新于2023-03-16
评论 1
收藏 272KB PDF 举报
目前单片机渗透到生活中的各个领域,广泛用于智能仪表、家用电器、医 疗设备、工业控制等诸多领域。本文使用单片机设计电压表, 具有开机后密码解锁,测量 0-5v 电压,以及输出 0-5v 间电压的功能。对该电压 表的设计使用了模块化的设计特点,主要用到了 C51 系列型号为 STC89C52RC 单 片机的矩阵键盘模块、AD/DA 转换模块、LCD 显示模块。该电压表相比于一般的 电压表,特点是体现了人机界面交互,即使用密码解锁后方可使用,与此同时, 进行电压输出时,可旋转变压器改变输出值。
资源详情
资源评论
资源推荐
附录
//电压表程序//
#include<reg52.h>
#include"bstv51.h"
#include <intrins.h>
int ini=1;
int oneflag=0;
uchar table[5]; //0-9&A-F&“不显示” 字型码
int flag=0;
#define AddWr 0x90 //PCF8591 地址
unsigned char AD_CHANNEL;
sbit scl=P2^1; //I2C 时钟
sbit sda=P2^0; //I2C 数据
bit ack; /*应答标志位*/
sbit rst=P2^4;
sbit rs = P1^0;//Pin4
sbit rw = P1^1; //Pin5
sbit E = P2^5;//Pin6
#define Data P0 //数据端口
unsigned char TempData[8];
unsigned char SecondLine[]=" ";
unsigned char FirstLine[] =" ";
//////////////////////////////////////////////
/*******************************************************************
起动总线函数
函数原型: 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++)
{
剩余13页未读,继续阅读
ConRob
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- ExcelVBA中的Range和Cells用法说明.pdf
- 基于单片机的电梯控制模型设计.doc
- 主成分分析和因子分析.pptx
- 共享笔记服务系统论文.doc
- 基于数据治理体系的数据中台实践分享.pptx
- 变压器的铭牌和额定值.pptx
- 计算机网络课程设计报告--用winsock设计Ping应用程序.doc
- 高电压技术课件:第03章 液体和固体介质的电气特性.pdf
- Oracle商务智能精华介绍.pptx
- 基于单片机的输液滴速控制系统设计文档.doc
- dw考试题 5套.pdf
- 学生档案管理系统详细设计说明书.doc
- 操作系统PPT课件.pptx
- 智慧路边停车管理系统方案.pptx
- 【企业内控系列】企业内部控制之人力资源管理控制(17页).doc
- 温度传感器分类与特点.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5