標題: 單片機adc0804轉(zhuǎn)換電壓使用1602顯示。為什么檢測不到P1端的電壓值 [打印本頁]

作者: 15254040709    時間: 2017-9-11 20:09
標題: 單片機adc0804轉(zhuǎn)換電壓使用1602顯示。為什么檢測不到P1端的電壓值
adc0804轉(zhuǎn)換電壓使用1602顯示。為什么檢測不到P1端的電壓值。
程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code table[]="Voltage:";
  6. uchar code table1[]="V";
  7. uchar table2[3];
  8. uchar table3[]={0,1,2,3,4,5,6,7,8,9};
  9. uchar table4[]={.1};
  10. sbit lcden=P3^4;
  11. sbit lcdrs=P3^5;

  12. sbit dula=P2^6;
  13. sbit wela=P2^7;

  14. sbit adwr=P3^6;
  15. sbit adrd=P3^7;
  16. sbit adcs=P3^0;
  17. uchar num;
  18. void delay(uint z)
  19. {
  20.         uint x,y;
  21.         for(x=z;x>0;x--)
  22.                 for(y=110;y>0;y--);
  23. }
  24. void write_com(uchar com)
  25. {        lcden=0;
  26.         lcdrs=0;
  27.         P0=com;
  28.         delay(5);
  29.         lcden=1;
  30.         delay(5);
  31.         lcden=0;
  32. }
  33. void write_data(uchar date)
  34. {        lcden=0;
  35.         lcdrs=1;
  36.         P0=date;
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;
  41. }
  42. void init()
  43. {
  44.         dula=0;
  45.         wela=0;
  46.         lcden=0;
  47.         write_com(0x38);
  48.         write_com(0x0c);
  49.         write_com(0x06);
  50.         write_com(0x01);
  51. }
  52. void main()
  53. {        uchar adval,A3,A2,A1,b;
  54.         init();
  55.         write_com(0x80);
  56.         for(num=0;num<8;num++)
  57.         {
  58.                 write_data(table[num]);
  59.                 delay(5);
  60.         }
  61.         write_com(0x80+0x0e);
  62.         for(num=0;num<1;num++)
  63.         {
  64.                 write_data(table1[num]);
  65.                 delay(5);
  66.         }

  67.         while(1)
  68.         {        adcs=1;
  69.                 adwr=1;
  70.                 _nop_();
  71.                 adwr=0;
  72.                 _nop_();
  73.                 adwr=1;
  74.                
  75.                 P1=0xff;
  76.                 adrd=1;
  77.                 _nop_();
  78.                 adrd=0;
  79.                 _nop_();
  80.                 adval=P1;
  81.                 adcs=0;
  82.                 adrd=1;
  83.                 for(b=0;b<5;b++)
  84.                 {
  85.                 write_com(0x80+0x0a);
  86.                 write_data(table2[0]+48);
  87.                 write_com(0x80+0x0b);
  88.                 write_data(table2[1]+48);
  89.                 write_com(0x80+0x0c);
  90.                 write_data(table2[2]+48);         
  91.                  }
  92.                 A1=adval/100 ;
  93.                 A2=adval%100/10;
  94.                 A3=adval%10;
  95.                 table2[0]=table3[A1];
  96.                 table2[1]=table3[A2];
  97.                 table2[2]=table3[A3];
  98.                
  99.                
  100.                        
  101.         }
  102. }
復制代碼



作者: zl2168    時間: 2017-9-11 21:49
P1端的電壓值是數(shù)字信號,不是模擬信號!
作者: wc86110    時間: 2017-9-12 05:47
沒頭沒腦滴不明白樓主說的是啥意思
作者: 15254040709    時間: 2017-9-12 08:37
zl2168 發(fā)表于 2017-9-11 21:49
P1端的電壓值是數(shù)字信號,不是模擬信號!

就是讓P1端的數(shù)字信號顯示出來。不是嗎?求指教
作者: zl2168    時間: 2017-9-12 10:11
本帖最后由 zl2168 于 2017-9-12 10:18 編輯

檢測不到P1端的電壓值?你怎么檢測?用萬用表嗎?還是keil中觀測P1口的數(shù)據(jù)?
給你介紹幾個參考案例參考一下吧!
Proteus仿真一下,確認有效。
實例81 ADC0808中斷方式A-D(ALE輸出CLK)
實例81 ADC0808A-D( ALE輸出CLK,中斷方式).rar (54.32 KB, 下載次數(shù): 4)

實例82  ADC0808查詢方式A-D(ALE輸出CLK)
實例82 ADC0808A-D( ALE輸出CLK,查詢方式).rar (54.04 KB, 下載次數(shù): 3)

實例83  ADC0808延時方式A-D(ALE輸出CLK)
實例83 ADC0808A-D( ALE輸出CLK,延時等待方式).rar (54.13 KB, 下載次數(shù): 3)

實例84  ADC0808并行A-D(虛擬CLK)
實例84 ADC0808A-D(虛擬CLK).rar (35.75 KB, 下載次數(shù): 2)





以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1.書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。









歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1