数字万用表的一种设计源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附录
完整程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit start=P3^0;//ADC0808控制端引脚定义
sbit eoc=P3^1;
sbit cs=P2^3;
sbit clock=P2^4
sbit V=P2^5;//电压、电流、电阻测量换挡引脚定义
sbit I=P2^6;
sbit R=P2^7;
sbit a=P3^5;//ADC0808控制输入端引脚定义
sbit b=P3^6;
sbit c=P3^7;
sbit duan=P2^0;//锁存器74HC573使能端引脚定义
sbit wei=P2^1;
uchar code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管代码表"0-F"
uchar code
table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; //共阴数码管代码表"0-F"(带小数点)
uchar ge=0,shi=0,bai=0,qian=0,wan=0,sw=0;//声明全局变量,用于数码管显示,分别为“个、十百、千、万、十万”
void delay(uint count)//延时1ms 子程序
{
uint i,j;
for(i=0;i for(j=0;j<120;j++); } void clockf() interrupt 1 { clock=~clock; TL0=0xfe; TH0=0xff; TF0=0; } /*主函数*/ void main() { uint adval,adval2,adval3;//声明变量 unsigned long int temp; TL0=0xfe; TH0=0xff; IE0=1; EA=1; TR0=1; while(1) { if(V==0)//选择电压档,进行电压测量{ a=0;b=0;c=0;//ADC0808通道选择 start=0; cs=0; delay(5); start=1; delay(5); start=0; while(1) { if(eoc==1) { cs=1; adval=P1;//读取数字量 temp=adval* 1.0/255* 1000;//换算成具体电压值的100倍 cs=0; sw=temp/100000;//取各位的具体数值 wan=temp%100000/10000; qian=temp%10000/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10; //delay(5); P0=0x00; //清除P0口的数据,方便下次赋值delay(5); wei=1;duan=0;//对数码管进行位选 P0=0xdf; delay(2); wei=0;duan=1;//对数码管进行段选(下面类似)P0=table[ge]; delay(2); P0=0x00; wei=1;duan=0; P0=0xef; delay(2); wei=0;duan=1; P0=table[shi]; delay(2); P0=0x00; wei=1;duan=0; P0=0xf7; delay(2); wei=0;duan=1; P0=table1[bai]; delay(2); P0=0x00; wei=1;duan=0; P0=0xfb; delay(2); wei=0;duan=1; P0=table[qian]; delay(2); P0=0x00; wei=1;duan=0; P0=0xfd; delay(2); wei=0;duan=1; P0=table[wan]; delay(2); P0=0x00; wei=1;duan=0; P0=0xfe; delay(2); wei=0;duan=1; P0=table[sw]; delay(2); P0=0x00; start=1; start=0; delay(10); } if(I==0||R==0)break;//中途换挡则退出循环 } } if(I==0)//选择电流档进行电流测量{ a=0;b=1;c=0; start=0; cs=0; delay(5); start=1; delay(5); start=0; while(1) { if(eoc==1) { cs=1; adval2=P1; temp=adval2*0.1/255*500000; cs=0; sw=temp/100000; wan=temp%100000/10000; qian=temp%10000/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10; P0=0x00; delay(5); wei=1;duan=0; P0=0xdf; delay(2); wei=0;duan=1; P0=table[ge]; delay(2); P0=0x00;