找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2864|回复: 2
打印 上一主题 下一主题
收起左侧

ADC0832转换5V电压表源程序

[复制链接]
跳转到指定楼层
楼主
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <string.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit CS = P1^0;      
  7. sbit CLK = P1^1;      
  8. sbit DI = P1^2;      
  9. sbit DO = P1^2;      
  10. sbit RS = P2^0;      
  11. sbit RW = P2^1;      
  12. sbit E = P2^2;
  13. uchar Result_ADC0832=0;
  14. uchar Display_Buffer [2][16] ={
  15. {"Current Voltage:"},
  16. {"(CH)=  0.00V"}
  17. };
  18. uchar Get_Value_ADC0832();
  19. void Refesh_Disp_Buffer();
  20. void LCD_Busy_Check();
  21. void LCD_Write_Command(uchar cmd);
  22. void Write_LCD_Data(uchar dat);
  23. void Initialize_LCD1602();                             
  24. void LCD_Display(uchar str[]);                        
  25. void DelayMS(uint X);
  26. uchar Read_State();
  27. void main()
  28. {
  29. uchar j;
  30. Initialize_LCD1602();                                 
  31. while(1)
  32.    {
  33.                for(j=0;j<2;j++)
  34.                  {
  35.                           Get_Value_ADC0832();
  36.        Refesh_Disp_Buffer();
  37.                          if(j==0)
  38.        {
  39.                             LCD_Write_Command(0x80);
  40.                                   LCD_Display(Display_Buffer[j]);
  41.                           }                                 
  42.          else                 
  43.                    {
  44.                                          LCD_Write_Command(0xC0);
  45.            LCD_Display(Display_Buffer[j]);                                         
  46.                                 }                        
  47.                   }
  48.           }         
  49. }
  50. uchar Get_Value_ADC0832()
  51. {
  52.          uchar i,dat1=0,dat2=0;
  53.    CS=0; _nop_(); _nop_();
  54.    CLK=0; _nop_(); _nop_();
  55.    DI=1; _nop_(); _nop_();
  56.    CLK=1;  _nop_(); _nop_();
  57.    CLK=0; DI=1; _nop_(); _nop_();
  58.    CLK=1;       _nop_(); _nop_();
  59.          CLK=0; DI=1; _nop_(); _nop_();      
  60.          CLK=1; DI=0; _nop_(); _nop_();      
  61.    CLK=0; DI=1; _nop_(); _nop_();
  62. for(i=0;i<8;i++)
  63. {
  64.            CLK=1; _nop_(); _nop_();
  65.      CLK=0; _nop_(); _nop_();
  66.          dat1=dat1<<1|DO;
  67. }
  68. for(i=0;i<8;i++)
  69. {
  70.        dat2=dat2|((uchar)(DO)<<i);
  71.            CLK=1; _nop_(); _nop_();
  72.          CLK=0;         _nop_(); _nop_();
  73.   }
  74.     CS=1;
  75.           DI=1;
  76.         return Result_ADC0832=(dat1==dat2)?dat1:0;         
  77. }
  78. void Refesh_Disp_Buffer()
  79. {
  80.    uint t=Result_ADC0832*500.0/255;
  81.          if(t==1) t==0;
  82.          Display_Buffer[1][7] = t/100+'0';         
  83.          Display_Buffer[1][9] =t%100/10+'0';      
  84.          Display_Buffer[1][10] = t%100/10+'0';      
  85. }
  86. void DelayMS(uint X)
  87. {
  88.   uchar i;
  89.   while(X--)                 for(i=0;i<120;i++);      
  90. }
  91. uchar Read_State()
  92. {
  93.    uchar state;
  94.          RS=0;
  95.          RW=1;
  96.          E=1;
  97.          DelayMS(1);
  98.          state=P0;
  99.          E=0;
  100.          DelayMS(1);
  101.          return state;
  102.   }
  103. void LCD_Busy_Check()                                          
  104. {
  105.   while(Read_State()& 0x80!=0x80);
  106.         DelayMS(1);
  107. }
  108. void LCD_Write_Command(uchar cmd)                             
  109. {
  110.    LCD_Busy_Check();                                            
  111.          RS=0;
  112.          RW=0;
  113.          E=0;
  114.          P0=cmd;
  115.          E=1;
  116.          DelayMS(1);
  117.          E=0;
  118.   }
  119. void Write_LCD_Data(uchar dat)                                       
  120. {
  121.    LCD_Busy_Check();                                                   
  122.          RS=1;
  123.          RW=0;
  124.          E=0;
  125.          P0=dat;
  126.          E=1;
  127.          DelayMS(1);
  128.          E=0;
  129.   }
  130. void Initialize_LCD1602()                                                
  131. {
  132.    LCD_Write_Command(0x38);DelayMS(1);
  133.          LCD_Write_Command(0x0C);DelayMS(1);
  134.          LCD_Write_Command(0x06);DelayMS(1);
  135.          LCD_Write_Command(0x01);DelayMS(1);
  136.   }
  137. void LCD_Display(uchar *str)
  138. {
  139.   uchar k;
  140.         for(k=0;k<strlen(str);k++)
  141.         {
  142.           Write_LCD_Data(str[k]);
  143.                 DelayMS(2);
  144.          }
  145. }                       

复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390650 发表于 2018-9-17 19:21 | 只看该作者
怎么 出不来结果呢 只是5V不动
回复

使用道具 举报

板凳
ID:214520 发表于 2018-9-23 17:10 | 只看该作者
第81行的t==0不知道啥意思。第83、84修改成这样精度可以高一点   Display_Buffer[1][9] =t/10%10+'0';      
         Display_Buffer[1][10] = t%10+'0';  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表