标题:
2019电赛f题获奖代码,stm32战舰开发板编写
[打印本页]
作者:
1248849442
时间:
2020-3-24 16:31
标题:
2019电赛f题获奖代码,stm32战舰开发板编写
单片机源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "beep.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "text.h"
#include "2214.h"
#include "myiic.h"
#define count_t 35 //纸张上限
u8 w=0,K;
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED初始化
KEY_Init(); //初始化按键
LCD_Init(); //初始化LCD
font_init(); //汉字初始化
LCD_Clear(WHITE); //屏幕清空
BEEP_Init(); //蜂鸣器初始化
IIC_Init(); //IIC通讯
InitMultiFDC2214(); //多通道设置
POINT_COLOR=BLUE;
Show_Str(120,30,240,24,"2019年 电子设计大赛",24,0);
Show_Str(140,98,200,24,"纸张计数显示装置",24,0);
POINT_COLOR=BLACK;
LCD_DrawRectangle(20,70,460,150); //画表格
LCD_DrawRectangle(20,70,460,350);
LCD_DrawRectangle(20,150,240,350);
Show_Str(30,180,200,24,"通道1:",24,0);
Show_Str(30,240,200,24,"通道2:",24,0);
Show_Str(30,300,200,24,"当前模式为:",24,0);
Show_Str(250,180,200,24,"极板状态:",24,0);
Show_Str(250,240,200,24,"纸张数:",24,0);
Show_Str(250,300,200,24,"总重:",24,0);
POINT_COLOR=RED;
LCD_ShowxNum(355,300,0,1,24,0); //默认纸重
Show_Str(170,300,200,24,"待机",24,0);
POINT_COLOR=BLACK;
Show_Str(90,380,300,24,"学习+检测",24,0); //KEY0
Show_Str(315,380,300,24,"纸重检测",24,0); //KEY1
Show_Str(90,430,300,24,"进入学习",24,0); //KEY2
Show_Str(315,430,300,24,"纸张规格",24,0); //KEY2
POINT_COLOR=RED;
Show_Str(30,380,300,24,"KEY0:",24,0); //学习模式
Show_Str(250,380,300,24,"KEY1:",24,0); //重量检测模式
Show_Str(30,430,300,24,"KEY2:",24,0);
Show_Str(250,430,300,24,"KEY3:",24,0);
POINT_COLOR=BLACK;
Show_Str(30,480,300,24,"纸张规格",24,0); //纸张规格
Show_Str(30,530,300,24,"重量",24,0);
Show_Str(30,580,300,24,"厚度",24,0);
while(1)
{
u8 key;
FDC2214Check(); //检测系统工作状态
just_test(); //显示通道值
delay_ms(10);
key = KEY_Scan(0); //获得键值
if(key == KEY0_PRES) //进入学习模式
{
StudyMode();//学习模式
K++;
POINT_COLOR=BLACK;
Show_Str(30,680,300,24,"K 按下次数:",24,0);
POINT_COLOR=RED;
LCD_ShowxNum(170,680,K,1,24,0);
}
}
}
/***********************学习模式***********************/
u16 StudyMode()//获取数据,计算
{
u8 keyd,Count;
double Ch1,Ch2;
int i,j; //获取数据,计算
static double ab[4][count_t] /*分别对应一通道左值右值二通道左值右值*/;
long double sum1 = 0,sum2 = 0,a[2][count_t] = {0};
double adf[2][(count_t-1)] /*对应临时差值*/;
keyd=KEY_Scan(1);
POINT_COLOR=BLACK;
for(i = 0;i<count_t;)
{
keyd=KEY_Scan(0);
if(keyd==KEY0_PRES) //按键KEY0按下录入数据
{
K++;
POINT_COLOR=BLACK;
Show_Str(30,680,300,24,"K 按下次数:",24,0);
POINT_COLOR=RED;
LCD_ShowxNum(170,680,K,1,24,0);
for(j=0;j<100;j++) //取平均值
{
sum1= sum1+ReadRegfdc2214(0x02);//读取的通道1的值
sum2= sum2+ReadRegfdc2214(0x04);//读取的通道2的值
}
a[0][i]=sum1/100;
a[1][i]=sum2/100;
POINT_COLOR=BLACK;
Show_Str(170,300,200,24,"学习",24,0);
Show_Str(160,500,200,24,"正在学习",24,0);
Show_Str(30,530,200,24,"学习次数:",24,0);
Show_Str(30,500,300,24,"学习状态:",24,0);
POINT_COLOR=RED;
LCD_ShowxNum(100,180,a[0][i],8,24,0); //通道一学习参数
LCD_ShowxNum(100,240,a[1][i],8,24,0); //通道二学习参数
LCD_ShowxNum(160,530,i+1,2,24,0); //学习次数
sum1 = 0;
sum2 = 0;
i++;
keyd = 0;
}
delay_ms(1);
}
for(i=1;i<count_t;i++)
{
adf[0][i-1] = (a[0][i] - a[0][i-1])/2;
adf[1][i-1] = (a[1][i] - a[1][i-1])/2;
}
ab[0][0] = a[0][0] - adf[0][0];
ab[2][0] = a[1][0] - adf[1][0];
for(i=1;i<count_t;i++)
{
ab[0][i] = a[0][i] - adf[0][i-1];
ab[1][i-1] = a[0][i-1]+adf[0][i-1];
ab[2][i]=a[1][i]-adf[1][i-1];
ab[3][i-1]=a[1][i-1]+adf[1][i-1];
}
ab[1][count_t-1] = a[0][count_t-1]+adf[0][count_t-2];
ab[3][count_t-1] = a[1][count_t-1]+adf[1][count_t-2];
//上下限
/******************************************************************************************************************************
**********************************************分割线***************************************************************************
******************************************************************************************************************************/
Show_Str(150,500,300,24,"正在学习",24,0);
while(1) //学习模式
{
POINT_COLOR=RED;
Show_Str(150,500,300,24,"已完成学习",24,0);
keyd=KEY_Scan(0);
if(keyd == KEY0_PRES) // 录入数值
{
K++;
POINT_COLOR=BLACK;
Show_Str(30,680,300,24,"K 按下次数:",24,0);
POINT_COLOR=RED;
LCD_ShowxNum(170,680,K,1,24,0);
Ch2 = ReadRegfdc2214(0x04); //通道二
Ch1 = ReadRegfdc2214(0x02); //通道一
Count=0;
if((Ch1<1873) || (Ch2<1792))Count=0; //零张
for(i=0;i<count_t;i++)
{
if(((ab[0][i]<Ch1)&&(Ch1<ab[1][i])) || ((ab[2][i]<Ch2)&&(Ch2<ab[3][i]))) //i张纸
{
Count = i+1;
break;
}
}
LCD_ShowxNum(350,240,Count,4,24,0); //显示被测纸张数
delay_ms(500);
BEEP=1; //发出蜂鸣声
LED0=0; //伴随红灯闪烁
delay_ms(500);
BEEP=0;
LED0=1;
}
if(keyd == KEY2_PRES) //按下KEY2进行纸张标准重量调节 一共分为4挡
{
u8 z;
w++;
if(w==5) w=0;
z=Count*PaperWeight(w); //计算后的纸张重
POINT_COLOR=BLACK;
LCD_ShowxNum(355,300,z,5,24,0); //纸重
LCD_ShowxNum(286,600,PaperWeight(w),3,24,0); //显示规格
}
}
}
复制代码
所有资料51hei提供下载:
2019F纸张检测程序.7z
(1.26 MB, 下载次数: 42)
2020-3-24 17:59 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1