/*设置转换i/0口 */ #include sbit clk=P3^6; sbit d0=P3^7; sbit cs=P2^0; //sbit spk=P1^7; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*=========================================== adc0832转换子程序 ============================================*/ unsigned char adc_read(){ unsigned char temp0,temp1,i; clk=0; cs=1; ; cs=0; //复位 d0=1; clk=1; //上升沿启动 ; clk=0; ; d0=1; clk=1; //上升沿第二个脉冲,d0=1 ; ; clk=0; d0=0; clk=1; //上升沿第三个脉冲送sgl ; clk=0; ; clk=1;//空闲位 d0=1; //释放d0 for(i=0;i<8;i++) {temp0=temp0<<1; clk=0; if(d0)temp0=temp0|0x01;//下降沿取数据; ; clk=1; } if(d0)temp1=0x80;//第一位 for(i=0;i<7;i++) { temp1=temp1>>1; clk=0; ; if(d0)temp1=temp1|0x80;//下降沿取数据 ; clk=1; } cs=1; //片选关闭 if(temp0==temp1) {//spk=0; */ return(temp0); }
} /*================================= 2ms延时子程序 ===================================*/ delay2ms() {unsigned char m,n; for(m=0;m<20;m++) for(n=0;n<48;n++); } /*================================= 主程序 ===================================*/ main(){ unsigned int b; while(1) { b=(int)(adc_read()*4.74*100/256); //计算输出电压值b为int型,char型值不够 P0=0xff; P1=0xff; //消隐 P1=0xfe; P0=table[b/100]; delay2ms(); //输出个位 P1=0xff; P0=0xff; //消隐 P1=0xfd; P0=table[b/10%10]; delay2ms(); //输出十位 P1=0xff; P0=0xff; //消隐 P1=0xfb; P0=table[b%10]; delay2ms(); //输出百位
} } |