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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子秤設計(源程序+lcd12864顯示)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:75005 發表于 2015-3-22 02:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 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. }
復制代碼


評分

參與人數 5黑幣 +26 收起 理由
512713659 + 5 贊一個!
黑boy + 1 贊一個!
ssfc + 5 贊一個!
YJGG + 10 很給力!
madell + 5 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:73868 發表于 2015-3-25 08:58 | 只看該作者
不錯啊,謝謝分享
回復

使用道具 舉報

板凳
ID:79560 發表于 2015-5-10 21:58 | 只看該作者
LZ 有沒有電路圖,有點路途就更好了
回復

使用道具 舉報

地板
ID:75610 發表于 2015-5-12 18:59 | 只看該作者
很好的學習資料,謝謝分享
回復

使用道具 舉報

5#
ID:81478 發表于 2015-5-29 16:28 | 只看該作者
樓主ad轉換程序是不是有點問題啊 剛開始不是0 哦
回復

使用道具 舉報

6#
ID:85424 發表于 2015-7-12 00:53 | 只看該作者
有仿真的圖么???求資源,謝謝你。
回復

使用道具 舉報

7#
ID:85424 發表于 2015-7-12 01:14 | 只看該作者
樓主有沒有仿真的電路圖,
回復

使用道具 舉報

8#
ID:86684 發表于 2015-7-24 09:10 | 只看該作者
很好的參考資料,謝謝分享,如有電路圖更好
回復

使用道具 舉報

9#
ID:87991 發表于 2015-8-9 18:34 | 只看該作者
樓主,放教程啊
回復

使用道具 舉報

10#
ID:93227 發表于 2015-10-29 01:31 | 只看該作者
太好了,一直想弄個電子稱,謝謝樓主
回復

使用道具 舉報

11#
ID:102541 發表于 2016-1-9 17:29 | 只看該作者
誰有量清杯的程序啊
回復

使用道具 舉報

12#
ID:109330 發表于 2016-3-17 14:23 | 只看該作者
LZ,有沒有圖啊?方便給下嗎?
回復

使用道具 舉報

13#
ID:109797 發表于 2016-3-20 10:56 | 只看該作者
樓主,我在做相關的畢業設計,能放教程出來么
回復

使用道具 舉報

14#
ID:109752 發表于 2016-3-22 20:30 | 只看該作者
有仿真圖嗎?
回復

使用道具 舉報

15#
ID:106211 發表于 2016-3-27 01:12 | 只看該作者
學習了,頂起
回復

使用道具 舉報

16#
ID:110375 發表于 2016-4-18 15:05 | 只看該作者
樓主厲害哦!學習了!謝謝分享!
回復

使用道具 舉報

17#
ID:45225 發表于 2016-6-12 12:28 | 只看該作者
“case 0x41:P2=0xf0;while(P2==0xf0);J2=0xff;break;    //按下A鎖定界面
    case 0x42:J2=0xff;break;         //解除鎖定”          怎樣鎖定界面?請介紹下原理,謝謝!
回復

使用道具 舉報

18#
ID:134965 發表于 2016-7-25 16:58 | 只看該作者
樓主方便給一下仿真圖嗎
回復

使用道具 舉報

19#
ID:135271 發表于 2016-7-27 21:49 | 只看該作者
剛學習,用HX711做的
回復

使用道具 舉報

20#
ID:135275 發表于 2016-7-27 22:13 | 只看該作者
lz  有沒有原理圖啊  給一個 拜謝
回復

使用道具 舉報

21#
ID:135271 發表于 2016-7-27 23:42 | 只看該作者
不是1602顯示的嗎??
回復

使用道具 舉報

22#
ID:135275 發表于 2016-7-28 00:35 | 只看該作者
請問你的A/D模塊是HX711嗎?還是別的
回復

使用道具 舉報

23#
ID:135299 發表于 2016-7-28 07:22 | 只看該作者
很好,值得學習
回復

