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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+ADC0832+LCD1602 Proteus仿真程序 利用全橋電路將應變片受力產生小信號

[復制鏈接]
跳轉到指定樓層
樓主
制作了一款采用51單片機作為內核的電子秤,測量范圍:0-1000g,分辨率0.1g,具有計...

利用全橋電路將應變片受力產生小信號,再通過運算放大器進行放大,經過AD轉換芯片采集差分電壓。送至單片機進行數字濾波、利用擬合過的方程轉化為相應的重量并顯示。用戶可以設置單位價格,算出總價,人機界面友好。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /********************************************************
  2.                    壓力測試儀
  3. 系統描述;輸入  15--115kPA壓力信號
  4.          輸出  00h--ffh數字信號(adc0832)
  5.          在LCD上顯示實際的壓力值,如果超限則報警

  6. 線性區間標度變換公式:    y=(115-15)/(243-13)*X+15kpa   

  7. 作者:
  8. 單位:
  9. 日期:2008.3.7

  10. ********************************************************/

  11. #include<reg51.h>
  12. #include<intrins.h>
  13. #include <absacc.h>
  14. #include <math.h>

  15. #define uchar unsigned char
  16. #define uint   unsigned int
  17. #define BUSY  0x80                               //常量定義
  18. #define DATAPORT P0


  19. //ADC0832的引腳
  20. sbit ADCS =P3^5;  //ADC0832 chip seclect
  21. sbit ADDI =P3^7;  //ADC0832 k in
  22. sbit ADDO =P3^7;  //ADC0832 k out
  23. sbit ADCLK =P3^6;  //ADC0832 clock signal

  24. sbit LCM_RS=P2^0;
  25. sbit LCM_RW=P2^1;
  26. sbit LCM_EN=P2^2;

  27. uchar ad_data;                                    //采樣值存儲
  28. sbit Alarm_led_red =P3^1;                         //超過壓力表量程最大值紅色led報警定義
  29. sbit Alarm_led_green=P3^2;                        //低于壓力表量程最小值綠色led報警定義
  30.                           //adc采樣值存儲單元
  31. char press_data;                                  //標度變換存儲單元
  32. unsigned char ad_alarm;                           //報警值存儲單元
  33. unsigned char press_ge=0;                        //顯示值百位
  34. unsigned char press_shifen=0;                        //顯示值十位
  35. unsigned char press_baifen=0;                         //顯示值個位
  36. unsigned char press_qianfen=0;                        //顯示值十分位

  37. uchar code str0[]={"Weight:  .   Kg "};
  38. uchar code str1[]={"Make by GUO TAO "};
  39. uchar code str2[]={"Price:          "};
  40. uchar code str3[]={"Total:          "};
  41. void delay(uint);
  42. void lcd_wait(void);
  43. void delay_LCM(uint);                                                                                                     //LCD延時子程序
  44. void initLCM( void);                                                                                                       //LCD初始化子程序
  45. void lcd_wait(void);                                                                                                      //LCD檢測忙子程序
  46. void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //寫指令到ICM子函數
  47. void WriteDataLCM(uchar WDLCM);                                             //寫數據到LCM子函數
  48. void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //顯示指定坐標的一個字符子函數
  49. void DisplayListChar(uchar X,uchar Y,uchar code *DData);                                         //顯示指定坐標的一串字符子函數
  50.   void keyscan();                  
  51. void display(void);                                                         //系統顯示子函數
  52. uchar Adc0832(unsigned char channel);                                                                                                                        
  53. void alarm(void);
  54. void data_pro(void);


  55. /**********main funcation************/

  56. void main(void)
  57. {
  58.     delay(500);                      //系統延時500ms啟動
  59. //        ad_data=0;                       //采樣值存儲單元初始化為0
  60.            initLCM( );
  61.         
  62.            WriteCommandLCM(0x01,1);                    //清顯示屏
  63.     DisplayListChar(0,0,str0);
  64.            DisplayListChar(0,1,str2);

  65.         while(1)
  66.     {
  67.            ad_data =Adc0832(0);           //采樣值存儲單元初始化為0
  68.            
  69.             alarm();
  70.         
  71.                 data_pro();
  72.                
  73.                 display();
  74.                                  
  75.         }
  76. }


  77. /*********延時K*1ms,12.000mhz**********/

  78. void delay(uint k)
  79. {
  80.     uint i,j;
  81.     for(i=0;i<k;i++)
  82.     {
  83.         for(j=0;j<60;j++)
  84.                 {;}
  85.     }
  86. }   
  87. /**********寫指令到ICM子函數************/

  88. void WriteCommandLCM(uchar WCLCM,uchar BusyC)
  89. {
  90.     if(BusyC)lcd_wait();
  91.         DATAPORT=WCLCM;
  92.     LCM_RS=0;                   // 選中指令寄存器
  93.     LCM_RW=0;                       // 寫模式        
  94.     LCM_EN=1;   
  95.         _nop_();   
  96.         _nop_();
  97.         _nop_();
  98.     LCM_EN=0;
  99.    
  100. }

  101. /**********寫數據到LCM子函數************/

  102. void WriteDataLCM(uchar WDLCM)
  103. {
  104.     lcd_wait( );             //檢測忙信號   
  105.         DATAPORT=WDLCM;
  106.     LCM_RS=1;                // 選中數據寄存器
  107.     LCM_RW=0;                    // 寫模式
  108.     LCM_EN=1;
  109.     _nop_();
  110.         _nop_();
  111.         _nop_();
  112.     LCM_EN=0;
  113. }

  114. /***********lcm內部等待函數*************/

  115. void lcd_wait(void)
  116. {
  117.     DATAPORT=0xff;             //讀LCD前若單片機輸出低電平,而讀出LCD為高電平,則沖突,Proteus仿真會有顯示邏輯黃色
  118.         LCM_EN=1;
  119.     LCM_RS=0;   
  120.     LCM_RW=1;   
  121.     _nop_();
  122.     _nop_();
  123.         _nop_();
  124.     while(DATAPORT&BUSY)  
  125.         {  LCM_EN=0;
  126.            _nop_();
  127.            _nop_();
  128.            LCM_EN=1;
  129.            _nop_();
  130.            _nop_();
  131.            }         
  132.            LCM_EN=0;        
  133.         
  134. }

  135. /**********LCM初始化子函數***********/

  136. void initLCM( )
  137. {   
  138.         DATAPORT=0;        
  139.         delay(15);
  140.         WriteCommandLCM(0x38,0);    //三次顯示模式設置,不檢測忙信號
  141.     delay(5);
  142.     WriteCommandLCM(0x38,0);
  143.     delay(5);
  144.     WriteCommandLCM(0x38,0);
  145.     delay(5);

  146.     WriteCommandLCM(0x38,1);    //8bit數據傳送,2行顯示,5*7字型,檢測忙信號
  147.     WriteCommandLCM(0x08,1);    //關閉顯示,檢測忙信號
  148.     WriteCommandLCM(0x01,1);    //清屏,檢測忙信號
  149.     WriteCommandLCM(0x06,1);    //顯示光標右移設置,檢測忙信號
  150.     WriteCommandLCM(0x0c,1);    //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
  151. }

  152. /****顯示指定坐標的一個字符子函數****/

  153. void DisplayOneChar(uchar X,uchar Y,uchar DData)

  154. {
  155.    Y&=0x01;
  156.     X&=0x0f;
  157.     if(Y)X|=0x40;               //若y為1(顯示第二行),地址碼+0X40
  158.     X|=0x80;                    //指令碼為地址碼+0X80
  159.     WriteCommandLCM(X,1);
  160.     WriteDataLCM(DData);
  161. }

  162. /*******顯示指定坐標的一串字符子函數*****/

  163. void DisplayListChar(uchar X,uchar Y,uchar code *DData)
  164. {
  165.     uchar ListLength=0;
  166.     Y&=0x01;
  167.     X&=0x0f;
  168.     while(X<16)
  169.     {
  170.         DisplayOneChar(X,Y,DData[ListLength]);
  171.         ListLength++;
  172.         X++;
  173.     }
  174. }

  175. /*****************系統顯示子函數*****************/

  176. void display(void)
  177. {
  178.            WriteCommandLCM(0x0c,1);                                    //顯示屏打開,光標不顯示,不閃爍,檢測忙信號        
  179.         DisplayListChar(0,0,str0);        
  180.         DisplayListChar(0,1,str2);        


  181.         DisplayOneChar(8,0,press_ge+0x30);
  182.         DisplayOneChar(10,0,press_shifen+0x30);
  183.         DisplayOneChar(11,0,press_baifen+0x30);
  184.     DisplayOneChar(12,0,press_qianfen+0x30);
  185.         delay(1000);                               //穩定顯示
  186. }
  187. /************
  188. 讀ADC0832函數
  189. ************/

  190. //采集并返回
  191. uchar Adc0832(unsigned char channel)     //AD轉換,返回結果
  192. {
  193.     uchar i=0;
  194.     uchar j;
  195.     uint dat=0;
  196.     uchar ndat=0;

  197.     if(channel==0)channel=2;
  198.     if(channel==1)channel=3;
  199.     ADDI=1;
  200.     _nop_();
  201.     _nop_();
  202.     ADCS=0;//拉低CS端
  203.     _nop_();
  204.     _nop_();
  205.     ADCLK=1;//拉高CLK端
  206.     _nop_();
  207.     _nop_();
  208.     ADCLK=0;//拉低CLK端,形成下降沿1
  209.     _nop_();
  210.     _nop_();
  211.     ADCLK=1;//拉高CLK端
  212.     ADDI=channel&0x1;
  213.     _nop_();
  214.     _nop_();
  215.     ADCLK=0;//拉低CLK端,形成下降沿2
  216.     _nop_();
  217.     _nop_();
  218.     ADCLK=1;//拉高CLK端
  219.     ADDI=(channel>>1)&0x1;
  220.     _nop_();
  221.     _nop_();
  222.     ADCLK=0;//拉低CLK端,形成下降沿3
  223.     ADDI=1;//控制命令結束
  224.     _nop_();
  225.     _nop_();
  226.     dat=0;
  227.     for(i=0;i<8;i++)
  228.     {
  229.         dat|=ADDO;//收數據
  230.         ADCLK=1;
  231.         _nop_();
  232.         _nop_();
  233.         ADCLK=0;//形成一次時鐘脈沖
  234.         _nop_();
  235.         _nop_();
  236.         dat<<=1;
  237.         if(i==7)dat|=ADDO;
  238.     }  
  239.     for(i=0;i<8;i++)
  240.     {
  241.         j=0;
  242.         j=j|ADDO;//收數據
  243.         ADCLK=1;
  244.         _nop_();
  245.         _nop_();
  246.         ADCLK=0;//形成一次時鐘脈沖
  247.         _nop_();
  248.         _nop_();
  249.         j=j<<7;
  250.         ndat=ndat|j;
  251.         if(i<7)ndat>>=1;
  252.     }
  253.     ADCS=1;//拉低CS端
  254.     ADCLK=0;//拉低CLK端
  255.     ADDO=1;//拉高數據端,回到初始狀態
  256.     dat<<=8;
  257.     dat|=ndat;
  258.     return(dat);            //return ad k
  259. }


  260. void data_pro(void)
  261. {
  262.       unsigned int temp;
  263.       float  press;                             
  264. ……………………

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

仿真代碼資料51hei附件下載(AD芯片是用的ADC0832):
價格無法顯示,求大神指導如何修改程序
電子秤.7z (134.44 KB, 下載次數: 50)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色骚片 | 99免费| 久久精品亚洲精品国产欧美 | 亚洲精品乱码8久久久久久日本 | 亚洲第1页| 国产一区二区毛片 | 美女天堂在线 | 久久久不卡网国产精品一区 | 国产视频久久 | 日韩久久在线 | 精品国产91乱码一区二区三区 | 精彩视频一区二区三区 | 久久国产精品免费一区二区三区 | 欧美亚洲一区二区三区 | a视频在线| 国产一区 | 日韩手机在线看片 | 国产成人网 | 精品国产免费人成在线观看 | 99精品在线| 在线一区二区国产 | 日韩在线视频一区 | 91九色在线观看 | 成人av激情 | 欧美在线色| 国产亚洲精品成人av久久ww | caoporon| 日韩成人在线观看 | 日产精品久久久一区二区福利 | 一本大道久久a久久精二百 欧洲一区二区三区 | 爱综合| 国产伦精品一区二区三区高清 | a在线观看免费 | 久久久久久蜜桃一区二区 | 国产成人av在线 | 中文字幕日韩欧美 | 国产精品中文字幕在线 | 天天插天天搞 | 亚洲高清在线观看 | 麻豆精品一区二区三区在线观看 | 欧美日韩高清在线一区 |