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

標題: 單片機電子秤設計(源程序+lcd12864顯示) [打印本頁]

作者: daxiao    時間: 2015-3-22 02:28
標題: 單片機電子秤設計(源程序+lcd12864顯示)
本帖最后由 daxiao 于 2015-3-22 02:31 編輯












  1.         //按鍵接P2口
  2.        //LCD數據口接P0口
  3.        //DOUT=P3^0;
  4.        //PD_SCK=P3^1;
  5.        //RS=P1^1;  VOUT 空接 RST 空接   NC  PSB 接VCC
  6.        //RW=P1^2;
  7.        //E=P1^3;
  8.        //FMQ=P1^0;   蜂鳴器
  9.          #include<reg52.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int

  12. sbit ADDO=P3^0;    //51CPU 準雙向I/0 輸入使能(DOUT)  / 串行數據輸出
  13. sbit ADSK=P3^1;    // 使能AD(PD_SCK)   /  串行時鐘輸入
  14.     sbit RS=P1^1;     //寄存器選擇引腳,搞電平選擇數據寄存器,低電平選擇指令寄存器
  15.     sbit RW=P1^2;    //讀寫操作使能引腳,高電平使能讀操作,低電平使能寫操作
  16.     sbit E=P1^3;     //總使能引腳
  17. sbit FMQ=P1^0;           //蜂鳴器

  18. //----------------------AD轉換程序--//
  19. unsigned long ReadCount(void)  //無參數,返回長整形變量
  20. {
  21.   unsigned long Count;      //聲明長整形變量Count
  22.   unsigned char i;       //聲明字符型變量i
  23.   ADSK=0;         //串行輸入拉低
  24.   Count=0;       //變量Count置零
  25.   while(ADDO);      //等待串行輸出拉高
  26.   for(i=0;i<24;i++)      //接收24個數據和發送24個脈沖
  27.   {         
  28.    ADSK=1;         //發送脈沖
  29.    Count=Count<<1;        //變量左移
  30.    ADSK=0;          //拉低
  31.    if(ADDO)Count++;       //讀入數據(高>>低)
  32.   }
  33.   ADSK=1;          //發送第25個脈沖(選擇A通道、128增益。)
  34.   Count=Count^0x800000;    //按位相異或
  35.   ADSK=0;       //串行拉低
  36.      return Count; //返回
  37. }  
  38. //--------------------延時子函數--------//
  39. void delay(unsigned char delayata)
  40. {
  41.   uchar i,j;
  42.   for(i=0;i<delayata;i++)
  43.   {
  44.    for(j=0;j<121;j++)
  45.    {;}
  46.   }
  47. }
  48. //-------------------------------------單鍵掃描子函數-----//
  49. unsigned char JP()
  50. {
  51. unsigned char x=0x00;
  52.   bit i=0;
  53.   x=P2;   //掃描Y坐標
  54.   FMQ=0;    //響起蜂鳴器
  55.   delay(125);  //延時去抖動
  56.   P2=0x0f;
  57.   delay(2);
  58.   x+=P2;    //掃描X坐標
  59.   switch(x)
  60.   {
  61.    case 0xee:x=0x30;break;    //按下0
  62.    case 0xed:x=0x31;break;    //按下1
  63.    case 0xeb:x=0x34;break;    //按下4
  64.    case 0xe7:x=0x37;break;    //按下7
  65.    case 0xde:x=0x46;break;       //按下F/.
  66.    case 0xdd:x=0x32;break;    //按下2
  67.       case 0xdb:x=0x35;break;    //按下5
  68.    case 0xd7:x=0x38;break;    //按下8
  69.    case 0xbe:x=0x45;break;    //按下E
  70.    case 0xbd:x=0x33;break;    //按下3
  71.    case 0xbb:x=0x36;break;    //按下6
  72.    case 0xb7:x=0x39;break;    //按下9
  73.    case 0x7e:x=0x44;break;    //按下D
  74.    case 0x7d:x=0x43;break;    //按下C
  75.    case 0x7b:x=0x42;break;    //按下B
  76.    case 0x77:x=0x41;break;    //按下A
  77.    default:x=0xff;break;
  78.    }
  79.   FMQ=1;       //關閉蜂鳴器
  80.    while(i==0)    //等待按鍵松開
  81.    {
  82.     P2=0xf0;
  83.     delay(150);
  84.     if(P2==0xf0)
  85.     {
  86.      i=1;
  87.     }
  88.     else{i=0;}
  89.    }
  90.   return x;    //返回x(ASCII碼)
  91. }
  92. //------------------12864寫指令子函數-----//
  93. void write_12864com(unsigned char com)
  94. {
  95. RS=0;
  96. RW=0;
  97. delay(1);
  98. E=1;
  99. P0=com;
  100. delay(2);
  101. E=0;
  102. delay(1);
  103. }
  104. //------------------12864寫數據子函數-----//
  105. void write_12864dat(unsigned char dat)
  106. {
  107. RS=1;
  108. RW=0;
  109. delay(1);
  110. E=1;
  111. P0=dat;
  112. delay(2);
  113. E=0;
  114. delay(1);
  115. }
  116. //------------------------------LCD初始化-----//
  117. void initinal(void)
  118. {
  119.   delay(100);
  120.   write_12864com(0x30);   //8位并行通信
  121.   delay(1);
  122.   write_12864com(0x30);   //8位并行通信
  123.   delay(1);
  124.   write_12864com(0x02);  
  125.   delay(2);
  126.   write_12864com(0x06);  
  127.   delay(2);
  128.   write_12864com(0x0c);  
  129.   delay(2);
  130.   write_12864com(0x01);  
  131.   delay(2);
  132.   write_12864com(0x80);  
  133.   delay(2);
  134. }
  135. //--------------------主函數-------------//
  136. void main(void)
  137. {
  138.    uchar  LCD[16]={"0123456789ABCDEF"};
  139.    code uchar JM1[]={0xb5,0xda,0xc8,0xfd,0xd7,0xe9,0xb5,0xe7,0xd7,0xd3,0xb3,0xc6};
  140.    code uchar JM2[]={"單價: 00.0元    "};
  141.    code uchar JM3[]={"重量: 00.000KG  "};
  142.    code uchar JM4[]={"總價: 0000.0元  "};
  143.    uchar DJ[3];       //單價
  144.    uchar ZL[5];       //重量
  145.    uchar QPZL[5];   //去皮時的重量
  146.    uchar ZJ[5];       //總價
  147.    unsigned long J1;
  148.    uint J2,J3,J6=0;
  149.    bit J5=1;
  150.    uint J7;
  151.    uchar i;
  152.    uchar JM5[]={5679};
  153.    initinal();  //初始化
  154.   for(i=0;i<3;i++)  //填值
  155.   {
  156.    DJ[i]=0;
  157.   }
  158.   for(i=0;i<5;i++)   //填值
  159.   {
  160.    ZL[i]=0;
  161.   }
  162.   for(i=0;i<5;i++)   //填值
  163.   {
  164.    QPZL[i]=0;
  165.   }
  166.   for(i=0;i<5;i++)   //填值
  167.   {
  168.    ZJ[i]=0;
  169.   }
  170.     write_12864com(0x81);  //定位
  171.   for(i=0;i<12;i++)
  172. {
  173.   write_12864dat(JM1[i]);  //顯示 第三組電子稱
  174. }
  175. write_12864com(0x90);  //定位
  176. for(i=0;JM2[i]!='\0';i++)
  177. {
  178.   write_12864dat(JM2[i]);    //顯示 單價:00.0元
  179. }
  180. write_12864com(0x88);  //定位
  181. for(i=0;JM3[i]!='\0';i++)
  182. {
  183.   write_12864dat(JM3[i]);  //顯示 重量: 00.000KG
  184. }
  185. write_12864com(0x98);    //定位
  186. for(i=0;JM4[i]!='\0';i++)
  187. {
  188.   write_12864dat(JM4[i]);   //顯示 總價: 0000.0元
  189. }
  190. P2=0xf0;
  191. while(1)
  192. {
  193.    while(P2==0xf0)      //但沒有按鍵按下的時候進入,有按鍵按下的時候跳出來
  194.    {
  195.    J1=ReadCount();    //讀AD值
  196.    J3=((J1-8388608)/150)-11;  //取值
  197.    ZL[0]=(J3/10000)%10;   //重量十位
  198.    if(ZL[0]>3){FMQ=0;}     //超重報警
  199.    else{FMQ=1;}
  200.    ZL[1]=(J3/1000)%10;       //重量個位
  201.    ZL[2]=(J3/100)%10;     //計算位
  202.    ZL[3]=(J3/10)%10;
  203.    ZL[4]=J3%10;
  204.    J7=ZL[4];
  205.    J7+=ZL[3]*10;
  206.    J7+=ZL[2]*100;
  207.    J7+=ZL[1]*1000;
  208.    J7+=ZL[0]*10000;
  209.    J3=QPZL[4];
  210.    J3+=QPZL[3]*10;
  211.    J3+=QPZL[2]*100;
  212.    J3+=QPZL[1]*1000;
  213.    J3+=QPZL[0]*10000;
  214.    J7-=J3;
  215.    ZL[0]=J7/10000;
  216.    J7%=10000;
  217.    ZL[1]=J7/1000;
  218.    J7%=1000;
  219.    ZL[2]=J7/100;
  220.    J7%=100;
  221.    ZL[3]=J7/10;
  222.    J7%=10;
  223.    ZL[4]=J7;
  224.    write_12864com(0x8b); //定位
  225.    write_12864dat(LCD[ZL[0]]);    //送顯示
  226.    write_12864dat(LCD[ZL[1]]);    //送顯示
  227.    write_12864dat(0x2e);    //送顯示
  228.    write_12864dat(LCD[ZL[2]]);    //送顯示
  229.    write_12864dat(LCD[ZL[3]]);    //送顯示
  230.    write_12864dat(LCD[ZL[4]]);    //送顯示
  231.    J7=DJ[2]*ZL[3];
  232.    J7+=DJ[2]*ZL[2]*10;
  233.    J7+=DJ[2]*ZL[1]*100;
  234.    J7+=DJ[2]*ZL[0]*1000;
  235.    J7/=10;
  236.    J7+=DJ[1]*ZL[3];
  237.    J7+=DJ[1]*ZL[2]*10;
  238.    J7+=DJ[1]*ZL[1]*100;
  239.    J7+=DJ[1]*ZL[0]*1000;
  240.    J7/=10;
  241.    J7+=DJ[0]*ZL[3];   
  242.    J7+=DJ[0]*ZL[2]*10;
  243.    J7+=DJ[0]*ZL[1]*100;
  244.    J7+=DJ[0]*ZL[0]*1000;

  245. ZJ[0]=J7/10000;
  246. J7%=10000;
  247. ZJ[1]=J7/1000;
  248. J7%=1000;
  249. ZJ[2]=J7/100;
  250. J7%=100;
  251. ZJ[3]=J7/10;
  252. J7%=10;
  253. ZJ[4]=J7;
  254.   write_12864com(0x9b); //定位
  255.   i=ZJ[0];
  256.   i=LCD[i];
  257.   write_12864dat(i);    //送顯示
  258.    i=ZJ[1];
  259.   i=LCD[i];
  260.   write_12864dat(i);    //送顯示
  261.    i=ZJ[2];
  262.   i=LCD[i];
  263.   write_12864dat(i);    //送顯示
  264.    i=ZJ[3];
  265.   i=LCD[i];
  266.   write_12864dat(i);    //送顯示
  267.   write_12864dat(0x2e);   //顯示點
  268.     i=ZJ[4];
  269.   i=LCD[i];
  270.   write_12864dat(i);    //送顯示
  271.    P2=0xf0;
  272.    delay(1);
  273.    }
  274.    J2=JP();
  275.    if(J6>2){J6=0;}
  276.    if(J2<0x40)
  277.    {
  278.    J2-=0x30;
  279.    DJ[J6]=J2;
  280.    J2=0xff;
  281.    J6++;
  282.    }
  283.    else
  284.    {
  285.     switch(J2)
  286.    {
  287. case 0x41:P2=0xf0;while(P2==0xf0);J2=0xff;break;    //按下A鎖定界面
  288.     case 0x42:J2=0xff;break;         //解除鎖定
  289. case 0x43:J1=ReadCount();          //去皮
  290.            J3=((J1-8388608)/150)-11;
  291.      QPZL[0]=(J3/10000)%10;
  292.      QPZL[1]=(J3/1000)%10;
  293.      QPZL[2]=(J3/100)%10;
  294.      QPZL[3]=(J3/10)%10;
  295.      QPZL[4]=J3%10;
  296.      J2=0xff;
  297.      break;
  298. case 0x44:DJ[0]=0;DJ[1]=0;DJ[2]=0;J6=0;J2=0xff;break;    //單價 復位
  299.     case 0x45:QPZL[0]=0;QPZL[1]=0;QPZL[2]=0;QPZL[3]=0;QPZL[4]=0;J2=0xff;break;   //重量復位
  300.     case 0x46:DJ[0]=0;DJ[1]=0;DJ[2]=0;J6=0;QPZL[0]=0;QPZL[1]=0;QPZL[2]=0;QPZL[3]=0;QPZL[4]=0;J2=0xff;break;    //單價 重量 復位
  301. default:break;
  302.    }
  303.    }
  304.    write_12864com(0x93);
  305.    i=DJ[0];
  306.    i=LCD[i];
  307.    write_12864dat(i);
  308.    i=DJ[1];
  309.    i=LCD[i];
  310.    write_12864dat(i);
  311.    write_12864dat(0x2e);
  312.    i=DJ[2];
  313.    i=LCD[i];
  314.    write_12864dat(i);
  315. }
  316. }
