自己花了五六天做的一个电子秤,没有包装有点丑,它能精确到1g,超5KG报警,能设置单价幷显示出总价,A键为去皮键,B键为单价清零键。
部分代码如下:
- #include<reg52.h>
- #include<intrins.h>
- #define KV P1
- #define LCD P0
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- sbit HX711_SDA=P2^0; //HX711转换数据端
- sbit HX711_SCK=P2^1; //HX711时钟端
- sbit LCD1602_E=P2^4; //LCD1602液晶使能端
- sbit LCD1602_RS=P2^5; //LCD1602液晶命令数据端
- sbit LCD1602_RW=P2^6; //LCD1602液晶数据读写端
- sbit buzzer=P2^7; //蜂鸣器管脚
- ulong weight;
- ulong qupi=0;
- volatile uint keyvalue;
- volatile uint price=0;
- volatile ulong money=0;
- uchar W=0; //检测标志
- uchar temp1;
- uchar temp2;
- uchar Moni=0; //检测标志
- uchar dat[4]; //缓存数据数组
- uchar code desk[]="W:0.000kg P:00.0Money:000.0 "; //显示内容初始化
- void delay_us() //延时us
- {
- _nop_();
- _nop_();
- }
- void delay_ms(uint k) //延时ms
- {
- uint i,j;
- for(i=k;i>0;i--)
- for(j=110;j>0;j--);
- }
- unsigned long Read_HX711(void)
- {
- unsigned long Count;
- unsigned char i;
- HX711_SDA=1;
- delay_us();
- HX711_SCK=0; //使能AD(PD_SCL 置低)
- Count=0;
- while(HX711_SDA); //AD转换未结束则等待,否则开始读取
- for (i = 0; i < 24; i++)
- {
- HX711_SCK = 1; //PD_SCL 置高(发送脉冲)
- Count=Count<<1; //下降沿来时变量Count左移一位,右侧补零
- HX711_SCK =0; //PD_SCL 置低
- if(HX711_SDA)
- Count++;
- }
- HX711_SCK = 1;
- Count=Count^0x800000;//第25个脉冲下降沿来时,转换数据
- delay_us();
- HX711_SCK = 0;
- return (Count);
- }
复制代码
下载:
电子秤(1602).zip
(29.7 KB, 下载次数: 265)
|