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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2558|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

壓力傳感器控制電機(jī) ADC0832單片機(jī)程序及Proteus仿真原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1023151 發(fā)表于 2023-5-28 15:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char         //宏定義方便以后用
  4. #define uint unsigned int  
  5. #define ulong unsigned long


  6. //定義ADC0832的借接口
  7. sbit ADC_CS   = P2^4;
  8. sbit ADC_Clk = P2^5;
  9. sbit ADC_DATI = P2^6;
  10. sbit ADC_DATO = P2^7;

  11. //定義LED的指示燈接口
  12. sbit LED_RED = P1^6;
  13. sbit LED_YELLOW = P1^7;

  14. //LCD port
  15. sbit LcdRs= P2^0;
  16. sbit LcdRw= P2^1;
  17. sbit LcdEn= P2^2;
  18. sfr  DBPort= 0x80;                //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口

  19. //L298N   電機(jī)控制接口
  20. sbit IN1= P1^2;
  21. sbit IN2= P1^3;


  22. //向LCD寫入命令或數(shù)據(jù)************************************************************
  23. #define LCD_COMMAND                        0      // Command
  24. #define LCD_DATA                        1      // Data
  25. #define LCD_CLEAR_SCREEN        0x01      // 清屏
  26. #define LCD_HOMING                  0x02      // 光標(biāo)返回原點(diǎn)


  27. //設(shè)置顯示模式************************************************************
  28. #define LCD_SHOW                        0x04    //顯示開
  29. #define LCD_HIDE                        0x00    //顯示關(guān)         

  30. #define LCD_CURSOR                        0x02         //顯示光標(biāo)
  31. #define LCD_NO_CURSOR                0x00    //無光標(biāo)                     

  32. #define LCD_FLASH                        0x01    //光標(biāo)閃動
  33. #define LCD_NO_FLASH                0x00    //光標(biāo)不閃動

  34. //內(nèi)部等待函數(shù)**************************************************************************
  35. unsigned char LCD_Wait(void)
  36. {
  37.   LcdRs=0;
  38.   LcdRw=1;        _nop_();
  39.   LcdEn=1;        _nop_();
  40.   //while(DBPort&0x80);//在用Proteus仿真時,注意用屏蔽此語句,在調(diào)用GotoXY()時,會進(jìn)入死循環(huán),
  41.   //可能在寫該控制字時,該模塊沒有返回寫入完備命令,即DBPort&0x80==0x80
  42.   //實際硬件時打開此語句
  43.   LcdEn=0;
  44.   return DBPort;               
  45. }

  46. void LCD_Write(bit style, unsigned char input)
  47. {
  48.   LcdEn=0;
  49.   LcdRs=style;
  50.   LcdRw=0;                _nop_();
  51.   DBPort=input;        _nop_();//注意順序
  52.   LcdEn=1;                _nop_();//注意順序
  53.   LcdEn=0;                _nop_();
  54.   LCD_Wait();        
  55. }

  56. void LCD_SetDisplay(unsigned char DisplayMode)
  57. {
  58.   LCD_Write(LCD_COMMAND, 0x08|DisplayMode);        
  59. }

  60. //設(shè)置輸入模式************************************************************
  61. #define LCD_AC_UP                        0x02
  62. #define LCD_AC_DOWN                        0x00      // default

  63. #define LCD_MOVE                        0x01      // 畫面可平移
  64. #define LCD_NO_MOVE                        0x00      //default

  65. void LCD_SetInput(unsigned char InputMode)
  66. {
  67.   LCD_Write(LCD_COMMAND, 0x04|InputMode);
  68. }


  69. //初始化LCD************************************************************
  70. void LCD_Initial()
  71. {
  72.   LcdEn=0;
  73.   LCD_Write(LCD_COMMAND,0x38);           //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣
  74.   LCD_Write(LCD_COMMAND,0x38);
  75.   LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標(biāo)
  76.   LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  77.   LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫面不動
  78. }

  79. //************************************************************************
  80. void GotoXY(unsigned char x, unsigned char y)
  81. {
  82.   if(y==0)
  83.     LCD_Write(LCD_COMMAND,0x80|x);
  84.   if(y==1)
  85.     LCD_Write(LCD_COMMAND,0x80|(x-0x40));
  86. }

  87. void Print(unsigned char *str)         //在LCD上顯示數(shù)據(jù),內(nèi)部調(diào)用
  88. {
  89.   while(*str!='\0')
  90.   {
  91.     LCD_Write(LCD_DATA,*str);
  92.     str++;
  93.   }
  94. }

  95. void LCD_Print(unsigned char x, unsigned char y, unsigned char *str) //指定的位置打印指定數(shù)據(jù)
  96. {
  97.   GotoXY(x,y);
  98.   Print(str);
  99. }

  100. void LCD_Print_num(unsigned char x, unsigned char y,long int temp_num) //指定的位置顯示數(shù)值
  101. {
  102.   uchar temp_tab[7]=0;
  103.   long int num=0;
  104.   uchar i=0;
  105.   num=temp_num;
  106.   GotoXY(x,y);
  107.   if(num<0)
  108.   {
  109.     num=0-num;
  110.     LCD_Write(LCD_DATA,'-');
  111.   }
  112.   temp_tab[0]=num/1000000%10+0x30;
  113.   temp_tab[1]=num/100000%10+0x30;
  114.   temp_tab[2]=num/10000%10+0x30;
  115.   temp_tab[3]=num/1000%10+0x30;
  116.   temp_tab[4]=num/100%10+0x30;  
  117.   temp_tab[5]=num/10%10+0x30;
  118.   temp_tab[6]=num%10+0x30;
  119.   for(i=0;i<7;i++)
  120.   {
  121.     if(temp_tab[i]!=0x30)break;
  122.   }
  123.   
  124.   if(i==7)
  125.   {
  126.     LCD_Write(LCD_DATA,0x30);
  127.   }
  128.   else
  129.   {
  130.     while(i<7)
  131.     {
  132.       LCD_Write(LCD_DATA,temp_tab[i]);
  133.       i++;
  134.     }
  135.   }
  136. }

  137. /****************************************************************************
  138. 函數(shù)功能:AD轉(zhuǎn)換子程序
  139. ****************************************************************************/

  140. uchar adc0832(uchar temp_CH)
  141. {         
  142.   uchar temp_data = 0x00;      //AD值
  143.   uchar i,temp_ad_val1,temp_ad_val2;
  144.   temp_ad_val2 = 0x00;
  145.   temp_ad_val1 = 0x00;
  146.   ADC_Clk = 0;       //初始化
  147.   ADC_DATI = 1;
  148.   _nop_();
  149.   ADC_CS = 0;
  150.   _nop_();
  151.   ADC_Clk = 1;
  152.   _nop_();
  153.   
  154.   if ( temp_CH == 0x00 )      //通道選擇
  155.   {
  156.     ADC_Clk = 0;
  157.     ADC_DATI = 1;      //通道0的第一位
  158.     _nop_();
  159.     ADC_Clk = 1;
  160.     _nop_();
  161.     ADC_Clk = 0;
  162.     ADC_DATI = 0;      //通道0的第二位
  163.     _nop_();
  164.     ADC_Clk = 1;
  165.     _nop_();
  166.   }
  167.   else
  168.   {
  169.     ADC_Clk = 0;
  170.     ADC_DATI = 1;      //通道1的第一位
  171.     _nop_();
  172.     ADC_Clk = 1;
  173.     _nop_();
  174.     ADC_Clk = 0;
  175.     ADC_DATI = 1;      //通道1的第二位
  176.     _nop_();
  177.     ADC_Clk = 1;
  178.     _nop_();
  179.   }
  180.   ADC_Clk = 0;
  181.   ADC_DATI = 1;
  182.   for( i = 0;i < 8;i++ )      //前讀取8位的值
  183.   {
  184.     _nop_();
  185.     temp_ad_val2 <<= 1;
  186.     ADC_Clk = 1;
  187.     _nop_();
  188.     ADC_Clk = 0;
  189.     if (ADC_DATO)
  190.       temp_ad_val2 |= 0x01;
  191.     else
  192.       temp_ad_val2 |= 0x00;
  193.   }
  194.   for (i = 0; i < 8; i++)      //后讀取8位的值
  195.   {
  196.     temp_ad_val1 >>= 1;
  197.     if (ADC_DATO)
  198.       temp_ad_val1 |= 0x80;
  199.     else
  200.       temp_ad_val1 |= 0x00;
  201.     _nop_();
  202.     ADC_Clk = 1;
  203.     _nop_();
  204.     ADC_Clk = 0;
  205.   }
  206.   if (temp_ad_val2 == temp_ad_val1)      //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請將該行去掉
  207.     temp_data = temp_ad_val1;
  208.   _nop_();
  209.   ADC_CS = 1;        //釋放ADC0832
  210.   ADC_DATO = 1;
  211.   ADC_Clk = 1;
  212.   return temp_data;
  213. }

  214. //*****************************
  215. //**顯示數(shù)據(jù)
  216. //*****************************
  217. void Display_data(void)
  218. {
  219.         ulong temp=0,temp2=0;


  220.         temp=adc0832(0);
  221.         temp=temp*500/255;//單位放大了100倍
  222.         temp2=temp/100;
  223.         if(temp2)
  224.         {
  225.                 LCD_Print_num(4,1,temp2);
  226.                 Print(".");
  227.                 temp2=temp%100;
  228.                 LCD_Print_num(6,1,temp2);
  229.         }
  230.         else
  231.         {
  232.                 LCD_Print(4,1,"0.");
  233.                 temp2=temp%100;
  234.                 LCD_Print_num(6,1,temp2);
  235.         }
  236.         Print("pa");
  237.         Print("      ");
  238.         
  239.   
  240.   
  241. }

  242. // 電機(jī)正轉(zhuǎn)
  243. void come()
  244. {
  245.   IN1=1;
  246.   IN2=0;
  247. }

  248. //電機(jī)倒轉(zhuǎn)
  249. void back()
  250. {
  251.   IN1=0;
  252.   IN2=1;
  253. }

  254. //電機(jī)停止
  255. void stop()
  256. {
  257.   IN1=0;
  258. ……………………

  259. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

Keil代碼與Proteus仿真下載:
壓力傳感器控制電機(jī)ADC0832.zip (118.62 KB, 下載次數(shù): 71)

一 綜述
近幾年隨著畜牧業(yè)的快速發(fā)展及社會各界對畜牧業(yè)安全質(zhì)量的重點(diǎn)關(guān)注,畜牧業(yè)產(chǎn)品的追蹤溯源已經(jīng)成為學(xué)者們的研究熱點(diǎn),為建立完善的畜牧業(yè)追溯體系需要從源頭著手,在養(yǎng)殖環(huán)節(jié)建立起信息化監(jiān)控系統(tǒng)對養(yǎng)殖場的各環(huán)節(jié)進(jìn)行實時監(jiān)測,并采集每一頭牲畜的全部生命信息進(jìn)行識別、分析及處理。盡管目前已存在一些畜牧業(yè)養(yǎng)殖場的追溯系統(tǒng)對養(yǎng)殖場進(jìn)行實時監(jiān)控,并實現(xiàn)了牲畜養(yǎng)殖的信息化管理,但由于系統(tǒng)的設(shè)計及部署實施中存在著一些弊端限制了畜牧業(yè)養(yǎng)殖場發(fā)展規(guī)模的擴(kuò)大及信息采集工作的效率,近而大大影響了企業(yè)的經(jīng)濟(jì)效益。

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:884739 發(fā)表于 2024-3-13 22:31 | 只看該作者
第一張圖的程序和仿真有么
回復(fù)

使用道具 舉報

板凳
ID:489394 發(fā)表于 2024-3-22 02:22 | 只看該作者
沒有文件啊
回復(fù)

使用道具 舉報

地板
ID:1023151 發(fā)表于 2024-3-22 14:43 | 只看該作者
周翔宇 發(fā)表于 2024-3-13 22:31
第一張圖的程序和仿真有么

有的,你下載看就可以了
回復(fù)

使用道具 舉報

5#
ID:1023151 發(fā)表于 2024-3-22 14:44 | 只看該作者

有的,你下載看就可以了
回復(fù)

使用道具 舉報

6#
ID:1114159 發(fā)表于 2024-3-26 20:31 | 只看該作者
講得很清晰
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产黄a一级 | 在线国产中文字幕 | 国产亚洲精品一区二区三区 | 97成人在线 | 夫妻午夜影院 | 91精品综合久久久久久五月天 | 欧美久久一区 | 一区二区三区视频在线观看 | 日日碰狠狠躁久久躁婷婷 | av网址在线 | 国产ts人妖一区二区三区 | 欧美日韩视频在线播放 | 在线一区二区三区 | 久久区二区 | 国产伦精品一区二区三区照片91 | 国产精品99久久久精品免费观看 | 在线免费视频一区 | 国产在线精品区 | 亚洲日本欧美日韩高观看 | 国产一区二区三区免费视频 | 精品国产视频 | 久久久久亚洲精品中文字幕 | 中文字幕免费在线 | 中文字幕一区二区三区精彩视频 | 在线成人 | 天堂精品| 呦呦在线视频 | 亚洲高清视频一区二区 | 一级黄色录像毛片 | 久久综合激情 | 久久高潮 | 日韩欧美精品在线播放 | 欧美精品 在线观看 | 亚洲黄色高清视频 | 亚洲国产精品suv | 欧美日韩精品中文字幕 | 色综合久久久 | 一级黄色在线 | 久久久久久久久久一区 | 亚洲一区二区免费电影 | 亚洲美女视频 |