找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5088|回復(fù): 4
收起左側(cè)

單片機(jī)+PCF8591雙通道數(shù)字電壓表Proteus仿真程序 帶注釋

[復(fù)制鏈接]
ID:807238 發(fā)表于 2020-9-22 10:55 | 顯示全部樓層 |閱讀模式
用51單片機(jī)測(cè)電壓值程序和仿真圖都在里面
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖20200922105221.png

注釋很詳細(xì)的單片機(jī)源程序如下:
  1. #include "pcf8591.h"
  2. void pcf8591_init(uchar channel)
  3. {
  4.         bit flag;
  5. //        channel%=3;
  6.         I2C_start(); //啟動(dòng)總線,發(fā)送起始條件
  7.         write_byte(pcf8591_addr_w);//發(fā)送PCF8591器件地址,寫
  8.         flag=check_ack();//讀應(yīng)答
  9.         write_byte(channel);//發(fā)送控制字節(jié).0代表PCF8591控制寄存器,為0000 0000,單端輸入00,A/D,選擇通道0.
  10.         flag=check_ack();//讀應(yīng)答
  11.         I2C_stop(); //發(fā)送結(jié)束條件
  12. }
  13. uchar pcf8591_adconvert(uchar x)//轉(zhuǎn)換x次,取平均值
  14. {
  15.         uchar j;
  16.         bit flag;
  17.         uint sum=0;
  18.         sum=0;
  19.         I2C_start();//重新啟動(dòng)總線,發(fā)送起始條件
  20.         write_byte(pcf8591_addr_r);//發(fā)送PCF8591器件地址,讀,啟動(dòng)A/D轉(zhuǎn)換
  21.         flag=check_ack();//讀應(yīng)答
  22.         for(j=0;j<(x-1);j++)//軟件濾波,平均值濾波
  23.         {
  24.                 sum+=read_byte();//讀轉(zhuǎn)換結(jié)果
  25.                 send_ack(ACK);  //發(fā)送應(yīng)答信號(hào)        
  26.                 delayms(10);
  27.         }
  28.         sum+=read_byte();//讀轉(zhuǎn)換結(jié)果
  29.         send_ack(NACK);  //讀完最后一個(gè)字節(jié)后單片機(jī)發(fā)送非應(yīng)答信號(hào)        
  30.         I2C_stop();//發(fā)送結(jié)束條件
  31.         return(sum/x);        
  32. }
復(fù)制代碼
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "i2c.h"
  4. #include "pcf8591.h"
  5. #include "lcd1602.h"
  6. #define  uchar  unsigned  char
  7. #define  uint  unsigned  int
  8. void  delayms(uint  x);
  9. void main()
  10. {
  11.         uint volt;
  12.     uchar dispbuf[7]={'0','.','0','0','0','V','\0'};

  13.         LCD1602_Init();//液晶顯示模塊1602初始化
  14.         LCD1602_DisplayString(1,1,"Voltage:");
  15.         LCD1602_DisplayString(2,1,"Voltage:");
  16.         while(1)
  17.         {        
  18.                 pcf8591_init(0);//PCF8591初始化,單端輸入,A/D,選擇通道0        
  19.                 volt=pcf8591_adconvert(10)*19.608;//實(shí)際電壓(mV)=轉(zhuǎn)換結(jié)果*5000/255=轉(zhuǎn)換
  20. //結(jié)果*19.608。即VS=VREF*5V/255
  21.                 dispbuf[0]=0x30+volt/1000;//整數(shù)位
  22.                 dispbuf[2]=0x30+(volt%1000)/100;//小數(shù)點(diǎn)后第1位
  23.                 dispbuf[3]=0x30+(volt%100)/10;//小數(shù)點(diǎn)后第2位
  24.                 dispbuf[4]=0x30+volt%10;//小數(shù)點(diǎn)后第3位
  25.         LCD1602_DisplayString(1,9,dispbuf);

  26.                 pcf8591_init(1);//PCF8591初始化,單端輸入,A/D,選擇通道0        
  27.                 volt=pcf8591_adconvert(10)*19.608;//實(shí)際電壓(mV)=轉(zhuǎn)換結(jié)果*5000/255=轉(zhuǎn)換
  28. //結(jié)果*19.608。即VS=VREF*5V/255
  29.                 dispbuf[0]=0x30+volt/1000;//整數(shù)位
  30.                 dispbuf[2]=0x30+(volt%1000)/100;//小數(shù)點(diǎn)后第1位
  31.                 dispbuf[3]=0x30+(volt%100)/10;//小數(shù)點(diǎn)后第2位
  32.                 dispbuf[4]=0x30+volt%10;//小數(shù)點(diǎn)后第3位
  33.                 LCD1602_DisplayString(2,9,dispbuf);
  34.                 delayms(500);
  35.         }
  36. }
  37. void  delayms(uint  x)
  38. {
  39.         unsigned  char j;
  40.         while(x--)
  41.         for (j=0;j<122;j++); /*延時(shí)約8μs*125=1ms,應(yīng)根據(jù)實(shí)驗(yàn)調(diào)整j的上限125*/
  42. }
復(fù)制代碼

51hei截圖20200922105445.png
所有資料51hei提供下載:
雙通道數(shù)字電壓表.zip (123.33 KB, 下載次數(shù): 199)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:335380 發(fā)表于 2021-3-12 17:25 | 顯示全部樓層
怎么我這里無(wú)法顯示?
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2021-3-13 17:17 | 顯示全部樓層
WORI 發(fā)表于 2021-3-12 17:25
怎么我這里無(wú)法顯示?

用Proteus8.8可以打開(kāi),顯示效果如下:
51hei.png
回復(fù)

使用道具 舉報(bào)

ID:28992 發(fā)表于 2021-3-15 07:58 | 顯示全部樓層
great job, thank you!
回復(fù)

使用道具 舉報(bào)

ID:285526 發(fā)表于 2021-3-26 23:10 | 顯示全部樓層
Great Job
你好
任何人都可以使用單個(gè)ic MS83F1602制作伏安表
顯示頂部電壓3位7段和底部Amphere 3位7段
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表