找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HX712 电子秤程序

[复制链接]
跳转到指定楼层
楼主
ID:260750 发表于 2017-12-12 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "ATC12C5A60S2.h"
#include <intrins.h>

sbit ADDO = P4^2;
sbit ADSK = P4^3;
                                                               

void delayms(char ms);
void send_char(char txd);
void send_Achar(char *string);
void get_weight();
void init();

long a,weight;
char c[5],a1,a2,a3;
char tab[]="0123456789";
long ReadCount(void);

main()
{               
        delayms(500);
        init();
        while(1)
        {
        get_weight();         
    }
}


void init()
{
  TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
        TH1 = 0xFD;                                // 波特率9600
        TL1 = 0xFD;
        SCON = 0x50;                        // 设定串行口工作方式
        PCON &= 0xef;                        // 波特率不倍增       
        TR1 = 1;                                // 启动定时器1
        IE = 0x0;                                //禁止任何中断
}


void send_char(char txd)
// 传送一个字符
{
        SBUF = txd;                                                                                                                                                                                                          
        while(!TI);                                // 等特数据传送
        TI = 0;                                        // 清除数据传送标志
}

/**********************发送一个字符串******************************/
void send_Achar(char *string)
{
  while(*string!='\0')
   {
    send_char(*string);
    string++;
   }
}
void delayms(char ms)           // 延时子程序

{                                               
        char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}

long ReadCount(void)
{
   long Count;
   char i;
   ADSK=0; //使能AD(PD_SCK 置低)
   Count=0;
   while(ADDO); //AD转换未结束则等待,否则开始读取
   for (i=0;i<24;i++)
   {
                 ADSK=1; //PD_SCK 置高(发送脉冲)
                 Count=Count<<1; //下降沿来时变量Count左移一位,右侧补零
                 ADSK=0; //PD_SCK 置低
                 if(ADDO) Count++;                                                                                                                                                  
   }
    ADSK=1;           //第25个脉冲到来
    _nop_();  //延长一个机器周期
    ADSK=0;           //第25个脉冲结束
   return(Count);
}

void get_weight()   //获取被测物体重量
{
   long count=0;
   long sum=0;
   for (count=0;count<5;count++)                                                                                  
        {
                a=ReadCount();
                a=a>>8;
                sum+=a;
        }
        a=sum/5;
//        a1=a&0xff;//a低8位赋值给a1
//        a2=a>>8;//a右移8位后再把此时的a的低八位赋值给a2
//        send_char(a2); //串口输出a2
//        send_char(a1);//串口输出a1
//        send_char(0xab);//串口输出AB  
                         
                weight=(long)((float)(a-791)*0.0378);//重量转换函数,传感器型号不同此函数要适当修改               
                c[0] = tab[weight/10000];
                c[1] = tab[weight%10000/1000];
                c[2] = tab[weight%1000/100];
                c[3] = tab[weight%100/10];
                c[4] = tab[weight%10];
        //                c[0] = tab[a/10000];
        //                c[1] = tab[a%10000/1000];
        //                c[2] = tab[a%1000/100];
        //                c[3] = tab[a%100/10];
        //                c[4] = tab[a%10];
                if(c[0]==0x30)
                {
                        send_char(0x20);
                }
                else
                {
                        send_char(c[0]);
                }
                if((c[1]==0x30)&&(c[0]==0x30))
                {
                        send_char(0x20);
                }
                else
                {
                        send_char(c[1]);
                }               
                if((c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
                {
                        send_char(0x20);
                }
                else
                {
                        send_char(c[2]);
                }
                if((c[3]==0x30)&&(c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
                {
                        send_char(0x20);
                }
                else
                {
                        send_char(c[3]);
                }
                send_char(c[4]);                                                                                                               
                send_char(0x20);                                                                                                               
                send_char(0x67);
                send_Achar("\r\n");
}         
/************************************************/
/*  由于称重传感器线性度参数的不同,而对获得的重量数据处理,
此处可能会根据不同称重传感器,程序的代码会有所不同      */
/************************************************/


          






10kghx711完整程序C语言.rar

103.23 KB, 下载次数: 48, 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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