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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

基于mpx4115的51單片機(jī)電子秤 仿真+程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
第一次發(fā)帖,mpx4115電子秤proteus仿真+單片機(jī)程序資料

proteus仿真圖:



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

  6. 線性區(qū)間標(biāo)度變換公式:    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;                                    //采樣值存儲(chǔ)
  28. sbit Alarm_led_red =P3^1;                         //超過(guò)壓力表量程最大值紅色led報(bào)警定義
  29. sbit Alarm_led_green=P3^2;                        //低于壓力表量程最小值綠色led報(bào)警定義
  30.                           //adc采樣值存儲(chǔ)單元
  31. char press_data;                                  //標(biāo)度變換存儲(chǔ)單元
  32. unsigned char ad_alarm;                           //報(bào)警值存儲(chǔ)單元
  33. unsigned char press_bai=0;                        //顯示值百位
  34. unsigned char press_shi=0;                        //顯示值十位
  35. unsigned char press_ge=0;                         //顯示值個(gè)位
  36. unsigned char press_dot=0;                        //顯示值十分位

  37. uchar code str0[]={"Press:    .  kpa "};
  38. uchar code str1[]={" Check GUO TAO "};

  39. void delay(uint);
  40. void lcd_wait(void);
  41. void delay_LCM(uint);                                                                                                     //LCD延時(shí)子程序
  42. void initLCM( void);                                                                                                       //LCD初始化子程序
  43. void lcd_wait(void);                                                                                                      //LCD檢測(cè)忙子程序
  44. void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //寫(xiě)指令到ICM子函數(shù)
  45. void WriteDataLCM(uchar WDLCM);                                             //寫(xiě)數(shù)據(jù)到LCM子函數(shù)
  46. void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //顯示指定坐標(biāo)的一個(gè)字符子函數(shù)
  47. void DisplayListChar(uchar X,uchar Y,uchar code *DData);                    //顯示指定坐標(biāo)的一串字符子函數(shù)
  48. void display(void);                                                         //系統(tǒng)顯示子函數(shù)
  49. uchar Adc0832(unsigned char channel);                                                                                                                        
  50. void alarm(void);
  51. void data_pro(void);


  52. /**********main funcation************/

  53. void main(void)
  54. {
  55.     delay(500);                      //系統(tǒng)延時(shí)500ms啟動(dòng)
  56. //        ad_data=0;                       //采樣值存儲(chǔ)單元初始化為0
  57.            initLCM( );
  58.         
  59.            WriteCommandLCM(0x01,1);                    //清顯示屏
  60.     DisplayListChar(0,0,str0);
  61.            DisplayListChar(0,1,str1);

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


  74. /*********延時(shí)K*1ms,12.000mhz**********/

  75. void delay(uint k)
  76. {
  77.     uint i,j;
  78.     for(i=0;i<k;i++)
  79.     {
  80.         for(j=0;j<60;j++)
  81.                 {;}
  82.     }
  83. }   
  84. /**********寫(xiě)指令到ICM子函數(shù)************/

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

  98. /**********寫(xiě)數(shù)據(jù)到LCM子函數(shù)************/

  99. void WriteDataLCM(uchar WDLCM)
  100. {
  101.     lcd_wait( );             //檢測(cè)忙信號(hào)   
  102.         DATAPORT=WDLCM;
  103.     LCM_RS=1;                // 選中數(shù)據(jù)寄存器
  104.     LCM_RW=0;                    // 寫(xiě)模式
  105.     LCM_EN=1;
  106.     _nop_();
  107.         _nop_();
  108.         _nop_();
  109.     LCM_EN=0;
  110. }

  111. /***********lcm內(nèi)部等待函數(shù)*************/

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

  132. /**********LCM初始化子函數(shù)***********/

  133. void initLCM( )
  134. {   
  135.         DATAPORT=0;        
  136.         delay(15);
  137.         WriteCommandLCM(0x38,0);    //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
  138.     delay(5);
  139.     WriteCommandLCM(0x38,0);
  140.     delay(5);
  141.     WriteCommandLCM(0x38,0);
  142.     delay(5);

  143.     WriteCommandLCM(0x38,1);    //8bit數(shù)據(jù)傳送,2行顯示,5*7字型,檢測(cè)忙信號(hào)
  144.     WriteCommandLCM(0x08,1);    //關(guān)閉顯示,檢測(cè)忙信號(hào)
  145.     WriteCommandLCM(0x01,1);    //清屏,檢測(cè)忙信號(hào)
  146.     WriteCommandLCM(0x06,1);    //顯示光標(biāo)右移設(shè)置,檢測(cè)忙信號(hào)
  147.     WriteCommandLCM(0x0c,1);    //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
  148. }

  149. /****顯示指定坐標(biāo)的一個(gè)字符子函數(shù)****/

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

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

  159. /*******顯示指定坐標(biāo)的一串字符子函數(shù)*****/

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

  172. /*****************系統(tǒng)顯示子函數(shù)*****************/

  173. void display(void)
  174. {
  175.            WriteCommandLCM(0x0c,1);                                    //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)        
  176.         DisplayListChar(0,0,str0);        
  177.         DisplayListChar(0,1,str1);        


  178.         DisplayOneChar(7,0,press_bai+0x30);
  179.         DisplayOneChar(8,0,press_shi+0x30);
  180.         DisplayOneChar(9,0,press_ge +0x30);
  181.     DisplayOneChar(11,0,press_dot+0x30);
  182.         delay(1000);                               //穩(wěn)定顯示
  183. }
  184. /************
  185. 讀ADC0832函數(shù)
  186. ************/

  187. //采集并返回
  188. uchar Adc0832(unsigned char channel)     //AD轉(zhuǎn)換,返回結(jié)果
  189. {
  190.     uchar i=0;
  191.     uchar j;
  192.     uint dat=0;
  193.     uchar ndat=0;

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


  257. void data_pro(void)
  258. {
  259.       unsigned int temp;
  260.       float  press;                             

  261.           if(14<ad_data<243)                                       //當(dāng)壓力值介于15kpa到115kpa之間時(shí),遵循線性變換
  262.                  {                           
  263.                     int vary=ad_data;                                                //y=(115-15)/(243-13)*X+15kpa                        
  264. ……………………

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

所有資料51hei提供下載:
電子秤proteus仿真 程序資料.rar (187.57 KB, 下載次數(shù): 181)


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
zkele + 5 共享資料的黑幣獎(jiǎng)勵(lì)!發(fā)帖辛苦了,互幫互助!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:209307 發(fā)表于 2017-6-8 19:00 | 只看該作者
有人沒(méi)
回復(fù)

使用道具 舉報(bào)

板凳
ID:308395 發(fā)表于 2018-4-28 09:23 | 只看該作者
是滑動(dòng)電阻實(shí)現(xiàn)的測(cè)量,仿真
回復(fù)

使用道具 舉報(bào)

地板
ID:354454 發(fā)表于 2018-6-21 00:17 | 只看該作者
請(qǐng)問(wèn)傳感器在什么位置?
回復(fù)

使用道具 舉報(bào)

5#
ID:728872 發(fā)表于 2020-4-15 12:20 | 只看該作者
這是用滑動(dòng)變阻器和電壓表來(lái)實(shí)現(xiàn)仿真壓力傳感器的嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:733895 發(fā)表于 2020-5-2 15:29 | 只看該作者
不太好用啊,打不開(kāi)工程
回復(fù)

使用道具 舉報(bào)

7#
ID:750042 發(fā)表于 2020-6-8 08:00 來(lái)自手機(jī) | 只看該作者
怎么操作呀?
回復(fù)

使用道具 舉報(bào)

8#
ID:773286 發(fā)表于 2020-6-9 15:56 | 只看該作者
下個(gè)看看
回復(fù)

使用道具 舉報(bào)

9#
ID:772740 發(fā)表于 2020-6-11 09:38 | 只看該作者
怎么不行的
回復(fù)

使用道具 舉報(bào)

10#
ID:774657 發(fā)表于 2020-6-11 12:02 | 只看該作者
做的很好。點(diǎn)贊
回復(fù)

使用道具 舉報(bào)

11#
ID:750771 發(fā)表于 2020-10-20 20:29 | 只看該作者
顯示動(dòng)態(tài)模型錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

12#
ID:850270 發(fā)表于 2020-11-29 21:28 | 只看該作者
后面的滑動(dòng)變阻器的那部分可以換成壓力傳感器嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本五月婷婷 | 一区二区三区av夏目彩春 | 视频一区在线观看 | 国产日韩欧美 | 欧美男人天堂 | 日韩在线视频一区二区三区 | 日韩乱码在线 | 成人国产精品入口免费视频 | 久久精品欧美一区二区三区不卡 | 精品久久久久久久久久久 | 日韩网站在线观看 | 国产1区2区 | 9191成人精品久久 | 欧美国产视频 | 久夜精品 | 超碰最新在线 | 国产精品3区 | 国产剧情一区 | 国产成人免费视频网站视频社区 | 在线观看国产精品一区二区 | 国产影音先锋 | 在线看片网站 | 91美女在线| 9久久| 日本不卡一区二区三区在线观看 | 亚洲欧美中文日韩在线v日本 | 一区二区三区在线播放 | 99久久精品国产一区二区三区 | 久久国产成人午夜av影院武则天 | 亚洲欧美在线观看 | 国产在线视频99 | 久久精品色欧美aⅴ一区二区 | 欧美日韩三级 | 欧美成人a∨高清免费观看 色999日韩 | 黄色一级毛片免费看 | 91精品久久久久久久久久小网站 | 日本午夜免费福利视频 | 中文字幕 视频一区 | 精品精品视频 | 欧美日韩在线播放 | 五月婷婷在线播放 |