復制代碼



作者: 龍道科技    時間: 2015-3-25 08:58
不錯啊,謝謝分享
作者: 酷爺IQ    時間: 2015-5-10 21:58
LZ 有沒有電路圖,有點路途就更好了
作者: wang215322    時間: 2015-5-12 18:59
很好的學習資料,謝謝分享
作者: shusy41    時間: 2015-5-29 16:28
樓主ad轉換程序是不是有點問題啊 剛開始不是0 哦
作者: weiliang    時間: 2015-7-12 00:53
有仿真的圖么???求資源,謝謝你。
作者: weiliang    時間: 2015-7-12 01:14
樓主有沒有仿真的電路圖,
作者: panamatw    時間: 2015-7-24 09:10
很好的參考資料,謝謝分享,如有電路圖更好
作者: stewart_leung    時間: 2015-8-9 18:34
樓主,放教程啊
作者: mhx321    時間: 2015-10-29 01:31
太好了,一直想弄個電子稱,謝謝樓主
作者: abc15236617243    時間: 2016-1-9 17:29
誰有量清杯的程序啊
作者: 紫罌粟    時間: 2016-3-17 14:23
LZ,有沒有圖啊?方便給下嗎?
作者: weekend    時間: 2016-3-20 10:56
樓主,我在做相關的畢業設計,能放教程出來么
作者: czq18942434756    時間: 2016-3-22 20:30
有仿真圖嗎?
作者: harly2200    時間: 2016-3-27 01:12
學習了,頂起
作者: xuliling    時間: 2016-4-18 15:05
樓主厲害哦!學習了!謝謝分享!
作者: fbzsn    時間: 2016-6-12 12:28
“case 0x41:P2=0xf0;while(P2==0xf0);J2=0xff;break;    //按下A鎖定界面
    case 0x42:J2=0xff;break;         //解除鎖定”          怎樣鎖定界面?請介紹下原理,謝謝!
