一.系统概述
系统使用STM32单片机进行主控,系统内通过按键进行单价的设定,使用压力传感器进行称重,根据实时重量和单价计算总价,另外每次按下按键时都会通过蜂鸣器进行响应,防止虚按。
二.仿真概述
1.进入系统启动仿真,此时按下前8个按键就能直接进行单价的设定,显示屏会显示按下按键的序号,按键9是确认按键,按键10是清零按键,确定单价后按下清零按键就能重新输入。
2. 此时设置单价为4,可以对压力传感器的滑动变阻器进行调节。
3. 设定好单价和重量后按下确认按键就会显示总价,此时按下清零按键就需要重新输入单价
三.课程设计
#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);
}
}