久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機1602電壓電流表原理圖和源程序

  [復(fù)制鏈接]
ID:997051 發(fā)表于 2022-1-3 13:13 | 顯示全部樓層 |閱讀模式
1602電壓電流表制作.png

單片機源程序如下:
  1. /******引腳說明LCD液晶RS2.5  RW2.6    E2.7       DB0~DB7:P0.0~P0.7
  2. 電壓測量P1.1;需要0~30v需要加分流電阻,,分辨率0.03v;
  3. 電流側(cè)量P1.7;需要加放大電路如lm358;op07等,分辨率3ma
  4. **********/
  5. //stc12c5a60                        
  6. #include<STC12C5A60S2.h>
  7. #include<stdio.h>
  8. #include<intrins.h>//頭文件

  9. #define uchar unsigned char//宏定義
  10. #define uint unsigned int//宏定義
  11. #define ulint unsigned long int//宏定義
  12. #define N 21//ADC中值濾波次數(shù),必須為基數(shù)
  13. #define ISP_TRIG() ISP_TRIG=0x5A,ISP_TRIG=0xA5//ISP觸發(fā)命令

  14. sbit rs=P3^5;//液晶RS
  15. sbit rw=P3^6;//液晶RW
  16. sbit e=P3^4;//液晶E

  17. void AD_init(void);//ADC初始化
  18. void delay(uint z);//延時函數(shù)
  19. uint AD_get(uchar haha );//讀ADC的數(shù)值
  20. void LCD_data(uchar shuju);//寫數(shù)據(jù)
  21. void zhiling(uchar zhilin);//寫指令
  22. void LCD_init(void);//初始化LCD
  23. void tablex(uint tab);//數(shù)據(jù)分解
  24. uint filter(uchar dat);//中值濾波
  25. void timer_init(void);//定時器初始化

  26. uchar h1,h2,h3,h4;//LCD顯示變量
  27. ulint mas,maz;//容量計算

  28. uchar table[]="0123456789";//顯示數(shù)組
  29. uchar table1[]=".VAWa";

  30. void main()
  31. {
  32.         ulint tempv,tempa;//存放電壓電流值
  33.         AD_init();//ADC初始化
  34.         timer_init();//定時器初始化
  35.         LCD_init();//LCD初始化
  36.         while(1)
  37.         {
  38.                 tempv=filter(0x88);//設(shè)置ADC通道0、開始轉(zhuǎn)換
  39.                 tablex(tempv*3);//分解數(shù)據(jù)
  40.                 zhiling(0x80);//LCD地址
  41.                 LCD_data(table[h1]);//
  42.                 LCD_data(table[h2]);//
  43.                 LCD_data(table1[0]);//
  44.                 LCD_data(table[h3]);//
  45.                 LCD_data(table[h4]);//
  46.                 LCD_data(table1[1]);//顯示
  47.                
  48.                 tempa=filter(0x8f);//設(shè)置ADC通道7、開始轉(zhuǎn)換
  49.                 if(tempa<=10)//防止數(shù)據(jù)成負數(shù)
  50.                         tempa=10;
  51.                 mas=tempa*3-30;//計算容量取樣賦值
  52.                 tablex(tempa*3-30);//減去LM358失調(diào)的數(shù)值
  53.                 zhiling(0x88);//LCD地址
  54.                 LCD_data(table[h1]);
  55.                 LCD_data(table1[0]);
  56.                 LCD_data(table[h2]);
  57.                 LCD_data(table[h3]);
  58.                 LCD_data(table[h4]);
  59.                 LCD_data(table1[2]);
  60.                
  61.                 tablex((tempv*3/10)*((tempa*3-30)/10)/10);//計算功率
  62.                 zhiling(0x80+0x40);
  63.                 LCD_data(table[h1]);
  64.                 LCD_data(table[h2]);
  65.                 LCD_data(table1[0]);
  66.                 LCD_data(table[h3]);
  67.                 LCD_data(table[h4]);
  68.                 LCD_data(table1[3]);
  69.                
  70.                 tablex(maz/1000);//顯示MAH
  71.                 zhiling(0x88+0x40);
  72.                 LCD_data(table[h1]);
  73.                 LCD_data(table1[0]);
  74.                 LCD_data(table[h2]);
  75.                 LCD_data(table[h3]);
  76.                 LCD_data(table[h4]);
  77.                 LCD_data(table1[4]);
  78.                
  79.         }
  80. }
  81. //-------------------------------------------------------------
  82. void delay(uint z)///////////////延時程序
  83. {
  84.    uint x,y;
  85.    for(x=z;x>0;x--)
  86.    for(y=19;y>0;y--);
  87. }
  88. void AD_init(void)/////////////////////初始化ADC
  89. {
  90. P1ASF=0xff;//P1口全部作為模擬功能AD使用
  91. ADC_RES=0;//清零轉(zhuǎn)換結(jié)果寄存器高8位
  92. ADC_RESL=0;//清零轉(zhuǎn)換結(jié)果寄存器低2位
  93. ADC_CONTR=0x80;//開啟AD電源
  94. delay(5);//等待1ms,讓AD電源穩(wěn)定
  95. }

  96. uint AD_get(uchar haha )//ADC讀數(shù)
  97. {
  98.         uint rew;
  99.         ADC_CONTR=haha;//開啟AD轉(zhuǎn)換
  100.         _nop_(); _nop_(); _nop_(); _nop_();//要經(jīng)過4個CPU時鐘的延時
  101.         while(!(ADC_CONTR&0x10));//等待轉(zhuǎn)換完成
  102.         ADC_CONTR&=0xe7;//關(guān)閉AD轉(zhuǎn)換,ADC_FLAG位由軟件清0
  103.         rew=ADC_RES*4+ADC_RESL;//組合成10位
  104.         delay(1);//等待
  105.         return rew;//返回ADC值
  106. }
  107. void zhiling(uchar zhilin)//寫指令
  108. {
  109.         e=0;
  110.         rs=0;
  111.         rw=0;
  112.         P0=zhilin;
  113.         delay(20);
  114.         e=1;
  115.         delay(20);
  116.         e=0;
  117. }
  118. void LCD_data(uchar shuju)//寫數(shù)據(jù)
  119. {
  120.         e=0;
  121.         rs=1;
  122.         rw=0;
  123.         P0=shuju;
  124.         delay(20);
  125.         e=1;
  126.         delay(20);
  127.         e=0;
  128. }
  129. void LCD_init(void)//初始化LCD
  130. {
  131. delay(300);
  132. zhiling(0x38);
  133. delay(100);
  134. zhiling(0x38);
  135. delay(100);
  136. zhiling(0x38);
  137. delay(100);
  138. zhiling(0x38);
  139. zhiling(0x38);
  140. zhiling(0x08);
  141. zhiling(0x01);
  142. zhiling(0x06);
  143. zhiling(0x0c);
  144. }
  145. void tablex(uint tab1)//數(shù)據(jù)分解
  146. {
  147.         h1=tab1/1000;//1023//1
  148.         h2=tab1%1000/100;//023//0
  149.         h3=tab1%100/10;//23//2
  150.         h4=tab1%10;//3
  151. }
  152. uint filter(uchar dat)//中位值濾波
  153. {
  154.    uint value_buf[N];
  155.    uint count,i,j,temp;
  156.    for(count=0;count<N;count++)
  157.    {
  158.                          AD_init();//初始化ADC
  159.       value_buf[count] = AD_get(dat);//讀ADC數(shù)值
  160.       delay(1);
  161.    }
  162.    for (j=0;j<N-1;j++)
  163.    {
  164.       for (i=0;i<N-j;i++)
  165.       {
  166.          if ( value_buf[i]>value_buf[i+1] )
  167.          {
  168.             temp = value_buf[i];
  169.             value_buf[i] = value_buf[i+1];
  170.             value_buf[i+1] = temp;
  171.          }
  172.       }
  173.    }
  174.    return value_buf[(N-1)/2];
  175. }
  176. void timer_init(void)//定時器初始化
  177. {
  178.         TMOD=0x01;/////////設(shè)置工作方式1
  179.         TH0=(65536-50000)/256;///////賦值
  180.         TL0=(65536-50000)%256;
  181.         EA=1;ET0=1;//開總中斷;開定時器中斷
  182.         TR0=1;////////啟動計數(shù)器
  183. }
