![]() |
發布時間: 2023-3-25 01:02
正文摘要:uchar ADC_read_data(uchar CH) { uchar i,test,adval; adval = 0x00; test = 0x00; CLK = 0; //初始化 D ... |
已解決,換了一個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); } } |
應該是時序的問題。
|