找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

有关用ADC0809做的数字电压表的问题

[复制链接]
admin 发表于 2012-9-2 16:14:22 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
各位高手:我用AT89S51单片机和ADC0809芯片做了一个量程为5V的数字电压表,现在我想把量程扩大到20V,不知道程序该怎么改,我改了好几天,都没调出来,请各位赐教,谢谢!

附:5V电压表程序

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define SEG P1 //声明数码管接P1口
uchar TAB[]={ 0x3f,0x06,0x5b,0x4f,0x66,//共阴字形码
0x6d,0x7d,0x07,0x7f,0x6f};
uchar disp[4];//显示器数组
uint temp,result;
void display(void);//声明显示函数
void delay1ms(uchar);//声明延时函数
void init(void);//初始化函数
sbit CLK=P3^5;//时钟接口
sbit EOC=P3^2;
sbit ST=P3^6;
sbit OE=P3^7;
//=====主函数=================
main()
{ init();
ST=0;
while(1)
{ ST=1;//启动
ST=0;
while(EOC==0);//查询等待转换结果
OE=1;//打开输出允许信号
temp=P0;//读数据
result=temp*1.0/255*500;
disp[0]=result/1000;
disp[1]=result/100%10;
disp[2]=result/10%10;
disp[3]=result%10;
display();
}
}
//======显示函数=============
void display(void)
{ uchar i,scan;
scan=1;
for(i=0;i<4;i++)
{ P2=~scan;
SEG=TAB[disp];
if(i==1)
SEG=SEG|0x80;//显示小数点
delay1ms(4);
scan<<=1;
}
}
//=====延时1MS函数=========
void delay1ms(uchar x)
{ uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
//=====T0初始化函数============
void init(void)
{ EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
TR0=1;
}
//=======T0中断服务,提供时钟信号======
void timer0(void) interrupt 1
{ TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-28 23:22 , Processed in 0.056841 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表