使用道具 舉報

24#
ID:135166 發表于 2016-7-28 07:57 | 只看該作者
謝謝樓主大人的分享
回復

使用道具 舉報

25#
ID:139833 發表于 2016-9-19 15:16 | 只看該作者
感謝 感謝 感謝 非常感謝
回復

使用道具 舉報

26#
ID:113220 發表于 2016-10-11 13:01 | 只看該作者

很好的參考資料,謝謝分享,如有電路圖更好
回復

使用道具 舉報

27#
ID:142342 發表于 2016-10-11 17:46 | 只看該作者

很好的學習資料,謝謝分享
回復

使用道具 舉報

28#
ID:117161 發表于 2016-10-13 19:48 | 只看該作者
     兄弟有電路圖嗎
回復

使用道具 舉報

29#
ID:149863 發表于 2016-11-24 10:52 | 只看該作者
可以幫助哈我嗎  樓主
回復

使用道具 舉報

30#
ID:150514 發表于 2016-11-28 18:31 | 只看該作者
樓主再好把電路圖也上傳, 大家也學習一下。
回復

使用道具 舉報

31#
ID:147658 發表于 2016-11-29 23:44 | 只看該作者
厲害理解啊
回復

使用道具 舉報

32#
ID:62391 發表于 2016-12-7 08:11 | 只看該作者
有原理圖嗎
回復

使用道具 舉報

33#
ID:73795 發表于 2016-12-7 10:16 | 只看該作者
LZ 有電路圖嗎?
回復

使用道具 舉報

34#
ID:155015 發表于 2016-12-15 15:22 | 只看該作者
好棒的設計,很清晰
回復

使用道具 舉報

35#
ID:110866 發表于 2016-12-20 13:08 | 只看該作者
感謝分享,學習了
回復

使用道具 舉報

36#
ID:184237 發表于 2017-4-1 14:54 | 只看該作者
感謝分享
回復

使用道具 舉報

37#
ID:108598 發表于 2017-4-12 17:43 | 只看該作者
有原理圖嗎?我想參考一下。
回復

使用道具 舉報

38#
ID:146492 發表于 2017-4-12 22:00 | 只看該作者
值得學習一段時間了,感謝樓主的分享
回復

使用道具 舉報

39#
ID:18572 發表于 2017-4-13 14:13 | 只看該作者
不錯啊,謝謝分享
回復

使用道具 舉報

40#
ID:18572 發表于 2017-4-13 20:00 | 只看該作者
謝謝真不錯
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91婷婷韩国欧美一区二区 | 国产精品久久久久久久久久妞妞 | 在线中文视频 | 久久精品欧美一区二区三区不卡 | 欧美国产亚洲一区二区 | 亚洲成人三区 | 在线播放一区 | 国产激情视频网站 | 中文字幕国产第一页 | 天天爽综合网 | 精品日韩在线观看 | 亚洲a视频 | 国产成人精品a视频一区www | 日日夜夜精品视频 | 免费看黄色国产 | 亚洲视频在线一区 | 精品免费国产一区二区三区四区 | 日日爽 | 日韩在线视频一区二区三区 | 黄色片网站国产 | 欧美日韩在线观看视频 | 国产精品色综合 | 国产精品国产精品 | 国产精品1区| 国产乱码高清区二区三区在线 | 免费一级淫片aaa片毛片a级 | 黄色一级大片在线免费看产 | 一区二区三区日韩 | 黄网站在线观看 | 欧美另类视频在线 | 午夜精品福利视频 | 祝你幸福电影在线观看 | 午夜精品一区二区三区免费视频 | 男人天堂网av | 亚洲欧美日韩精品 | 久久精品免费观看 | 国产精品1区 | 国产在线不卡 | 亚洲精品一区二区三区在线观看 | 99热在线播放 | 亚洲乱码一区二区三区在线观看 |