我实在没有兴趣读微积分了。就接着上次弄的继续做。最近晚上天天失眠,所以就换种方式生活,宅男加夜猫。
/***************************************** 2011年5月23日 ADC0804,AT89S51 连接: 数码管: P0数据,段选P2^7,位选P2^6. ADC0804: 数据输出P1 WR=P3^6 RD=P3^7 INTR悬空 CS接GND 现象:拧动滑动变阻器 数码管示数在0--255之间 *****************************************/ #include <reg51.h> #include <intrins.h> sbit duanxuan=P2^7; sbit weixuan=P2^6; sbit AD_WR=P3^6; //定义ADC0804的WR端口 sbit AD_RD=P3^7; //定义ADC0804的RD端口 unsigned char shu[8]; unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /**************************************** 延时函数 ****************************************/ void delayms(unsigned int xms) { unsigned char i,j; for(i=xms;i>0;i--) for(j=120;j>0;j--); } /**************************************** 显示函数 ****************************************/ void display() { unsigned char i; for(i=0;i<3;i++) { P0=0; duanxuan=1; duanxuan=0; P0=weima[i]; weixuan=1; weixuan=0; P0=shu[i]; duanxuan=1; duanxuan=0; delayms(4); } } /**************************************** MAIN ****************************************/ void main() { unsigned char adval; unsigned int a ; while(1) { AD_WR=1; _nop_(); AD_WR=0;//启动AD转换 _nop_(); AD_WR=1; for(a=10;a>0;a--) //启动转换后要多留点时间用来转换 { display();} P1=0xff; //读取P1口之前先给其写全1 AD_RD=1; _nop_(); AD_RD=0;//AD读使能 _nop_(); adval=P1; //AD数据读取赋给adval AD_RD=1; shu[0]=duanma[adval/100]; shu[1]=duanma[adval%100/10]; shu[2]=duanma[adval%10]; display(); for(a=100;a>0;a--) display(); } }