去年学校电子设计大赛的题目:小型电子秤
所用器件:stm32f103zet6最小系统板 ,HX711,压变片,按键,3.2寸显示屏。
IDE:keil
单片机源程序如下:
- /************************************************************************************
- *功能:实现重物的称量,去皮,最大承重5kg
- *所用器件:stm32f103zet6最小系统板,HX711芯片,压变片,按键,蜂鸣器,野火3.2寸显示屏,干电池供电。
- *时间:18.6.5
- *************************************************************************************/
- //#include "stm32f10x.h"
- #include "bsp_ili9341_lcd.h"
- #include "delay.h"
- #include "HX711.h"
- #include "usart.h"
- #include "beep.h"
- #include "led.h"
- #include "key.h"
- void Saomiao(void);
-
- unsigned int price_count=0;//计算价格的位数
- unsigned int money=0;//价格值
- unsigned char price_buffer[3]={0x00,0x00,0x00};//用于存储价格的值。
- char disbuff1[100], disbuff2[100],disbuff3[100],disbuff4[100],disbuff5[100],disbuff6[100],disbuff7[100];//用于存储重量,皮重,单价,总价等数据。
- unsigned int z=0 ,z1,z2,z3,zz[3]={0x00,0x00,0x00};//用来存储计算三次重物的值
- int main(void)
- {
-
- ILI9341_Init();
- HX711_Init();
- delay_init();
- LED_Init();
- BEEP_Init();
- KEY_Init();
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为9600
- ILI9341_GramScan(5);
- LCD_SetFont(&Font16x24);//设置字体为8x16大小
- LCD_SetColors(BLUE ,WHITE);//设置字体的颜色为红色,背景的颜色为白色
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH );//设置清屏,显示全黑
- Get_Fur(); //称毛皮重量
- printf("\r\n 毛皮重量的大小为=%d g\r\n:",Weight_Fur);//打印毛皮的重量
-
- //delay_ms(1000);
- delay_ms(1000);
- Get_Fur(); //重新获取毛皮重量
- printf("\r\n 重新获取的毛皮重量的大小为=%d g\r\n:",Weight_Fur);//重新打印毛皮的重量
-
- // sprintf(disbuff1,"Fur: %d ",Weight_Fur);//使用c标准库把变量转化成字符串
- // LCD_ClearLine(LINE(1)); //清除单行文字
- // ILI9341_DispStringLine_EN(LINE(1),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
- ILI9341_DispStringLine_EN(LINE(0),"Weight:");
- ILI9341_DispStringLine_EN(LINE(2),"Gross:");
- ILI9341_DispStringLine_EN(LINE(4),"Unit:");
- ILI9341_DispStringLine_EN(LINE(6),"Total:");
- LED_ON ;
- BEEP_ON ;
- delay_ms(500);
- LED_OFF;
- BEEP_OFF;
- //LCD_SetColors(WHITE ,BLUE );//设置背景前景色
- while(1)
- {
- // zz[z]=Get_Zhongwu();
- // z++;
- // if(z==2)
- // {
- // z=0;
- // Weight_Zhongwu = (zz[0]+zz[1]+zz[2])/3;
- // }
- // z1=Get_Zhongwu();
- // //delay_ms(100);
- // z2=Get_Zhongwu();
- // //delay_ms(100);
- // z3=Get_Zhongwu();
- // //delay_ms(100);
- // Weight_Zhongwu=(z1+z2+z3)/3;
- Get_Zhongwu ();
- printf("净重量 = %.1f g\r\n",Weight_Zhongwu); //打印所称量重物的质量(去除毛皮之后)
- sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c标准库把变量转化成字符串
- LCD_ClearLine(LINE(0)); //清除单行文字
- ILI9341_DispStringLine_EN(LINE(0),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
- //delay_ms(1000);
- Saomiao();
- }
- }
- void Saomiao(void)
- {
- u8 key_num;
- key_num=Key_Scan(1);
- if(key_num)
- {
- if(key_num==11)
- {
-
- while(!KEY10)
- Get_Fur();//获得毛皮的重量
-
- sprintf(disbuff1,"Gross: %.1f ",Weight_Zhongwu );//使用c标准库把变量转化成字符串
- LCD_ClearLine(LINE(2)); //清除单行文字
- ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
- }
- if(key_num==12)//清除数据进行二次测量
- {
- while(!KEY11)
- price_count =0;
- price_buffer[0]=0;
- price_buffer[1]=0;
- price_buffer[2]=0;
- LCD_ClearLine(LINE(2)); //清除单行文字
- LCD_ClearLine(LINE(4)); //清除单行文字
- LCD_ClearLine(LINE(6)); //清除单行文字
- ILI9341_DispStringLine_EN(LINE(2),"Gross:");
- ILI9341_DispStringLine_EN(LINE(4),"Unit:");//清除单价信息
- ILI9341_DispStringLine_EN(LINE(6),"Total:");//清除总价信息
- }
- if(key_num==13)//计算总价
- {
- while(!KEY12)
-
- printf("\r\n 打印总价:\r\n");
- printf("\r\n 第一位=%d\r\n",price_buffer[0]);
- printf("\r\n 第二位=%d\r\n",price_buffer[1]);
- printf("\r\n 第三位=%d\r\n",price_buffer[2]);
- if(price_buffer[2]==0)
- {
- if(price_count ==2)
- {
- money=price_buffer[0]*10+price_buffer[1];//获取输入的价格
- }
- if(price_count==3)
- {
- money = price_buffer[0]*100;
- }
- if(price_count ==1)
- {
- money=price_buffer[0];
- }
- }
- else if(price_buffer[2]==0)
- {
- money=price_buffer[0]*10+price_buffer[1];//获取输入的价格
- }
- else money=price_buffer[0]*100+price_buffer[1]*10+price_buffer[2];
- printf("\r\n输入总价为:%d\r\n",money);
- printf("\r\n重物=%d\r\n",Weight_Zhongwu);
- money=money*Weight_Zhongwu; //计算出总价
- sprintf(disbuff4,"Total: %d ",money);//使用c标准库把变量转化成字符串
- LCD_ClearLine(LINE(6)); //清除单行文字
- ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后显示该字符串即可,其它变量也是这样处理
- }
- if(key_num>=1&&key_num<=10)//当输入的是数字时,最多能输入三位的数字
- {
- while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
- printf("\r\n 输入的数字是=%d\r\n ",key_num);
- price_buffer[price_count]=key_num-1;
- price_count++;// 1.2.3表输入的顺序,前中后表位置
-
-
- sprintf(disbuff5," %d ",price_buffer[2]);//使用c标准库把变量转化成字符串
- ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
- sprintf(disbuff6," %d ",price_buffer[1]);//使用c标准库把变量转化成字符串
- ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
- sprintf(disbuff7," %d ",price_buffer[0]);//使用c标准库把变量转化成字符串
- ILI9341_DispString_EN ( 205 ,96,disbuff7);//后1
-
- // sprintf(disbuff3,"Unit: %d ",price_buffer[0]+price_buffer[1]+price_buffer[2]+price_buffer[3]);//使用c标准库把变量转化成字符串
- // LCD_ClearLine(LINE(4)); //清除单行文字3
- // ILI9341_DispStringLine_EN(LINE(4),disbuff3);//然后显示该字符串即可,其它变量也是这样处理
- if(price_count==2)
- {
- ILI9341_DispString_EN ( 150 ,96,disbuff7);//中
- ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
- ILI9341_DispString_EN ( 205 ,96,disbuff6);//后1
- // sprintf(disbuff3,"Unit: %d ",price_buffer[0]);//使用c标准库把变量转化成字符串
- // LCD_ClearLine(LINE(3)); //清除单行文字
- // ILI9341_DispStringLine_EN(LINE(3),disbuff3);//然后显示该字符串即可,其它变量也是这样处理
- }
- if(price_count==3)
- {
- ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
- ILI9341_DispString_EN ( 95 ,96,disbuff7);//前3
- ILI9341_DispString_EN ( 205 ,96,disbuff5);//后1
- price_count=3;
- }
- }
- }
- }
复制代码
所有资料51hei提供下载:
电子秤程序.7z
(204.09 KB, 下载次数: 309)
|