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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10245|回復: 5
打印 上一主題 下一主題
收起左側

基于51單片機電流電壓采集

[復制鏈接]
跳轉到指定樓層
樓主

想做采集器的來看看吧
全部程序下載:
51單片機電流電壓采集.zip (27.11 KB, 下載次數: 176)


源碼預覽:
  1. # include <reg52.h>
  2. # include <intrins.h>




  3. sbit rs=P0^7;
  4. sbit rw=P0^6;
  5. sbit ep=P0^5;

  6. unsigned char dis1[4];
  7. unsigned char dis2[4];
  8. unsigned char chv=0x00;
  9. unsigned char cha=0x70;
  10. //unsigned char chv;
  11. unsigned int date_v=0;
  12. unsigned int date_a=0;


  13. sbit EOC=P1^0;
  14. sbit CS=P1^4;
  15. sbit IO_CLK=P1^1;
  16. sbit DAT_IN=P1^2;
  17. sbit DAT_OUT=P1^3;


  18. void init() //初始化uart
  19. {
  20.   
  21.   
  22.     TMOD=0X20;  //定時器1定時器方式  工作模式2,可自動重載的8位計數器常把定時/計數器1以模式2作為串行口波特率發生器
  23.         SCON=0XD0; //選擇工作模式1使能接收,允許發送,允許接收
  24.     EA=1; //開總中斷
  25.         ES=1;  //打開串口中斷
  26.         ET1=0;  //打開定時器中斷
  27.     PCON=0X00; //8位自動重載,波特率加倍
  28.         TH1=0Xfd;  //用22.1184 mhz波特率
  29.         TL1=0Xfd;
  30.            TR1=1; //打開中時器
  31.    

  32. }


  33. void UART_Putch(unsigned char dat)  //輸出一個字符
  34. {
  35.         SBUF=dat; //把數據送給sbuf緩存器中
  36.         while(TI!=1);//發送標志位 TI如果發送了為1,沒發送為0,沒發送等待,到了退出循環
  37.         TI=0;  //到了,TI清為0
  38. }



  39. unsigned int read_tlc2543(unsigned char M)//M 為十六進制;
  40. {
  41.         unsigned char i,ctrl_word;
  42.         unsigned int ad_result=0;
  43.         DAT_OUT=1;
  44.         ctrl_word=M;
  45.         CS=1;
  46.         IO_CLK=0;
  47.         CS=0;
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 DAT_IN=ctrl_word&0x80;
  51.                 ctrl_word=ctrl_word<<1;
  52.                 IO_CLK=1;
  53.                 ad_result=ad_result<<1;
  54.                 if(DAT_OUT)
  55.                         ad_result=ad_result+1;
  56.                 IO_CLK=0;
  57.         }
  58.         for(i=8;i<12;i++)
  59.         {
  60.                 IO_CLK=1;
  61.                 ad_result=ad_result<<1;
  62.                 if(DAT_OUT)
  63.                         ad_result=ad_result+1;
  64.                 IO_CLK=0;
  65.         }
  66.         CS=1;
  67.         return ad_result;
  68. }




  69. void delay (int m)
  70. {
  71. unsigned char i,j;
  72. for (i=0;i<m;i++)
  73. for (j=0;j<253;j++);
  74. }

  75. bit lcd_bz()
  76. {
  77.   bit result;
  78.   rs=0;           // 讀忙信號
  79.   rw=1;
  80.   ep=1;
  81.   _nop_();
  82.   _nop_();
  83.   _nop_();
  84.   _nop_();
  85.   result = (bit)(P2&0x80);
  86.   ep=0;
  87.   return result;
  88. }

  89. void lcd_wcmd (unsigned char cmd)
  90. {
  91.   while (lcd_bz());
  92.   rs=0;
  93.   rw=0;
  94.   ep=0;
  95.   _nop_();
  96.   _nop_();
  97.   P2=cmd ;
  98.   _nop_();
  99.   _nop_();
  100.   _nop_();
  101.   _nop_();
  102.   ep=1;
  103.   _nop_();
  104.   _nop_();
  105.   _nop_();
  106.   _nop_();
  107.   ep=0;
  108. }

  109. void lcd_pos (unsigned char pos)
  110. {
  111.   lcd_wcmd (pos|0x80);
  112. }

  113. void lcd_wdat (unsigned char dat)
  114. {
  115.    while (lcd_bz());
  116.   rs=1;
  117.   rw=0;
  118.   ep=0;
  119.   _nop_();
  120.   _nop_();
  121.   P2=dat ;
  122.   _nop_();
  123.   _nop_();
  124.   _nop_();
  125.   _nop_();
  126.   ep=1;
  127.   _nop_();
  128.   _nop_();
  129.   _nop_();
  130.   _nop_();
  131.   ep=0;
  132. }

  133. void lcd_init ()
  134. {
  135.   lcd_wcmd (0x38);
  136.   delay (1);
  137.   lcd_wcmd (0x0c);
  138.   delay (1);
  139.   lcd_wcmd (0x06);
  140.   delay (1);
  141.   lcd_wcmd (0x01);
  142.   delay (1);
  143. }

  144. void lcd_dis(unsigned char pose,unsigned char *dis)
  145. {
  146. unsigned char i;
  147.   //lcd_init ();
  148.   delay (10);

  149.   lcd_pos (pose);
  150.   for(i=0;i<4;i++)
  151.   {
  152.           lcd_wdat(dis[i]+0x30);
  153.   }


  154. }

  155. void convert(unsigned int  a,unsigned char *dis1)//電流
  156. {
  157.         unsigned int temp,b;
  158.         b=a/1000;
  159.         if(b!=0)
  160.                 dis1[0]=(unsigned char)b;
  161.         else
  162.                 dis1[0]=0;
  163.         temp=a%1000;
  164.         b=temp/100;
  165.         if(b!=0)
  166.                 dis1[1]=(unsigned char)b;
  167.         else
  168.                 dis1[1]=0;
  169.         temp=temp%100;
  170.         b=temp/10;
  171.         if(b!=0)
  172.                 dis1[2]=(unsigned char)b;
  173.         else
  174.                 dis1[2]=0;
  175.         b=temp%10;
  176.         if(b!=0)
  177.                 dis1[3]=(unsigned char)b;
  178.         else
  179.                 dis1[3]=0;
  180. }

  181. void main ()
  182. {
  183.   init();
  184.   lcd_init ();
  185.   read_tlc2543(cha);
  186.   delay(10);
  187.   //read_tlc2543(cha);
  188.   date_v=read_tlc2543(cha);
  189.   convert(date_v,dis2);
  190.   lcd_dis(0x00,dis2);
  191.   while(1){}
  192. }


  193. void init1() interrupt 4  //uart中斷 ,4為串口中斷
  194. {

  195.         if(RI==1)  //收到數據
  196.         {
  197.              unsigned char m=SBUF; //m為計算機發送給串口的數據,例,open //總體思想是,計算機通知串口,我要發數據了
  198.                    RI=0;   //收到清0
  199.   
  200.                if(m=='1')   //判斷m這位數據有無\r
  201.          {
  202.                          read_tlc2543(cha);
  203.                             delay(10);
  204.                    //read_tlc2543(cha);
  205.                            date_a=read_tlc2543(cha);
  206.                            convert(date_a,dis1);
  207.                            lcd_dis(0x00,dis1);
  208.                        UART_Putch(dis1[0]);
  209.                          UART_Putch(dis1[1]);
  210.                          UART_Putch(dis1[2]);
  211.                          UART_Putch(dis1[3]);
  212.                        UART_Putch('\n');  // 換行
  213.            
  214.         }
  215.              else if(m=='2')
  216.             {
  217.                          read_tlc2543(chv);
  218.                             delay(10);
  219.                    //read_tlc2543(cha);
  220.                            date_v=read_tlc2543(chv);
  221.                            convert(date_v,dis2);
  222.                            lcd_dis(0x00,dis2);
  223.                          UART_Putch(dis2[0]);
  224.                          UART_Putch(dis2[1]);
  225.                          UART_Putch(dis2[2]);
  226.                          UART_Putch(dis2[3]);
  227.                          UART_Putch('\n');  // 換行
  228.             }  
  229.                      else
  230.                      {
  231.                             UART_Putch('e');
  232.                                UART_Putch('r');
  233.                               UART_Putch('r');
  234.                                UART_Putch('o');
  235.                               UART_Putch('r');
  236.                                UART_Putch('!');
  237.                             UART_Putch('\r');
  238.                             UART_Putch('\n');
  239.                      }
  240.   
  241.    }
  242. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:136090 發表于 2016-10-16 14:18 | 只看該作者
有誰做出來過沒?
回復

使用道具 舉報

板凳
ID:300719 發表于 2018-4-26 23:37 | 只看該作者
請問這是測直流還是交流呀
回復

使用道具 舉報

地板
ID:53978 發表于 2018-5-25 20:06 | 只看該作者
慢慢學習
回復

使用道具 舉報

5#
ID:256747 發表于 2018-7-20 16:22 | 只看該作者
學習一下
回復

使用道具 舉報

6#
ID:56002 發表于 2018-9-15 08:07 | 只看該作者
發個電路圖看看
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频久久 | 亚洲免费在线 | 涩色视频在线观看 | 精品一区二区三区在线观看 | 日韩精品在线一区 | 日本在线中文 | 国产激情在线 | 国产精品一区二区三区四区 | 成年人视频免费在线观看 | 亚洲精品www | 国产 日韩 欧美 在线 | 精品在线一区 | 亚洲一区二区三区在线视频 | 在线观看日韩精品视频 | 欧亚av在线 | 久久久久国产一区二区三区不卡 | 欧美老妇交乱视频 | 欧美视频成人 | 一区二区免费在线视频 | 亚洲第一成年免费网站 | 亚洲一区在线播放 | 久久成人一区 | 国产三级一区二区三区 | 午夜欧美 | 鸡毛片 | 美国一级毛片a | 亚洲国产黄 | 91精品久久久久久久久中文字幕 | 欧美2区 | 亚洲午夜精品一区二区三区他趣 | 五月激情综合网 | 91素人 | 久久精品国产一区二区电影 | 欧美综合精品 | 国产精品不卡 | 欧美日韩精品一区二区三区视频 | 日韩在线一区二区三区 | 成人免费网视频 | 日韩欧美国产一区二区三区 | 国产久 | 动漫www.被爆羞羞av44 |