復(fù)制代碼


評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:440028 發(fā)表于 2022-1-4 11:41 | 顯示全部樓層
希望多這樣的作者,既不要黑B,還能學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:118142 發(fā)表于 2022-3-31 20:40 | 顯示全部樓層
要下來學(xué)習(xí)   這個程序很好找了好久了——可以用——,
回復(fù)

使用道具 舉報

ID:953052 發(fā)表于 2022-4-1 12:04 | 顯示全部樓層
原理圖如能清晰一些就更好,謝謝分享。
回復(fù)

使用道具 舉報

ID:323213 發(fā)表于 2023-3-22 18:59 | 顯示全部樓層
Proteus仿真沒有數(shù)字顯示怎么會事?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频免费在线观看 | 在线免费观看日本 | 免费看一区二区三区 | 午夜丰满寂寞少妇精品 | 在线免费观看色 | 99久久精品国产一区二区三区 | 免费高潮视频95在线观看网站 | 四虎成人在线播放 | 国产欧美精品在线观看 | 久久久久国产精品 | 欧美日韩综合视频 | 成人免费视频网站在线观看 | 精品久久香蕉国产线看观看亚洲 | 欧美视频免费在线观看 | 中文字幕 国产精品 | 久久精品国产一区二区 | 亚洲美女一区二区三区 | 国产精品久久久久久中文字 | 天天天操 | 精品二区 | 国产精品美女 | 91在线看 | 国产高清精品在线 | 日本成人午夜影院 | 国产精品九九九 | 欧美理论片在线 | 97伦理电影网 | 国产精品精品 | 日韩欧美成人一区二区三区 | 成年视频在线观看福利资源 | 999久久久| 亚洲精品2| 91视频88av | 毛片一区二区 | 亚洲精品九九 | 国家一级黄色片 | 久久激情网| 在线中文字幕日韩 | 午夜www | 成年人在线视频 | 麻豆精品国产91久久久久久 |