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

標(biāo)題: 壓力傳感器控制電機(jī) ADC0832單片機(jī)程序及Proteus仿真原理圖 [打印本頁(yè)]

作者: abscond    時(shí)間: 2023-5-28 15:49
標(biāo)題: 壓力傳感器控制電機(jī) ADC0832單片機(jī)程序及Proteus仿真原理圖
仿真原理圖如下(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寫(xiě)入命令或數(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    //顯示開(kāi)
  29. #define LCD_HIDE                        0x00    //顯示關(guān)         

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

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

  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仿真時(shí),注意用屏蔽此語(yǔ)句,在調(diào)用GotoXY()時(shí),會(huì)進(jìn)入死循環(huán),
  41.   //可能在寫(xiě)該控制字時(shí),該模塊沒(méi)有返回寫(xiě)入完備命令,即DBPort&0x80==0x80
  42.   //實(shí)際硬件時(shí)打開(kāi)此語(yǔ)句
  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      // 畫(huà)面可平移
  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);    //開(kāi)啟顯示, 無(wú)光標(biāo)
  76.   LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  77.   LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫(huà)面不動(dòng)
  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)顯示為零,請(qǐng)將該行去掉
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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

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

作者: 周翔宇    時(shí)間: 2024-3-13 22:31
第一張圖的程序和仿真有么

作者: gchq521    時(shí)間: 2024-3-22 02:22
沒(méi)有文件啊
作者: abscond    時(shí)間: 2024-3-22 14:43
周翔宇 發(fā)表于 2024-3-13 22:31
第一張圖的程序和仿真有么

有的,你下載看就可以了
作者: abscond    時(shí)間: 2024-3-22 14:44
gchq521 發(fā)表于 2024-3-22 02:22
沒(méi)有文件啊

有的,你下載看就可以了
作者: gmmmmmmm    時(shí)間: 2024-3-26 20:31
講得很清晰





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲在线播放 | 天天精品视频 | 日韩黄色录像 | av网站在线播放 | 成人9ⅰ免费影视网站 | 成年在线观看 | 色婷婷国产精品综合在线观看 | 美女操操操 | 日韩av在线免费播放 | 欧美激情视频一区二区三区 | 亚洲精品91天天久久人人 | 性色在线 | 黄色成人在线观看 | 免费在线观看黄 | 欧美成人激情视频 | 日韩午夜激情 | 国产精品福利视频 | 欧美一区二区在线播放 | 福利小视频 | 香蕉伊人网 | 天天摸天天爽 | 成人午夜在线视频 | 欧美人与性动交α欧美精品 | 黄色a毛片 | 黄色成人免费网站 | 久久久夜色精品 | 亚洲成人动漫在线观看 | 亚洲精品免费视频 | 国产精品日韩在线 | 青青视频网 | 加勒比综合 | 亚洲国产欧美日韩在线 | 亚洲第一色网 | 美国特色黄a大片 | www.国产精品.com | 特黄视频 | 欧美日韩精品一区二区在线播放 | 精品久久久久久久久久久 | 一区二区三区网站 | 欧美日韩高清在线 | 久久视频免费观看 |