西湖区住房和城市建设局网站,学做美食去哪个网站好,石家庄搭建公司,中国工程建设领域网站一、系统方案 1、当电子称开机时#xff0c;单片机会进入一系列初始化#xff0c;进入1602显示模式设定#xff0c;如开关显示、光标有无设置、光标闪烁设置#xff0c;定时器初始化#xff0c;进入定时器模式#xff0c;如初始值赋值。之后液晶会显示Welcome To Use Ele…一、系统方案 1、当电子称开机时单片机会进入一系列初始化进入1602显示模式设定如开关显示、光标有无设置、光标闪烁设置定时器初始化进入定时器模式如初始值赋值。之后液晶会显示Welcome To Use Electronic Scale这是一个欢迎使用界面: 2、此电子秤是开机检测托盘重量并将托盘重量清零即电子秤每次开机后检测托盘重量并程序中自动将托盘重量保存在一个变量中称量过程中每次都将获得的重量减去托盘重量而得到所要称量物体的真正的重量然后单片机进入等待称重界面WE代表货物重量PR代表货物单价MONEY代表货物总价。 3、在支架上放上待称重物体时HX711会采集称重传感器的模量量并将这个模拟量转化数字量发送给单片机单片机通过计算将重量显示在1602上面由于仿真里面没有真实的货物就用两个按键模量重量连接HX711的2个按键就是模拟重量加减一个按键按下货物重量加另外一个按键货物重量就会减。 4、在支架上放上待称重物体时通过矩阵键盘设置好单价单片机会根据重量乘以单价计算出总价。如果单价设置有错按清除按键重新设置。如果重量有错误可以按去皮按键清除校准加校准减按键可以对货物重量进行微调。 5、在支架上放上待称重物体总量超过10KG时蜂鸣器是不停的报警LED闪烁1602上面显示WE-.—,直到重量少于10KG蜂鸣器停止报警LED停止闪烁。 二、硬件设计 原理图如下
三、单片机软件设计 1、首先是系统初始化 Init_LCD1602(); //初始化LCD1602 EA 0; Data_Init(); Timer0_Init(); //初中始化完成开断 EA 1;
// Get_Maopi(); LCD1602_write_com(0x80); //指针设置 LCD1602_write_word( Welcome To Use ); // LCD1602_write_com(0x800x40); //指针设置 LCD1602_write_word(“Wlectronic Scale”); // Delay_ms(2000); Get_Maopi(); LCD1602_write_com(0x80); //指针设置 LCD1602_write_word(“WE:0.000 PR:00.0”); LCD1602_write_com(0x800x40); //指针设置 LCD1602_write_word(MONEY: 0.00 ); Display_Price(); // Get_Maopi(); //称毛皮重量 2、液晶显示程序 //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void LCD1602_delay_ms(unsigned int n) { unsigned int i,j; for(i0;in;i) for(j0;j123;j); }
//**************************************************** //写指令 //**************************************************** void LCD1602_write_com(unsigned char com) { LCD1602_RS 0; LCD1602_delay_ms(1); LCD1602_EN 1; LCD1602_PORT com; LCD1602_delay_ms(1); LCD1602_EN 0; }
//**************************************************** //写数据 //**************************************************** void LCD1602_write_data(unsigned char dat) { LCD1602_RS 1; LCD1602_delay_ms(1); LCD1602_PORT dat; LCD1602_EN 1; LCD1602_delay_ms(1); LCD1602_EN 0; } 3、按键程序 unsigned char Getkeyboard(void) { unsigned char number 0; unsigned char i;
//行输入低电平
ROW1ROW2ROW3ROW40;
//如果列输出不全为高则说明有键按下
if ((COL1!1)||(COL2!1)||(COL3!1)||(COL4!1))
{//输入0111ROW10;ROW2ROW3ROW41;for (i0;i20;i);if (COL10) return 1; // 7else if (COL20) return 2; // 8else if (COL30) return 3; // 9else if (COL40) return 10; // 10//输入1011ROW20;ROW1ROW3ROW41;for (i0;i20;i);if (COL10) return 4; //4else if (COL20) return 5; // 5else if (COL30) return 6; // 6else if (COL40) return 11; // 11//输入1101ROW30;ROW1ROW2ROW41;for (i0;i20;i);if (COL10) return 7; //1else if (COL20) return 8; // 2else if (COL30) return 9; // 3else if (COL40) return 12; // 12//输入0111ROW40;ROW1ROW2ROW31;for (i0;i20;i);if (COL10) return 14;else if (COL20) return 0;else if (COL30) return 15;else if (COL40) return 13;//没有检测到列低电平return 99;
}
return 99;}
4、核心算法程序 //**************************************************** //读取HX711 //**************************************************** unsigned long HX711_Read(void) //增益128 { unsigned long count; unsigned char i; HX711_DOUT1; Delay__hx711_us(); HX711_SCK0; count0; while(HX711_DOUT); for(i0;i24;i) { HX711_SCK1; countcount1; HX711_SCK0; if(HX711_DOUT) count; } HX711_SCK1; countcount^0x800000;//第25个脉冲下降沿来时转换数据 Delay__hx711_us(); HX711_SCK0; return(count); }
四、proteus仿真设计 Proteus软件是一款应用比较广泛的工具它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况这样就可以通过软件仿真来验证我们设计的方案有没有问题如果有问题可以重新选择器件连接器件直到达到我们设定的目的避免我们搭建实物的时候如果当初选择的方案有问题我们器件都已经焊接好了再去卸载下去再去焊接新的方案的器件测试这样会浪费人力和物力也给开发者带来一定困惑Proteus仿真软件就很好的解决这个问题我们在设计之初就使用该软件进行模拟仿真测试选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸焊接实物调试最终完成本设计的作品。