#ifndef _shizhong_h_
#define _shizhong_h_
#include <reg51.H>
#include <key.H>
#include<hx711.h>
#include <lcd_1602.H>
#define uint unsigned int
#define uchar unsigned char
sbit buzz=P1^0;
sbit clock=P2^1;
uchar clock_flag;
uint clock_count1;
uchar clock_count;
///////////////////////////////////////////////////////////////////////
//
电子秤
uchar idata pricetable[3]={0,0,0};
int weight;
uint price,money;
uint temp,qi_weight;
bit chaozhong_flag;
/////////////////////////////////////////////////////////////////////////
void Delay10ms(void) //延时10ms
{
uint i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
void init() //
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0; //定时50ms 11.0592
TH1=0x3c;
TL1=0xb0; //定时50ms 11.0592
TR0=1;
TR1=1;
ET0=1;
ET1=1;
EA=1;
}
void t0() interrupt 1 using 0
{
TH0=0x3c;
TL0=0xb0; //定时50ms
if((weight>5000)&&(chaozhong_flag==1))
{
clock=0;
}
else
{chaozhong_flag=0;TR0=0;clock=1;}
}
void t1() interrupt 3
{
TH1=0x3c;
TL1=0xb0; //定时50ms //
主要是这不明白
if(clock_flag==1)
{
clock_count++;
clock_count1++;
if(clock_count1==6000)
{
clock_flag=0;
clock_count1=0;
clock=1;
TR1=0;
}
if(clock_count<4)
{
clock=0;
}
else if(clock_count<11)
{
clock=1;
}
else if(clock_count<13)
{
clock=0;
}
else if(clock_count<16)
{
clock=1;
}
else if(clock_count<18)
{
clock=0;
}
else if(clock_count<27)
{
clock=1;
}
if(clock_count==27)
{clock_count=0;}
}
}
#endif
能不能详细一点,HX711用的是外部时钟,请问时钟函数中sbit clock=P2^1;这个与单片机的I/O口有关么?还有就是,我查资料说这个是HX711输入时钟脉冲用来转换采集的信号:
当数据输出管脚DOUT 为高电平时,表明
A/D 转换器还未准备好输出数据,此时串口时
钟输入信号PD_SCK 应为低电平。当DOUT 从高
电平变低电平后,PD_SCK 应输入25 至27 个不
等的时钟脉冲(图二)。其中第一个时钟脉冲
的上升沿将读出输出24 位数据的最高位
(MSB),直至第24 个时钟脉冲完成,24 位输
出数据从最高位至最低位逐位输出完成。第25
至27 个时钟脉冲用来选择下一次A/D 转换的
输入通道和增益,
PD_SCK 脉冲数输入通道 增益
25 A 128
26 B 32
27 A 64
表三 输入通道和增益选择
PD_SCK 的输入时钟脉冲数不应少于25 或多
于27,否则会造成串口通讯错误。
当A/D 转换器的输入通道或增益改变时,
A/D 转换器需要4 个数据输出周期才能稳定。
DOUT 在4 个数据输出周期后才会从高电平变低电平,输出有效数据
我想问的是11,13,16这几行怎么确定这几个数字,有什么依据?
一周热门 更多>