标题: 51单片机ADC0832和1602显示电压值 proteus仿真 [打印本页]

作者: quanling    时间: 2017-4-26 20:35
标题: 51单片机ADC0832和1602显示电压值 proteus仿真
我就来玩玩,proteus仿真关于51单片机ADC0832的下面是原理图:



单片机源程序:
  1. #include <reg52.h>
  2. #include "ADC0832.h"
  3. #include "LCD1602.h"

  4. unsigned char code tab1[] = "CurrentVoltage:";
  5. unsigned char code tab2[] = "    V";

  6. void main()
  7. {
  8.         unsigned char i;
  9.         int v = 0;
  10.         init1602();
  11.        
  12.         write1602_com(0x80);
  13.         for(i = 0; tab1[i]; ++i)
  14.                 write1602_dat(tab1[i]);
  15.        
  16.         write1602_com(0x80 + 0x40);
  17.         for(i = 0; tab2[i]; ++i)
  18.                 write1602_dat(tab2[i]);
  19.        
  20.         while(1) {
  21.                 v = 5.0 * read0832() / 256 * 100;
  22.                 write1602_com(0x80 + 0x40 + 3);
  23.                 write1602_dat('0' + v/100 );
  24.                 write1602_dat('.');
  25.                 write1602_dat('0' + v/10%10 );
  26.                 write1602_dat('0' + v%10 );
  27.         }
  28. }
复制代码

  1. #ifndef ADC0832_H
  2. #define ADC0832_H


  3. sbit CS_0832 = P1^4;
  4. sbit CLK_0832 = P1^5;
  5. sbit DO_0832 = P1^6;        // DI、DO不同时有效,可共用一个接口
  6. sbit DI_0832 = P1^7;


  7. extern void _nop_ ( void );
  8. #define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0
  9.                                  
  10. //把模拟电压值转换成8位二进制数并返回
  11. unsigned char read0832()
  12. {
  13.         unsigned char i, ch = 0, ch1 = 0;
  14.         CS_0832=0;                // 片选,DO为高阻态
  15.         
  16.         DI_0832=1;
  17.         
  18.         // 此处暂停T-SetUp: 250ns (由pulse0832完成)
  19.         pulse0832();        // 第一个脉冲,起始位,DI置高
  20.         
  21.         DI_0832=1;
  22.         pulse0832();        // 第二个脉冲,DI=1表示双通道单极性输入
  23.         
  24.         DI_0832=1;
  25.         pulse0832();        // 第三个脉冲,DI=1表示选择通道1(CH2)
  26.         
  27.         // 51单片机为准双向IO口:应先写入1再读取
  28.         DI_0832=1;
  29.         
  30.         // MSB FIRST DATA
  31.         for(i = 0; i < 8; ++i) {
  32.                 pulse0832();
  33.                 ch <<= 1;
  34.                 if(DO_0832==1)
  35.                         ch |= 0x01;
  36.         }
  37.         
  38.         // MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在
  39.         // 同一个时钟下降沿之后,故此处先执行读取,后执行pulse
  40.         // LSB FIRST DATA


  41. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
51单片机ADC0832和1602显示电压值.zip (1.13 MB, 下载次数: 574)


作者: Daly    时间: 2017-4-27 09:37
顶个顶个
作者: Minions2017    时间: 2017-5-1 15:11
资源存在问题
作者: 小泽777    时间: 2017-5-19 16:52
顶一个。。
作者: 沐沐凉    时间: 2017-7-9 14:14
谢谢分享!
作者: 生物    时间: 2018-1-3 18:02
感谢分享
作者: 只是要看看    时间: 2018-3-14 12:01
谢谢,正好准备做
作者: a1065379637    时间: 2018-4-5 21:44
yas压缩文件和你说的不一样!
作者: Tony0ne    时间: 2018-4-16 13:20
正要用,非常感谢楼主,论坛因你更精彩
作者: 二婚大大    时间: 2018-4-24 19:08
顶一下
作者: 青宁    时间: 2018-8-28 08:51
谢楼主分享,论坛因你更精彩
作者: 青宁    时间: 2018-8-28 08:55
下载了不能用也打不开,楼主,怎么回事啊?
作者: aaaaadasd    时间: 2018-11-28 14:43
lcd1602第二行无法显示 v 这个单位
作者: zhouwei0815    时间: 2018-12-19 21:30
非常好的资料  真好用在充电器电路上
作者: zhouwei0815    时间: 2018-12-20 14:57
aaaaadasd 发表于 2018-11-28 14:43
lcd1602第二行无法显示 v 这个单位

把主函数里面的
unsigned char code tab2[] = "     V";
这个V前面多加几个空格就可以了
作者: 浙江杭州    时间: 2020-3-18 19:30
非常感谢您的帮助,特别是在ADC0832那个编程。讲的非常详细,我想了10几天的问题终于解决了。
作者: hbcqd    时间: 2020-3-18 21:10
学习中,谢谢分享!
作者: 阿姨time    时间: 2020-4-15 16:20
好帖用处很大
作者: mad01    时间: 2021-5-11 18:53
太牛了!帮助非常大!
作者: mad01    时间: 2021-5-11 23:44
zhouwei0815 发表于 2018-12-20 14:57
把主函数里面的
unsigned char code tab2[] = "     V";
这个V前面多加几个空格就可以了

请问一下如果想让滑动变阻器控制蜂鸣器怎么办

作者: x1y2z3    时间: 2022-11-21 10:21
打算做一个51单片机电压检测,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1