作者: 噠噠帥    時間: 2016-7-25 16:58
樓主方便給一下仿真圖嗎
作者: 清風服兩岸    時間: 2016-7-27 21:49
剛學習,用HX711做的

作者: 我愛小朋    時間: 2016-7-27 22:13
lz  有沒有原理圖啊  給一個 拜謝
作者: 清風服兩岸    時間: 2016-7-27 23:42
不是1602顯示的嗎??

作者: 我愛小朋    時間: 2016-7-28 00:35
請問你的A/D模塊是HX711嗎?還是別的
作者: hxlywl    時間: 2016-7-28 07:22
很好,值得學習
作者: pppaz    時間: 2016-7-28 07:57
謝謝樓主大人的分享
作者: jinzhe    時間: 2016-9-19 15:16
感謝 感謝 感謝 非常感謝
作者: lszmin    時間: 2016-10-11 13:01

很好的參考資料,謝謝分享,如有電路圖更好
作者: 2gy88yhs    時間: 2016-10-11 17:46

很好的學習資料,謝謝分享
作者: 5551    時間: 2016-10-13 19:48
     兄弟有電路圖嗎
作者: sffhhjkku    時間: 2016-11-24 10:52
可以幫助哈我嗎  樓主

作者: bbkk    時間: 2016-11-28 18:31
樓主再好把電路圖也上傳, 大家也學習一下。
作者: 秋雨VS寂寞    時間: 2016-11-29 23:44
厲害理解啊
作者: sxdz86    時間: 2016-12-7 08:11
有原理圖嗎

