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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的TCL1865電壓測量仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的TCL1865電壓測量仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include<reg52.h>
  2. #include<absacc.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define ulong unsigned long

  6. #define disp_dot 0x2e
  7. #define disp_V   0x56



  8. #define data1602 P0                // 定義LCD1602數據接口

  9. uchar code disp_code[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

  10. ulong voltage_data;

  11. sbit rs1602 = P2^4;                  
  12. sbit rw1602 = P2^5;
  13. sbit e1602  = P2^6;


  14. sbit CONV=P1^0;
  15. sbit SCK=P1^1;
  16. sbit SDO=P1^2;
  17. sbit SDI =P1^3;

  18. void delay (uint ms)
  19. {
  20.         uint i,j;
  21.         for(i=ms;i>0;i--)
  22.                 for(j=110;j>0;j--);
  23. }


  24. /*        LCD1602寫入數據        */
  25. void write_1602(uchar wdata)
  26. {
  27. data1602 = wdata;
  28. rs1602   = 1;
  29. rw1602   = 0;
  30. e1602    = 1;
  31. delay(4);
  32. e1602    = 0;
  33. }


  34.        
  35. /*LCD1602寫命令*/
  36. void write_order(uchar odata)//
  37. {
  38. data1602 = odata;
  39. rs1602   = 0;
  40. rw1602   = 0;
  41. e1602    = 1;
  42. delay(4);
  43. e1602    = 0;
  44. }

  45. /*LCD1602初始化*/
  46. void init_1602(void)//
  47. {
  48. write_order(0x01);                                            // 清屏幕
  49. write_order(0x38);                                                // 數據長度為8位,雙行顯示,5*7字符
  50. write_order(0x0c);                                                // 打開顯示開關,光標不閃爍
  51. write_order(0x06);                                                // 地址計數遞增,顯示屏不移動
  52. }

  53. /*LCD1602寫位置*/
  54. void position(uchar row,uchar colum)
  55. {
  56. uchar pos;
  57. if(row==1)
  58.    {
  59.          pos=0x80+colum;
  60.    }
  61. else
  62.    {
  63.      pos=0xC0+colum;   
  64.      
  65.    }
  66.         write_order(pos);
  67. }
  68. /*LCD1602字符串*/
  69. void write_byte(uchar *s)//
  70. {
  71. for(;*s!='\0';s++)
  72.    {
  73.      write_1602(*s);
  74.    }
  75. }
  76.   /*讀LTC1865通道0的AD值*/
  77. void read_adc_ch0(void)
  78. {
  79. uchar j;
  80. voltage_data = 0;
  81. SDO = 1;
  82. CONV = 1;                                       // 開啟AD轉換
  83. SCK  = 1;
  84. CONV = 0;
  85. SCK  = 0;
  86. for(j=15;j>0;j--)
  87.    {
  88.     SCK = 0;
  89.         if(j == 15)
  90.           {
  91.             SDI = 1;
  92.           }
  93.         if(j == 14)
  94.           {
  95.             SDI = 0;
  96.           }
  97.         if(SDO==1)
  98.           {
  99.             voltage_data = voltage_data + 1;
  100.           }   
  101.         voltage_data <<= 1;
  102.         SCK = 1;
  103.    }
  104.   CONV = 1;
  105.   SCK  = 1;

  106. }

  107.   /*讀LTC1865通道1的AD值*/
  108. void read_adc_ch1(void)
  109. {
  110. uchar j;
  111. voltage_data = 0;
  112. SDO = 1;
  113. CONV = 1;                                       // 開啟AD轉換
  114. SCK  = 1;
  115. CONV = 0;
  116. SCK  = 0;
  117. for(j=15;j>0;j--)
  118.    {
  119.     SCK = 0;
  120.         if(j == 15)
  121.           {
  122.             SDI = 1;
  123.           }
  124.         if(j == 14)
  125.           {
  126.             SDI = 1;
  127.           }
  128.         if(SDO==1)
  129.           {
  130.             voltage_data = voltage_data + 1;
  131.           }   
  132.         voltage_data <<= 1;
  133.         SCK = 1;
  134.    }
  135.   CONV = 1;
  136.   SCK  = 1;

  137. }
  138. /* 顯示通道電壓*/
  139. void disp_voltage(uchar i)
  140. {
  141.         switch(i)
  142.         {
  143.                  case 0:
  144.                         read_adc_ch0();
  145.                         position(1,0);
  146.                         write_byte("CHANNEL0=");       
  147.                         break;
  148.                 case 1:
  149.                         read_adc_ch1();       
  150.                         position(1,0);
  151.                         write_byte("CHANNEL1=");
  152.                         break;
  153.          }
  154.         voltage_data = (voltage_data*5000)/65536;                 // AD采樣值處理
  155.         write_order(0x89);
  156.         write_1602(disp_code[voltage_data/1000]);
  157.         write_order(0x8b);
  158.         write_1602(disp_code[voltage_data%1000/100]);
  159.         write_order(0x8c);
  160.         write_1602(disp_code[voltage_data%1000%100/10]);
  161.         write_order(0x8d);
  162.         write_1602(disp_code[voltage_data%1000%100%10]);
  163. }
  164.         /* 發送通道電壓*/
  165. void send_voltage(uchar i)
  166. {
  167.         switch(i)
  168.         {
  169.                  case 0:
  170.                         SBUF=67;while(!TI);TI=0;
  171.                         SBUF=72;while(!TI);TI=0;
  172.                         SBUF=65;while(!TI);TI=0;
  173.                         SBUF=78;while(!TI);TI=0;
  174.                         SBUF=78;while(!TI);TI=0;
  175.                         SBUF=69;while(!TI);TI=0;
  176.                         SBUF=76;while(!TI);TI=0;
  177.                         SBUF=48;while(!TI);TI=0;
  178.                         SBUF=61;while(!TI);TI=0;
  179.                         read_adc_ch0();       
  180.                         break;
  181.                 case 1:
  182.                         SBUF=67;while(!TI);TI=0;
  183.                         SBUF=72;while(!TI);TI=0;
  184.                         SBUF=65;while(!TI);TI=0;
  185.                         SBUF=78;while(!TI);TI=0;
  186.                         SBUF=78;while(!TI);TI=0;
  187.                         SBUF=69;while(!TI);TI=0;
  188.                         SBUF=76;while(!TI);TI=0;
  189.                         SBUF=49;while(!TI);TI=0;
  190.                         SBUF=61;while(!TI);TI=0;
  191.                         read_adc_ch1();       
  192.                         break;
  193.          }
  194.         voltage_data = (voltage_data*5000)/65536;                 // AD采樣值處理
  195.         SBUF=voltage_data/1000+48;while(!TI);TI=0;
  196.     SBUF=46;while(!TI);TI=0;
  197.         SBUF=voltage_data%1000/100+48;while(!TI);TI=0;
  198.         SBUF=voltage_data%1000%100/10+48;while(!TI);TI=0;
  199.         SBUF=voltage_data%1000%100%10+48;while(!TI);TI=0;
  200.         SBUF=86;while(!TI);TI=0;
  201.         SBUF=32;while(!TI);TI=0;
  202.         SBUF=32;while(!TI);TI=0;
  203. }
  204. /*寫入小數點和電壓單位符號*/
  205. void disp_symbol(void)
  206. {

  207.         position(1,10);
  208.         write_1602(disp_dot);
  209.         position(1,15);
  210.         write_1602(disp_V);
  211.   
  212. }
  213. void disp_logo()
  214. {
  215.         unsigned char i;
  216.         unsigned char *p;
  217.         p="VOLTAGE MEASURE";
  218.         delay(10);
  219.         position(1,0);
  220.         write_byte("  HELLO WORLD ");       
  221.         for(i=0;i<15;i++)
  222.                 {
  223.                         position(2,i);
  224.                         write_1602(*p);
  225.                         p++;
  226.                     delay(250);
  227.                 }
  228.                 delay(250);
  229.                 i=0;  
  230. }
  231. void uart_init(void)
  232. {
  233.         TMOD=0x20;
  234.         SM0=0;
  235. ……………………

  236. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
電壓測量系統.rar (66.47 KB, 下載次數: 77)




評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:944275 發表于 2021-6-25 08:56 | 只看該作者
謝謝鐵子的分享,學到了很多
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看黄色电影 | 日韩高清在线观看 | 国产视频第一页 | 亚洲一区二区av在线 | 国产成人精品一区二区三区四区 | 日日夜夜精品视频 | 91 中文字幕| 国产精品日日做人人爱 | 99热首页| 欧美日韩亚洲二区 | 成人一区二区视频 | 国产福利在线 | 在线一区二区国产 | 欧美福利精品 | 成人午夜性成交 | 亚洲精品乱码久久久久久黑人 | 日韩在线中文字幕 | 国产精品久久久久9999鸭 | 亚洲精品电影 | 成人不卡视频 | 新超碰97 | 视频一区二区在线观看 | 中文精品久久 | 日韩免费视频一区二区 | 久久久久国产精品 | 久久精品电影 | 国产精品成人一区二区三区 | 密色视频 | 午夜丁香视频在线观看 | 91精品观看 | 欧美一级欧美三级在线观看 | 一区欧美 | 日韩一区二区av | 成人在线国产 | 99re在线视频| 中文字幕色站 | 欧美日韩综合 | 亚洲aⅴ| 国产在线观看一区二区三区 | a爱视频 | 亚洲一区欧美 |