基于51单片机的电压表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电路原理图程序清单:

//*******************************头文件及宏定义************************** *

#include

#define TIME0H 0x3C

#define TIME0L 0xB0

#define uchar unsigned char

#define uint unsigned int

//******************端口设置********** #define OUTPORT P2 //ADC0809数据接口

#define LCDPORT P0 //LCD数据接口sbit SET=P1^3; //定义调整键sbit DEC=P1^4; //定义减少键sbit ADD=P1^5; //定义增加键uchar x=0; //计数器

sbit LCDRS=P3^5;// 寄存器选择信号sbit LCDRW=P3^6; //读写信号sbit LCDE=P3^7; //片选信号sbit LED1=P1^0; //下限提示灯sbit LED2=P1^1; //上限提示灯sbit START=P3^4;//ATART,ALE接口。0->1->0:启动AD转换。sbit EOC=P3^3; //转换完毕由0变1. sbit alarmflag=P1^2;

sbit CLK=P3^2;

//********************************全局变量***************************** unsigned int shangxian=300; //上限报警温度,默认值为38 unsigned int xiaxian=200; //下限报警温度,默认值为38 unsigned char uc_Clock=0;//定时器0中断计数bit b_DATransform=0; //启动adc0809转换时间到标志,为1是启动A/D转换bit lowflag; //下限标志bit highflag; //上限标志uchar set_st=0; //状态标志bit shanshuo_st; //闪烁间隔标志//******************************函数声明***************************** void vDelay(); // 延时函数

void vWriteCMD(unsigned char ucCommand);//把一个命令写入LCD函数void vWriteData(unsigned char ucData); //把一个数据写入LCD函数void vShowOneChar(unsigned char ucChar);//把一个字符写入LCD函数void vShowChar(unsigned char ucaChar[]); //把一组字符写入LCD函数void vShowVoltage(unsigned int uiNumber); //显示函数void vdInitialize(); //LCD初始化函数void Time0(); // 定时器0中断函数unsigned int uiADTransform(); // AD转换函数//*****外部中断0服务程序***** void int0(void) interrupt 0

{

EX0=0; //关外部中断0

if(DEC==0&&set_st==1)

{

vDelay();

do{}

while(DEC==0&&set_st==1); shangxian=shangxian-5;

if(shangxian

}

else if(DEC==0&&set_st==2)

{ vDelay();

do{}

while(DEC==0&&set_st==2);

xiaxian=xiaxian-5;

if(xiaxian<0)xiaxian=0;

}

}

//*****外部中断1服务程序*****

void int1(void) interrupt 2

{

EX1=0; //关外部中断1

if(ADD==0&&set_st==1)

{ vDelay();

do{}

while(ADD==0&&set_st==1);

shangxian=shangxian+5;

if(shangxian>500)shangxian=500;

}

else if(ADD==0&&set_st==2)

{

vDelay();

do{}

while(ADD==0&&set_st==2);

xiaxian=xiaxian+5;

if(xiaxian>shangxian)xiaxian=200;

}

}

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> unsigned int uiADTransform()

{

unsigned int uiResult;

OUTPORT=0x00;

START=1; //启动AD转换。

START=0;

while(EOC==0); //等待转换结束。

OUTPORT=0xff;

uiResult=OUTPORT; //出入转换结果。

uiResult=(100*uiResult)/51; //处理运算结果。

return uiResult;

}

相关文档
最新文档