已解决,换了一个ADC0832.dll文件 |
我用了别人的光照程序依旧不变,我已经开始怀疑是proteus的问题了,但我换了一个proteus8.13还是没用 |
angmall 发表于 2023-3-25 15:06 我用了您的程序并没有得到解决。我认为是adc0832程序读取的问题,使电阻改变lcd得不到改变,不知您有什么见解 |
感觉没什么问题呀,我跟你一样的adc读取程序,除了显示部分有区别外,基本一致,我的能正常显示。 #include "reg51.h" #include<intrins.h> #include "lcd.h" #define uint unsigned int #define uchar unsigned char uchar getdata=0; unsigned char dat = 0; unsigned long int voltage = 0; sbit CLK = P2^0; sbit CS = P2^1; sbit dio1 = P2^2; sbit dio0 = P2^2; uchar ADC0832_Read(uchar CH) { unsigned char adval,test,i; adval = 0x00; test = 0x00; CLK = 0; dio1 = 1; _nop_(); CS = 0; _nop_(); CLK = 1; _nop_(); if(CH == 0x00) { CLK = 0; dio1 = 1; _nop_(); CLK = 1; _nop_(); CLK = 0; dio1 = 0; _nop_(); CLK = 1; _nop_(); } else { CLK = 0; dio1 = 1; _nop_(); CLK = 1; _nop_(); CLK = 0; dio1 = 1; _nop_(); CLK = 1; _nop_(); } CLK = 0; dio1 = 1; for(i=0;i<8;i++) { _nop_(); adval<<=1; CLK = 1; _nop_(); CLK = 0; if(dio0) adval |= 0x01; else adval |= 0x00; } for(i=0;i<8;i++) { test>>=1; if(dio0) test |= 0x80; else test |= 0x00; _nop_(); CLK = 1; _nop_(); CLK = 0; } // if(test == adval) getdata = test; _nop_(); CS = 1; dio0 = 1; CLK = 1; return getdata; } void ADC_change(uchar input) { unsigned char ADC[4] = {0}; voltage = input*5000.0/255; ADC[0] = voltage/1000; ADC[1] = voltage/100%10; ADC[2] = voltage/10%10; ADC[3] = voltage%10; LcdWriteCom(0x80); //LcdWriteCom(0x81); LcdWriteData('0'+ADC[0]); //LcdWriteCom(0x82); LcdWriteData('0'+ADC[1]); //LcdWriteCom(0x83); LcdWriteData('0'+ADC[2]); // LcdWriteCom(0x84); LcdWriteData('0'+ADC[3]); //LcdWriteCom(0x86); LcdWriteData('m'); LcdWriteData('v'); } void main() { LcdInit(); while(1) { dat = ADC0832_Read(0x00); ADC_change(dat); } } |
应该是时序的问题。
|