一. 系统概述
该系统基于STM32单片机进行主控,通过按键来设定单价,并利用压力传感器进行重量测量。系统会根据实时的重量和设定的单价来计算总价。每次按下按键时,蜂鸣器会响起,以防止误操作。
二. 仿真概述
- 在仿真启动后,可以使用前8个按键来设置单价。显示屏将显示相应按键的序号。按键9用于确认设置,按键10用于清零。如果需要重新输入单价,按下清零按键即可。
- 设定单价为4后,可以通过滑动变阻器调整压力传感器的读数。
- 在完成单价和重量设置后,按下确认按键即可显示总价。如果需要重新输入单价,请按下清零按键进行重置。
三.课程设计
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "MPU6050.h"
#include "MyI2C.h"
#include "Key.h"
#include "LED.h"
uint8_t ad;
uint8_t analog;
uint8_t KeyNum;
uint8_t shu=0;
uint8_t yuan;
uint8_t danjia;
int main(void)
{
/*模块初始化*/
OLED_Init(); //OLED初始化
MyI2C_Init();
MatrixKey_Init();
LED_Init();
OLED_ShowString(1, 1,"weight: . kg");
OLED_ShowString(2, 1,"danjian:");
OLED_ShowString(3, 1, "yuan: . ");
OLED_ShowString(4, 1, "KeyNum:");
while (1)
{
ad = PCF8591_ADin(0x01);
analog=(int)ad/255.0*250;
OLED_ShowNum(1, 8, analog/10, 1);
OLED_ShowNum(1, 10, analog%10, 1);
KeyNum = MatrixKey_GetValue();
OLED_ShowNum(4, 9, KeyNum, 3);
if(KeyNum>0 && KeyNum<=9)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8 );
Delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_8);
switch(shu)
{
case 0:
{
danjia = KeyNum;
shu++;
}break;
case 2:
{
danjia *= 10;
danjia +=KeyNum ;
shu++;
}break;
case 4:
{
danjia *= 10;
danjia +=KeyNum ;
shu++;
}break;
}
//shu++;
}
if(KeyNum==10)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8 );
Delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOB, GPIO_Pin_12 );
yuan =danjia*analog;
}
if(KeyNum==11)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8 );
Delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOB, GPIO_Pin_12 );
danjia=0;
yuan=0;
shu = 0;
}
OLED_ShowNum(2, 9, danjia, 4);
OLED_ShowNum(3, 6, yuan/10, 2);
OLED_ShowNum(3, 9, yuan%10, 1);
}
}
24-32f-58