没有合适的资源?快使用搜索试试~ 我知道了~
首页基于stc89c52单片机设计电压表程序
基于stc89c52单片机设计电压表程序

目前单片机渗透到生活中的各个领域,广泛用于智能仪表、家用电器、医 疗设备、工业控制等诸多领域。本文使用单片机设计电压表, 具有开机后密码解锁,测量 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页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论5