作者: hangmw    時間: 2016-12-7 10:16
LZ 有電路圖嗎?
作者: xiaowu123    時間: 2016-12-15 15:22
好棒的設計,很清晰
作者: lehigh    時間: 2016-12-20 13:08
感謝分享,學習了
作者: 小51hei56565    時間: 2017-4-1 14:54
感謝分享
作者: 極地之光    時間: 2017-4-12 17:43
有原理圖嗎?我想參考一下。
作者: 519762768    時間: 2017-4-12 22:00
值得學習一段時間了,感謝樓主的分享
作者: WE1866    時間: 2017-4-13 14:13
不錯啊,謝謝分享
作者: WE1866    時間: 2017-4-13 20:00
謝謝真不錯
作者: 1401070065    時間: 2017-4-25 00:26
贊。。。。。。。。。。。。。
作者: 黑boy    時間: 2017-4-26 15:14
挺好   對于做這個電子秤的有幫助
作者: linnyshow    時間: 2017-4-26 19:05
有沒有電路圖
作者: fefen0    時間: 2017-5-2 14:12
給個原理圖啊。
作者: zs3945    時間: 2017-5-22 00:47
為什么我一接上傳感器就顯示亂碼了
作者: w515748522    時間: 2017-5-26 17:20
不錯不錯,謝謝分享
作者: adls    時間: 2017-5-27 08:31

