新手有关ADC采样并输出1602显示的问题。

2019-07-16 05:14发布

本帖最后由 dd447555271 于 2012-7-14 13:45 编辑

小弟想使用ADC0804采样外部输入电压,并用1602液晶显示其峰值,主程序如下。目前有以下问题弄不明白,还请各位老师大侠师兄师弟师姐师妹指导。。
1,为什么LCD上始终无法显示X.XXV,而只有“VIN”,要怎么改才能使得两者同时显示?
2,   我的程序中采样函数错了吗?
3,我怀疑是由于vin max num 和a b c 个变量类型有错导致的问题,求指教。。。
  1. #include"intrins.h"
  2. #include"at89x51.h"
  3. #define uint         unsigned int
  4. #define uchar unsigned char
  5. #define DATE_IO P2
  6. sbit RS=P3^5;
  7. sbit RW=P3^3;
  8. sbit E=P3^4;
  9. sbit cs=P2^0;
  10. sbit rd=P3^7;
  11. sbit wr=P3^6;
  12. sbit intr=P3^0;
  13. uchar code table[]="VIN:";
  14. uchar code table2[]="0123456789";
  15. uchar num=0,max=0;
  16. uint         vin=0;
  17. uint a=0,b=0,c=0;

  18. void delay_us(unsigned int n)
  19. {
  20.         if (n == 0)
  21.         {  
  22.                  return ;  
  23.         }
  24.           while (--n);
  25. }
  26. /*—” ±∫Ø ˝*/
  27. void delay_ms(uint i)
  28. {
  29.         unsigned int a, b;
  30.         for (a = 1; a < i; a++)
  31.         {
  32.                    for (b = 1; b<100; b++)
  33.                    {   
  34.                         ;   
  35.                 }
  36.     }
  37. }
  38. /*---------------------------------------------*/
  39. void delay(uint z)
  40. {
  41.                 uint x,y;
  42.                 for(x=11;x>0;x--)
  43.                 for(y=z;y>0;y--);
  44. }
  45. void write_come(uchar come)
  46. {
  47.         RS=0;
  48.         RW=0;
  49.         E=1;
  50.         DATE_IO=come;
  51.         delay_us(5);
  52.         E=0;
  53.         RS=1;
  54.         RW=1;
  55. }               
  56. void write_date(uchar date)
  57. {
  58.         RS=1;
  59.         RW=0;
  60.         E=1;
  61.         DATE_IO=date;
  62.         delay_us(5);
  63.         E=0;
  64.         RS=0;
  65.         RW=1;
  66. }               
  67. void init()
  68. {
  69.         E=0;
  70.         write_come(0x38);//œ‘ 惣 Ω…Ë÷√
  71.         delay_ms(5);
  72.         write_come(0x08);//œ‘ æπÿ±’
  73.         delay_ms(5);
  74.         write_come(0x01);//œ‘ æ«Â∆¡
  75.         delay_ms(5);
  76.         write_come(0x06);//œ‘ æπ‚±Í“∆∂Ø…Ë÷√
  77.         write_come(0x0c);
  78.         delay_ms(5);
  79. }
  80. void init_time()
  81. {
  82.                 uchar i;
  83.                 for(i=0;i<4;i++)
  84.                 {
  85.                 write_come(0x80+i);
  86.                 write_date(table[i]);
  87.                 }
  88. /*for(j=0;j<7;j++)
  89.         {
  90.                 write_come(0x80+0x40+j);
  91.                 write_date(table1[j]);
  92.         }  */
  93. }         


  94. uchar read_ad()
  95. {
  96.                 uchar i;
  97.                 rd=1;wr=1;intr=1;
  98. //        P1=0xff;
  99.                 cs=0;wr=0;_nop_();wr=1;
  100.                 while(intr);
  101.                 rd=0;
  102.                 i=i;i=i;
  103.                 num=P1;
  104.                 rd=1;cs=1;
  105.                 return(num);
  106. }


  107. /*-------------------------*/
  108. void main()
  109. {                        
  110.                                 
  111.                                 init();
  112.                                 init_time();
  113.                                 while(1)
  114. {                                
  115.                                 read_ad();
  116.                                 if(num>max)
  117.                             {    max=num;}
复制代码
MAIN.C 下载积分: 积分 -1 分
2.13 KB, 下载次数: 10, 下载积分: 积分 -1 分 主程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lstcspring
1楼-- · 2019-07-16 09:33
AD有输出吗!还有AD的输出,你得转换成对应的电压值才对啊,你程序里面没有!显示程序可以单独调试,最简单直接送个数,看显示是否正常,还有没看到程序里面送“VIN”出来显示啊!
乄鎭鈊愛妳ツ
2楼-- · 2019-07-16 11:40
 精彩回答 2  元偷偷看……

一周热门 更多>