找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7247|回复: 8
打印 上一主题 下一主题
收起左侧

基于STM32的智能电子秤设计源码 12864显示

  [复制链接]
跳转到指定楼层
楼主
自己搜罗的一些资料希望对有需要的人有所帮助!
用的是stm32单片机芯片,可以根据自己需要进行调试更改。
电子设计大赛D题:简易电子秤
芯片:stm32c8
显示屏:12864



部分源码预览:
  1. #include "test.h"
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "12864.h"
  5. #include "adc.h"
  6. #include "key.h"
  7. #include "usart.h"
  8. #include "led.h"
  9. #include "beep.h"
  10. float all = 0;
  11. u16 adc=0;
  12. u16 adc_value=0;
  13. u16 last_adc=0;
  14. float weight=0;
  15. float last_weight=0;
  16. float money=0;
  17. float money_one=0;
  18. float f1=0.0,f2=0.0;
  19. u8 key_value=0;
  20. u8 key_count=0;
  21. float price=0;
  22. u16 last_price=0;
  23. u8 port_flag=0;
  24. u8 count = 0;
  25. u8 peel_flag=0;
  26. u8 money_flag=0;
  27. u8 money_count=0;
  28. u8 save_flag=0;
  29. u8 error=0;
  30. u8 price_f=0;
  31. u16 start_value=180;
  32. u8 start_flag=0;

  33. float abss(float x)
  34. {
  35.         if(x>0.0)
  36.                 return x;
  37.         else
  38.                 return -x;
  39. }


  40. void start_measure(void)
  41. {
  42.        
  43.         adc = Get_Adc_Average(ADC_Channel_8,100);
  44.        
  45.         adc_value=adc;

  46.         if(adc_value<190&&adc_value>170)
  47.         {
  48.                 LED = 0;
  49.         }
  50.         else
  51.         {
  52.                 LED = 1;
  53.         }
  54.         //write_num(0x9B,adc_value);
  55.        
  56.         //printf("%d\r\n",adc_value);
  57.         last_adc = adc;
  58. }

  59. void price_set(void)
  60. {
  61.         write_com(0x93);
  62.         write_data(0x20);
  63.         write_data(0x20);
  64.         write_data(0x20);
  65.         write_data(0x20);
  66.         price=0;
  67.         while(key_count==1||key_count==3)
  68.         {
  69.                 if(key_value==15)
  70.                 {
  71.                         if(price<100)
  72.                         {
  73.                                 write_data(0x2e);
  74.                                 port_flag=1;
  75.                         }
  76.                         else
  77.                                 display4();
  78.                 }
  79.                 if(key_value<10||key_value==15)
  80.                 price_value();
  81.                 key_value = KEY_Scan(0);
  82.                 if(key_value!=99)
  83.                 {
  84.                         BEEP=0;
  85.                         delay_ms(100);
  86.                         BEEP=1;       
  87.                 }
  88.                 if(key_value==13)        //确定
  89.                 {
  90.                         key_count = 0;
  91.                         port_flag = 0;
  92.                         money = price * weight;
  93.                         if(money>9999)
  94.                                 display4();
  95.                         else
  96.                                 write_decimal(0x8B,0x8E,money);
  97.                 }
  98.         }

  99. }
  100. void ADD(void)
  101. {
  102.                 error=0;
  103.                 if(money_flag ==1)
  104.                 {
  105.                         money_one = money;
  106.    
  107.                 }             
  108.                   price_set();
  109.     if(money_flag ==1)
  110.                 {
  111.                         all=money+money_one+all;       
  112.                 }
  113.                 else
  114.                 {
  115.                          all=money+all;
  116.                 }
  117.                        
  118.                 write_decimal(0x9B,0x9E,all);
  119.                 key_count = 0;
  120.                
  121. }
  122. void PEEL(void)
  123. {       
  124.                 if(peel_flag==1)
  125.                 {               
  126.                         last_weight = weight;
  127.                         peel_flag=2;                       
  128.                 }
  129.                 key_count = 0;
  130. }
  131. void DEL(void)
  132. {
  133.         all=0;
  134.         price = 0;
  135.         money_flag = 0;
  136.         peel_flag = 0;
  137.         key_count = 0;
  138.         write_com(0x93);
  139.         write_data(0x20);
  140.         write_data(0x20);
  141.         write_data(0x20);
  142.         write_data(0x20);
  143.         error=0;
  144.         write_num(0X93,price);
  145.         write_decimal(0x8B,0x8E,0);
  146.         write_decimal(0x9B,0x9E,0);
  147. }
  148. void Unit_price(void)
  149. {
  150.        
  151.         key_value = KEY_Scan(0);
  152.         if(key_value!=99)
  153.         {
  154.                 BEEP=0;
  155.                 delay_ms(100);
  156.                 BEEP=1;       
  157.         }
  158.         if(key_value==12)        //单价
  159.                 key_count=1;
  160.         if(key_value==13)        //确定
  161.                 key_count=0;
  162.         if(key_value==10&&weight<100)        //去皮
  163.         {
  164.                 key_count=2;
  165.                 peel_flag = 1;
  166.         }
  167.         if(key_value==11)//累加
  168.         {
  169.                 key_count = 3;
  170.                 money_flag++;
  171.         }
  172.   if(key_value==14)
  173.         {
  174.                 key_count=4;
  175.                 start_flag++;
  176.                 if(start_flag ==1)
  177.                 {
  178.                         start_value = adc_value;  
  179.                 }
  180.                 if((start_flag > 1)&&(weight<5))
  181.                 {
  182.                         start_value = adc_value;  
  183.                 }
  184.         }               
  185.                
  186.        
  187.         if(key_count==1)                //设置单价
  188.         {
  189.                 price_set();
  190.         }
  191.         else if(key_count==2)               
  192.         {
  193.                 PEEL();
  194.         }
  195.         else if(key_count==3)               
  196.         {
  197.                 ADD();
  198.         }
  199.         else if(key_count==4)
  200.         {
  201.                 DEL();
  202.         }
  203.         if(adc_value<740)
  204.         {
  205.                 if(peel_flag==2)
  206.                 {
  207.                         weight =(float)(((adc_value-start_value)/5.88025)- last_weight); //关系待测
  208.                 }
  209.                 else
  210.                 {
  211.                         weight = (float)(((adc_value-start_value)/5.88025));         //关系待测
  212.                 }
  213.                 write_decimal(0x83,0x86,weight);
  214.         }
  215.         else if(adc_value<1000)
  216.         {
  217.                 if(peel_flag==2)
  218.                 {
  219.                         weight =(float)(((adc_value-start_value)/5.84025)- last_weight); //关系待测
  220.                 }
  221.                 else
  222.                 {
  223.                         weight = (float)(((adc_value-start_value)/5.84025));         //关系待测
  224.                 }
  225.                 write_decimal(0x83,0x86,weight);
  226.         }
  227.         else if(adc_value<1300)
  228.         {
  229.                 if(peel_flag==2)
  230.                 {
  231.                         weight =(float)(((adc_value-start_value)/5.80025)- last_weight); //关系待测
  232.                 }
  233.                 else
  234.                 {
  235.                         weight = (float)(((adc_value-start_value)/5.80025));         //关系待测
  236.                 }
  237.                 write_decimal(0x83,0x86,weight);
  238.         }
  239.         else if(adc_value<1600)
  240.         {
  241.                 if(peel_flag==2)
  242.                 {
  243.                         weight =(float)(((adc_value-start_value)/5.76)- last_weight); //关系待测
  244.                 }
  245.                 else
  246.                 {
  247.                         weight = (float)(((adc_value-start_value)/5.76));         //关系待测
  248.                 }
  249.                 write_decimal(0x83,0x86,weight);
  250.         }
  251.         else if(adc_value<1784)
  252.         {
  253.                 if(peel_flag==2)
  254.                 {
  255.                         weight =(float)(((adc_value-start_value)/5.74)- last_weight); //关系待测
  256.                 }
  257.                 else
  258.                 {
  259.                         weight = (float)(((adc_value-start_value)/5.74));         //关系待测
  260.                 }
  261.                 write_decimal(0x83,0x86,weight);
  262.         }                                       
  263.         else if(adc_value<2025)                                                                                                                                                                                                                                                                               
  264.         {
  265.                 if(peel_flag==2)
  266.                 {
  267.                         weight =(float)(((adc_value-start_value)/5.70)- last_weight); //关系待测
  268.                 }
  269.                 else
  270.                 {
  271.                         weight = (float)(((adc_value-start_value)/5.70));         //关系待测
  272.                 }
  273.                 write_decimal(0x83,0x86,weight);
  274.         }
  275.         else if(adc_value<2350)                                                                                                                                                                                                                                                                                                
  276.         {
  277.                 if(peel_flag==2)
  278.                 {
  279.                         weight =(float)(((adc_value-start_value)/5.655)- last_weight); //关系待测
  280.                 }
  281.                

  282. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整代码下载:
电子秤 完结版.rar (299.95 KB, 下载次数: 173)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:187303 发表于 2017-4-24 20:11 | 只看该作者
前段时间我使用51搞定了这东西 这次看看使用STM32的效果 非常感谢
回复

使用道具 举报

板凳
ID:113433 发表于 2017-4-26 22:16 | 只看该作者
感謝分享
回复

使用道具 举报

地板
ID:199409 发表于 2017-5-16 11:26 | 只看该作者
谢谢分享!希望能解决问题
回复

使用道具 举报

5#
ID:69380 发表于 2017-8-22 16:49 | 只看该作者

谢谢分享!正要用到
回复

使用道具 举报

6#
ID:348594 发表于 2018-7-22 10:41 | 只看该作者
有没有PCB图
回复

使用道具 举报

7#
ID:46517 发表于 2018-7-28 11:21 | 只看该作者
先看看看怎么回事,
回复

使用道具 举报

8#
ID:483932 发表于 2019-3-9 12:04 | 只看该作者
为啥里面又没有程序,有没有仿真??
回复

使用道具 举报

9#
ID:777984 发表于 2020-6-16 19:20 | 只看该作者
有点看不懂怎么连
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表