当前位置:首页 > 单片机课程设计测量电阻和电容
}
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; } }
//恢复初值
共分享92篇相关文档