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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6151|回復: 4
打印 上一主題 下一主題
收起左側(cè)

電子秤 輸入單價 顯示總價,質(zhì)量,有清零和超重報警的源碼+仿真

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198958 發(fā)表于 2017-6-1 16:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
電子秤 輸入單價 顯示總價、質(zhì)量,有清零和超重報警的源碼+仿真
連夜趕出來的項目

proteus仿真圖設計:




下面貼出源碼:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned char uint8;
  4. typedef unsigned int uint16;
  5. sbit rs=P2^6;
  6. sbit rw=P2^5;
  7. sbit e=P2^7;
  8. sbit scl=P2^1;
  9. sbit sda=P2^0;
  10. uint8 num[]="0123456789";
  11. uint8 d1[]="RMB/kg: ";
  12. uint16 ad[5],m[5];
  13. uint8 kn=10;
  14. uint8 keynum[3];
  15. float pric=0;
  16. sbit CS=P3^5;                           
  17. sbit Clk=P3^6;                           //時鐘
  18. sbit DO=P3^7;                           //ADC0832輸出引腳
  19. sbit DI=P3^7; //ADC0832輸入引腳
  20. unsigned char dat,count=0,point=0;
  21. void delay(uint16 i)
  22. {
  23.         while(i--);
  24. }
  25. void wrc(uint8 c)
  26. {
  27.         delay(1);
  28.         rs=0;
  29.         rw=0;
  30.         e=0;
  31.         P0=c;
  32.         e=1;
  33.         delay(1);
  34.         e=0;
  35. }
  36. void wrd(uint8 dat)
  37. {
  38.         delay(1);
  39.         rs=1;
  40.         rw=0;
  41.         e=0;
  42.         P0=dat;
  43.         e=1;
  44.         delay(1);
  45.         e=0;
  46.         rs=0;
  47. }
  48. void init()
  49. {
  50.         delay(1);
  51.         wrc(0x38);
  52.         wrc(0x38);
  53.         wrc(0x38);
  54.         wrc(0x06);
  55.         wrc(0x0c);
  56.         wrc(0x01);
  57. }
  58. /************************【AD0832】*************************************/

  59. unsigned char A_D(unsigned char CH)                     //AD函數(shù)
  60. {
  61.        unsigned char i,adval,test;               //定義局部變量并初始化
  62.        adval=0x00;
  63.        test=0x00;
  64.        Clk=0;                                 //clk低電平
  65.        DI=1;                                   //DI初始高電平在第一個時鐘脈沖的下降沿前保持高電平,表示啟動信號
  66.        _nop_();                              
  67.        CS=0;                                  //片選
  68.        _nop_();
  69.        Clk=1;                                 //clk上升沿,起始位寫入
  70.        _nop_();
  71.        if(CH==0x00)                      //選擇通道0
  72.        {
  73.               Clk=0;                              //clk低電平
  74.                DI=1;                             
  75.               _nop_();
  76.               Clk=1;                              //clk上升沿,通道0的第一位寫入
  77.               _nop_();
  78.               Clk=0;
  79.               DI=1;
  80.               _nop_();
  81.               Clk=1;                              //clk上升沿,通道0的第二位寫入
  82.               _nop_();
  83.        }
  84.        else
  85.        {
  86.               Clk=0;
  87.               DI=1;
  88.               _nop_();
  89.               Clk=1;                          //clk上升沿,通道1的第一位寫入
  90.               _nop_();
  91.               Clk=0;
  92.               DI=1;
  93.               _nop_();                        //clk上升沿,通道1的第二位寫入
  94.               Clk=1;
  95.               _nop_();
  96.        }
  97.        Clk=0;
  98.        DI=1;
  99.        for(i=0;i<8;i++)                //從高位向低位讀取八位AD值
  100.        {
  101.               _nop_();
  102.               adval<<=1;
  103.               Clk=1;
  104.               _nop_();
  105.               Clk=0;
  106.               if(DO)
  107.                      adval|=0x01;
  108.               else
  109.                      adval|=0x00;
  110.        }
  111.        for(i=0;i<8;i++)
  112.        {
  113.             
  114.               test>>=1;                             //從低位向高位讀取八位AD值
  115.             
  116.               if(DO)
  117.                      test|=0x80;  
  118.               else              
  119.                      test|=0x00;
  120.                      _nop_();
  121.                      Clk=1;
  122.                      _nop_();
  123.                      Clk=0;
  124.        }
  125.        if(adval==test)    dat=test;                 //判斷兩個讀取值是否相等相等就把讀取的數(shù)賦值給DAT
  126.        _nop_();
  127.        CS=1;
  128.        DO=1;
  129.        Clk=1;
  130.        return dat;
  131. }  
  132. uint8 keyscan()                 //按鍵掃描程序
  133. {
  134.         uint8 h,l,value;
  135.         P1=0x0f;
  136.         h=P1&0x0f;
  137.         if(h!=0x0f)
  138.         {
  139.                 delay(1);
  140.                 if(h!=0x0f)
  141.                 {
  142.                         h=P1&0x0f;
  143.                         l=P1|0xf0;
  144.                         P1=l;
  145.                         l=P1&0xf0;
  146.                         h=P1&0x0f;
  147.                         value=h+l;        
  148.                 }
  149.                 return value;
  150.         }
  151. }
  152. void keypros()                  //按鍵處理函數(shù)
  153. {
  154.         uint8 key;
  155.         key=keyscan();
  156.         switch(key)
  157.         {
  158.                 case 0xee: kn=0;break;
  159.                 case 0xde: kn=1;break;
  160.                 case 0xbe: kn=2;break;
  161.                 case 0x7e:break;
  162.                 case 0xed: kn=3;break;
  163.                 case 0xdd: kn=4;break;
  164.                 case 0xbd: kn=5;break;
  165.                 case 0x7d: break;
  166.                 case 0xeb: kn=6;break;
  167.                 case 0xdb: kn=7;break;
  168.                 case 0xbb: kn=8;break;   
  169.                 case 0x7b: break;
  170.                 case 0xe7: kn=9;break;
  171.                 case 0xd7: kn=10;break; //小數(shù)點按下標志位
  172.                 case 0xb7: kn=11;break; //clear,清空計價輸入
  173.                 case 0x77: break;
  174.                 default :  break;
  175.         }        
  176. }
  177. void datapros()
  178. {
  179.         uint8 i;
  180.                            //將按鍵值保存在數(shù)組keynum中
  181.         
  182.                 P1=0x0f;
  183.                 if(P1!=0x0f)               
  184.                 {
  185.                         keypros();
  186.                         P1=0x0f;
  187.                         while(P1!=0x0f);//等待按鍵松開
  188.                         if(kn>=0&&kn<=9)
  189.                         {
  190.                                 
  191.                                 if(point==0)
  192.                                 {        
  193.                                 if(count<2)        
  194.                                 {count++;
  195.                                         keynum[count]=kn;
  196.                                         wrc(0x09+count+point+0x80);  //移位顯示
  197.                                         wrd(keynum[count]+0x30);
  198.                                 
  199.                                         pric=pric*10+kn;        
  200.                                        
  201.                                 }
  202.                         }
  203.                                 else if(point<3)
  204.                                 {point++;
  205.                                         keynum[count]=kn;
  206.                                         wrc(0x09+count+point+0x80);  //移位顯示
  207.                                         wrd(keynum[count]+0x30);
  208.                                 if(point==2)
  209.                                         pric=pric+kn*1.0/10;        
  210.                                 if(point==3)pric=pric+kn*1.0/100;        
  211.                                 
  212.                                 }
  213.                         }
  214.                                 if(kn==10&&point==0)
  215.                                 {        point=1;
  216.                                         //count=0;
  217.                                         if(count==0)
  218.                                         {wrc(0x09+0x80);  //移位顯示
  219.                                         wrd('0');
  220.                                         }
  221.                                         wrc(0x09+count+point+0x80);  //移位顯示
  222.                                         wrd('.');
  223.                                        
  224.                                 }
  225.                                        
  226.                         if(kn==11)          //清除按鍵計價數(shù)
  227.                         {
  228.                                 wrc(0x01);//清屏處理        
  229.                                 pric=0;
  230.                                 count=0;
  231.                                 point=0;
  232.                                 for(i=0;i<3;i++)
  233.                                 keynum[i]=0;
  234.                         }
  235.                
  236.         
  237.         
  238.                
  239.         
  240.                 }                        
  241.                
  242.         kn=0;
  243. }
  244. void display()
  245. {
  246.         float v;
  247.         uint8 i;
  248.         uint16 price;
  249.         ad[0]=A_D(0);        //讀取第一次之前的那次數(shù)據(jù)
  250.         v=ad[0]*0.01953;//將電位器的數(shù)據(jù)轉(zhuǎn)換成電壓值
  251.         v=v*100;//取2位有效數(shù)值
  252.         ad[0]=v;
  253.         price=ad[0]*pric;         //每千克多少錢如果我們定義每千克2元那么就可以乘以2,如果為其他我們可以乘以其他數(shù),最大定義的價格是200元每千克
  254.         wrc(0x00+0x80);
  255.         for(i=0;i<8;i++)
  256.         {
  257.                 wrd(d1[i]);
  258.         }
  259.         wrc(0x40+0x80);
  260.         wrd('m');
  261.         wrd(':');
  262.         wrd(num[ad[0]/100]);
  263.         wrd('.');
  264. ……………………

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

所有資料51hei提供下載:
電子秤.zip (68.65 KB, 下載次數(shù): 190)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:146834 發(fā)表于 2017-6-16 15:33 | 只看該作者
咋沒有人回帖。
回復

使用道具 舉報

板凳
ID:708082 發(fā)表于 2020-3-14 09:19 | 只看該作者
好東西 研究研究
回復

使用道具 舉報

地板
ID:721884 發(fā)表于 2020-4-8 13:11 來自手機 | 只看該作者
樓主,壓敏電阻代替了壓力傳感器嗎
回復

使用道具 舉報

5#
ID:1017118 發(fā)表于 2022-4-10 00:27 | 只看該作者
這個資料好,正好想做一個類似的,好好研究一下
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片免费观看 | 91在线资源 | 精品在线一区 | 久久一视频 | 国产二区精品视频 | 日韩精品免费 | 成人在线视频免费播放 | 亚洲精品第一页 | 这里只有精品99re | 夜久久| 在线看av的网址 | 韩国久久精品 | 三级免费av | 国产一级在线 | 亚洲成人福利 | 欧美xxxx黑人又粗又长 | 桃花av在线 | 亚洲传媒在线 | 成人影院在线视频 | 中文字幕男人的天堂 | 有码在线 | 高清视频一区二区三区 | 国产成人精品久久二区二区 | 亚洲一区自拍 | 午夜免费福利电影 | 伊人狼人影院 | 日韩精品成人 | 丝袜一区二区三区 | 男女羞羞视频免费看 | 超碰97免费在线 | 91精品久久久久久久久99蜜臂 | 国产黄色小视频在线观看 | 二区视频| 欧美日韩亚洲视频 | 国产女人与拘做视频免费 | 精品久久久久香蕉网 | 日韩二三区 | 久久久久亚洲av毛片大全 | 成人免费一区二区 | 亚洲第一av | 国产一区三区视频 |