找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2107|回复: 2
上一主题 下一主题
收起左侧

12864液晶显示的HX711电子秤单片机源码

[复制链接]
跳转到指定楼层
楼主
ID:391155 发表于 2018-8-29 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HX711的电子秤,12864液晶显示

单片机源程序如下:

  1. #include"reg51.h"
  2. /****************************************************************
  3. 环宇电子秤系统  stc89C52单片机控制          
  4. 12864 LCD显示    制作日期:2015/06/25
  5. *****************************************************************/
  6. /****************************************************************
  7.                                    LCD_12864 端口定义
  8. *****************************************************************/
  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. unsigned char CMDAddress,jian_ma,flag,jiao_flag,set_flag,price_flag;
  12. unsigned int   heavy,price=1,money,alarm=500,jiao_zhun=1010;              //相关变量定义   ,上限报警值初始值为500克
  13. unsigned char menu,jia,jian,confr,fu,menu_flag,exit;
  14. long data_num,data_temp,data_flash;
  15.         unsigned char f=0;
  16. sbit IRIN = P3^3;         //红外接收器数据线
  17. sbit ADDO=P1^0;              //ad采集数据接口
  18. sbit ADSK= P1^1;           //ad采集时钟接口
  19. sbit RS=P2^3;
  20. sbit RW=P2^4;                   //液晶接口定义
  21. sbit EN=P2^5;
  22. //sbit rst=P2^7;
  23. sbit bell=P3^6;    //蜂鸣器定义
  24. sbit key=P2^7;    //按键定义
  25.    #define Imax 14000    //此处为晶振为12时的取值, 红外解码
  26.     #define Imin 8000    //如用其它频率的晶振时,
  27.     #define Inum1 1450    //要改变相应的取值。
  28.     #define Inum2 700
  29.     #define Inum3 3000
  30.           unsigned char Im[4]={0x00,0x00,0x00,0x00};
  31.    
  32.     unsigned long m,Tc;
  33. /****************************************************************

  34. *****************************************************************/
  35. unsigned char code table1[]="★★欢迎光临★★环宇电子称系统  ";                        //液晶显示内容
  36.                                                                         //如果需要其他显示内容只需要修改汉子内容
  37.                                                                                                                                                 //但是汉子数量要一致,重新编译即可
  38. void  read_count()        //ad采集函数
  39. {
  40.   unsigned long count;
  41.   unsigned char i;
  42.   ADSK=0;//使能ad
  43.   count=0;
  44.   while(ADDO);  //等待ad转换结束
  45.   for(i=0;i<24;i++)
  46.   {
  47.     ADSK=1; //PD_SCK置高,发送脉冲
  48.         count=count<<1;
  49. //        delayp();
  50.         ADSK=0;   //pd_sck置低
  51.         if(ADDO)count++;
  52.   }
  53.   ADSK=1;
  54.   count=count^0x800000;        //第25个脉冲下降沿来时,转换数据
  55. // delayp();
  56.   ADSK=0;
  57. data_num=count;   // 读出来的数据赋值给变量data_num
  58. }
  59. void delay_ms(unsigned char x)    //x*0.14MS
  60. {
  61. unsigned char i;
  62.   while(x--)
  63. {
  64.   for (i = 0; i<13; i++) {}
  65. }
  66. }

  67. void delay(uint t)                //延时函数
  68. {         
  69.         uint x,y;
  70.         for(x=t;x>0;x--)
  71.         for(y=12;y>0;y--);
  72. }




  73. void display(uint Temp,uint k1,uint k2 )                 // 显示重量,单价,金额
  74. {

  75.         uint t1,t2,t3,t4        ;                  //,t0,t1,t2
  76.         if(!menu_flag)                       //没有按键按下
  77.         {                 
  78.                                 t1=Temp/1000%10;
  79.                                 t2=Temp/100%10;
  80.                                 t3=Temp/10%10;
  81.                                 t4=Temp%10;          
  82.                                 write_cmd(0x93);
  83.                                 if(t1)                           //千位的显示
  84.                                 {
  85.                                 write_date(0x30+t1);
  86.                                 write_date(0x30+t2);
  87.                                 write_date(0x30+t3);
  88.                                 write_date(0x30+t4);
  89.                                 }



  90. void sao_miao()//按键扫描函数
  91. {
  92.      if(key==0)
  93.          {
  94.             delay(10);
  95.            if(!key)
  96.              {
  97.                      while(!key);
  98.                      read_count();
  99.                          delay(500);
  100.                          read_count();
  101.                          data_temp=data_num;        //重新读取ad采集值,进入清零功能
  102.             }
  103.          }
  104. }


  105. /****************************************************************
  106.                                                 主函数
  107. *****************************************************************/

  108. void main()
  109. {
  110.     uchar i=0;
  111.         IRIN=1;                    //I/O口初始化
  112.               m=0;
  113.     f=0;
  114.        
  115.     IT1=1;          
  116.     EX1=1;           //开外部中断

  117.     TMOD=0x11;   //定时器方式
  118.     TH0=0;
  119.         TL0=0;
  120.     TR0=1;         //开定时器
  121.         EA=1;         //开总中断
  122.         P0=0;
  123.         delay(50);
  124.         init();                                                    // 初始化
  125.         delay(100);
  126.        
  127.         write_word(table1);                         // 进入欢迎界面
  128.       for(i=10;i>0;i--)
  129.             delay(3000);          // 每一屏显示秒钟
  130.         write_cmd(0x00);                         // 清屏

  131.          show() ;              //显示初始化
  132.          read_count();                   //ad采集函数
  133.          delay(3000);
  134.           read_count();                   //ad采集函数       
  135.            delay(3000);
  136.             read_count();                   //ad采集函数
  137.                    data_temp=data_num;  //采集数据赋值给临时变量 data_temp
  138.         while(1)
  139.         {
  140.            read_count();
  141.           if(data_num>=data_temp)                          // 比较采集出来的数值与临时变量
  142.           data_num=(data_num-data_temp);
  143.           else
  144.           {
  145.           data_num=(data_temp-data_num);
  146.           if(data_num>=500)
  147.            {  
  148.               fu=1;
  149.                  }
  150.                  else
  151.                  {
  152.                  fu=0;
  153.                  data_num=0;
  154.                
  155.                  }
  156.        

  157.           }
  158.                
  159.                
  160.                
  161.          heavy=(unsigned int)(data_num/jiao_zhun);//1677;         //计算重量
  162.             delay(500);
  163.                
  164.                
  165.                
  166.                 data_flash=heavy*price;                 // 总价=单价*重量
  167.                 money=(unsigned int)data_flash;
  168.                 if(exit)        //如果进行了设置
  169.                 {
  170.                    exit=0;
  171.                    show() ;              //显示刷新
  172.                 }
  173.           display(heavy,price,money);        //计算完成后送到液晶显示
  174.           delay(500);
  175.           chu_li();        //扫描函数
  176.            if(heavy>alarm)                   //重量超过上限报警
  177.            {
  178.               beep();
  179.            }
  180.            delay(500);
  181.      }
  182. }




  183. //外部中断解码程序
  184.   void intersvr1(void) interrupt 2 using 1
  185. {
  186.     Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
  187.     TH0=0;
  188.     TL0=0;              //定时中断重新置零
  189. if((Tc>Imin)&&(Tc<Imax))        //定时器判断读取的启始码正确
  190.       {
  191.         m=0;
  192.         f=1;
  193.         return;
  194.       }       //找到启始码

  195.    if(f==1)
  196.       {
  197.         if(Tc>Inum1&&Tc<Inum3)
  198.     {
  199.    Im[m/8]=Im[m/8]>>1|0x80; m++;
  200.        }
  201.       if(Tc>Inum2&&Tc<Inum1)
  202. ……………………

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

所有资料51hei提供下载:
电子称12864显示.rar (65.64 KB, 下载次数: 48)


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

使用道具 举报

沙发
ID:1 发表于 2018-8-29 17:28 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:348335 发表于 2018-11-27 10:51 | 只看该作者
一堆错误
回复

使用道具 举报

地板
ID:483932 发表于 2019-3-9 12:11
您这个程序咋全都是错误啊

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

本版积分规则

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

Powered by 单片机教程网

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