单片机课程设计测量电阻和电容 联系客服

发布时间 : 星期一 文章单片机课程设计测量电阻和电容更新完毕开始阅读16645881571252d380eb6294dd88d0d232d43c28

}

uchar get_ad()//adc0804操作 {

uchar temp; adcs=1; adwr=1; _nop_(); delay(1); adcs=0; adwr=0; _nop_(); delay(1); adwr=1; adcs=1; delay(1); P1=0xff; adcs=1; adrd=1; delay(1); _nop_(); _nop_(); _nop_(); delay(20); adcs=0; adrd=0; _nop_(); temp=P1; delay(1); adrd=1; adcs=1; return temp; }

void main() {

IE=0x81; TMOD=0x09; IT0=1; TH0=0x00; TL0=0x00; T_flag=0; _reset=0;

//打开全外部中断允许 //T0为161

//设置外部中断的触发的方式为脉冲触发 LCDINIT();

while(1) {

if (!b_test==1) //如果有测量按键输入就往下执行 {

i=0;

_reset=1; //启动555时基芯片 EX0=1; //开启中断0

while(_reset) //超出等待时间,中断还没有过来,就退出 { i++;

if(i>5000) //设置最长等待时间 {

_reset=0; //最长等待时间到还没有中断,停止555 } }

if(N<100) { b[6]=0x1c; b[5]=0x1c; b[4]=0x11;

b[3]=0X1D; b[2]=0X23; }

if(N>5000) //如果计数值大于5000,显示LARGER,表示应换用大一点的量程 {b[6]=0x15;

b[5]=0x17; b[4]=0x22; b[3]=0X11; b[2]=0X1C; }

if(N>=100 && N<=5000) {

C=N/100;D=N0; //计算电容的大小 b[2]=C/10; //计算电容值的十位 b[3]=C-b[2]*10; //计算电容值的各位 b[5]=D/10;

b[6]=D-b[5]*10; } Display(); //显示电容的大小

wcomd(0x80+0x42);

Delay1ms(5);

wdata(0x30+b[2]); Delay1ms(5);

wcomd(0x80+0x43); Delay1ms(5);

wdata(0x30+b[3]); Delay1ms(5);

wcomd(0x80+0x45); Delay1ms(5);

wdata(0x30+b[5]); Delay1ms(5);

wcomd(0x80+0x46); Delay1ms(5);

wdata(0x30+b[6]);

Delay1ms(1000);

}

if(!c_test==1) {

Display1(); Data1=get_ad(); A=100*Data1;

H=A/(256-Data1); A1=H/10; A2=H;

wcomd(0x80+0x43); Delay1ms(5); wdata(0x30+A1); Delay1ms(5);

wcomd(0x80+0x45); Delay1ms(5); wdata(0x30+A2);

Delay1ms(1000); } } }

void int0(void) interrupt 0 //第一次中断开始计数,第二个中断停止计数 {

T_flag=!T_flag; if(T_flag==1)

{

TR0=1; //开始计时 }

if(T_flag==0) {

TR0=0; //停止计时 EX0=0; //关闭中断 _reset=0; //停止发出方波

N=TH0*256+TL0; //计算计数器的值 N=N*5/3;

TH0=0x00; TL0=0x00; } }

//恢复初值