|
去年學(xué)校電子設(shè)計(jì)大賽的題目:小型電子秤
所用器件:stm32f103zet6最小系統(tǒng)板 ,HX711,壓變片,按鍵,3.2寸顯示屏。
IDE:keil
單片機(jī)源程序如下:
- /************************************************************************************
- *功能:實(shí)現(xiàn)重物的稱量,去皮,最大承重5kg
- *所用器件:stm32f103zet6最小系統(tǒng)板,HX711芯片,壓變片,按鍵,蜂鳴器,野火3.2寸顯示屏,干電池供電。
- *時(shí)間: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;//計(jì)算價(jià)格的位數(shù)
- unsigned int money=0;//價(jià)格值
- unsigned char price_buffer[3]={0x00,0x00,0x00};//用于存儲(chǔ)價(jià)格的值。
- char disbuff1[100], disbuff2[100],disbuff3[100],disbuff4[100],disbuff5[100],disbuff6[100],disbuff7[100];//用于存儲(chǔ)重量,皮重,單價(jià),總價(jià)等數(shù)據(jù)。
- unsigned int z=0 ,z1,z2,z3,zz[3]={0x00,0x00,0x00};//用來(lái)存儲(chǔ)計(jì)算三次重物的值
- int main(void)
- {
-
- ILI9341_Init();
- HX711_Init();
- delay_init();
- LED_Init();
- BEEP_Init();
- KEY_Init();
- NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- uart_init(9600); //串口初始化為9600
- ILI9341_GramScan(5);
- LCD_SetFont(&Font16x24);//設(shè)置字體為8x16大小
- LCD_SetColors(BLUE ,WHITE);//設(shè)置字體的顏色為紅色,背景的顏色為白色
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH );//設(shè)置清屏,顯示全黑
- 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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- // 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 );//設(shè)置背景前景色
- 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); //打印所稱量重物的質(zhì)量(去除毛皮之后)
- sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- 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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- LCD_ClearLine(LINE(2)); //清除單行文字
- ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后顯示該字符串即可,其它變量也是這樣處理
- }
- if(key_num==12)//清除數(shù)據(jù)進(jìn)行二次測(cè)量
- {
- 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:");//清除單價(jià)信息
- ILI9341_DispStringLine_EN(LINE(6),"Total:");//清除總價(jià)信息
- }
- if(key_num==13)//計(jì)算總價(jià)
- {
- while(!KEY12)
-
- printf("\r\n 打印總價(jià):\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];//獲取輸入的價(jià)格
- }
- 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];//獲取輸入的價(jià)格
- }
- else money=price_buffer[0]*100+price_buffer[1]*10+price_buffer[2];
- printf("\r\n輸入總價(jià)為:%d\r\n",money);
- printf("\r\n重物=%d\r\n",Weight_Zhongwu);
- money=money*Weight_Zhongwu; //計(jì)算出總價(jià)
- sprintf(disbuff4,"Total: %d ",money);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- LCD_ClearLine(LINE(6)); //清除單行文字
- ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后顯示該字符串即可,其它變量也是這樣處理
- }
- if(key_num>=1&&key_num<=10)//當(dāng)輸入的是數(shù)字時(shí),最多能輸入三位的數(shù)字
- {
- while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
- printf("\r\n 輸入的數(shù)字是=%d\r\n ",key_num);
- price_buffer[price_count]=key_num-1;
- price_count++;// 1.2.3表輸入的順序,前中后表位置
-
-
- sprintf(disbuff5," %d ",price_buffer[2]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
- sprintf(disbuff6," %d ",price_buffer[1]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
- sprintf(disbuff7," %d ",price_buffer[0]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- ILI9341_DispString_EN ( 205 ,96,disbuff7);//后1
-
- // sprintf(disbuff3,"Unit: %d ",price_buffer[0]+price_buffer[1]+price_buffer[2]+price_buffer[3]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- // 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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
- // 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;
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
電子秤程序.7z
(204.09 KB, 下載次數(shù): 309)
2019-1-14 03:44 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|