很好的參考資料,謝謝分享,如有電路圖更好
作者: fjc1979    時間: 2017-6-16 12:36
mhx321 發表于 2015-10-29 01:31
太好了,一直想弄個電子稱,謝謝樓主


太好了,一直想弄個電子稱,謝謝樓主
作者: WangYM68    時間: 2017-6-30 11:08
很好的學習資料,謝謝分享
作者: 晴楓    時間: 2017-7-26 13:03
剛好需要
作者: 18829298431    時間: 2017-7-31 17:27
真心不錯
作者: lesson18    時間: 2017-9-2 21:14
好利害啊,程序大嗎/
作者: 華南摩爾    時間: 2017-9-4 20:09
學習了
作者: 柚子喲喲喲    時間: 2017-9-7 15:04
樓主,有沒有仿真圖啊?謝謝樓主啊
作者: 返還擊    時間: 2018-2-1 16:31
沒有讀數穩定的判斷嗎,想探討下用什么濾波合適啊
作者: xbalsknx    時間: 2018-5-5 17:55
很不錯
作者: 菊次郎的夏天    時間: 2018-5-6 11:51
額,參考一下,謝謝
作者: zhaoy    時間: 2018-5-18 15:27
有仿真圖嗎
作者: 碧海濤聲    時間: 2018-5-29 08:38
高手,謝謝分享
作者: 碧海濤聲    時間: 2018-5-29 08:40
高手,謝謝分享
作者: mtk1625    時間: 2018-6-29 17:16
有完整程序嗎?
作者: hei0    時間: 2018-7-3 17:26
還是12864的好
作者: 王文文    時間: 2019-4-23 16:48
哪位大神有原理圖啊
作者: smile小寶    時間: 2019-5-24 22:14
正好要學習一下,謝謝分享
作者: 星星之火可以燎    時間: 2019-6-27 11:53
支持,有學習意義
作者: 星星之火可以燎    時間: 2019-6-27 11:53
學習一下
作者: cgg547100632    時間: 2019-6-28 08:36
很好很好多交流
作者: hellowC8051    時間: 2019-7-18 11:28
不錯啊,謝謝分享
作者: lijihong_2018    時間: 2019-11-13 11:20
不錯,學習一下
作者: rayin    時間: 2020-11-15 16:20
不錯,值得學習。51hei有你更精彩!!
作者: 51giao    時間: 2020-12-28 21:17
LZ 有沒有電路原理圖 小白上路剛好要用到電子秤設計 謝謝啦
作者: 劉工程    時間: 2021-1-12 15:33
稱重組件用啥?準確度如何?





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美一级欧美三级 | 黄色三级大片 | 欧美日本国产 | 国产成人精品自拍 | 亚洲美女一区 | 国产三级午夜理伦三级 | 久久视频一区 | 欧美日韩一区二区在线 | 亚洲男人av | 国产精品免费av | 免费在线黄色网址 | 极品白嫩少妇无套内谢 | 久草福利在线观看 | 中国农村毛片免费播放 | 国产精品久久久国产盗摄 | 欧美日韩不卡 | 九九久久精品视频 | 午夜精品999 | 欧美成人综合 | 97视频免费在线观看 | 成人免费视频一区二区 | 国产一级免费 | 亚洲欧美日韩一区二区 | 国产成人精品在线观看 | 国产传媒在线 | 欧美又粗又长 | 欧美亚洲国产精品 | 成人a视频 | 欧洲精品一区 | 黄色大片在线免费观看 | 亚洲成人免费在线观看 | 国产一区二区三区精品视频 | 亚洲一区二区在线播放 | 黑人操亚洲女人 | 国产精品乱码一区二区三区 | 一级片免费在线观看 | 亚洲最大黄色网址 | 一区二区免费 | 谁有毛片网站 | 成av人片一区二区三区久久 | 91丝袜一区在线观看 |