完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
该装置基于ARM Cortex-M内核,主控制器采用STM32F103C8T6单片机,电容采集装置使用FDC2214电容数字转化器,电容极板使用同纸张直接接触的覆铜板,电容数字转换器将采集到的数据通过IIC协议传输给单片机,单片机通过前期纸张数量校准存取每一张纸的电容值从而建立数据阈值区间表,即相邻两张纸的电容值取中值得到后一张纸的下限阈值,通过后期测量对比前期校准建立的数据阈值区间表,从而实现非线性运算来识别纸张数量,该装置能在5秒内将测量结果显示在OLED屏幕上。
代码 主函数代码 #include “bsp.h” #include “key.h” #include “delay.h” #include “sys.h” #include “led.h” #include “oled.h” #include “usart.h” #include “beep.h” #include “math.h” #include “stdio.h” //无纸张报警函数 void error(void) { OLED_Clear(); //清屏 OLED_ShowCHinese(36, 0, 19); //极 OLED_ShowCHinese(54, 0, 20); //板 OLED_ShowCHinese(72, 0, 23); //短 OLED_ShowCHinese(90, 0, 24); //路 } //主函数 int main() { int ChValue[4] = {0}; //清理通道 u32 FF=0; //前一张频率值0 u32 FF1=0; //后一张频率值1 u32 ffLast=0; //间距检查标志 u8 resultSign=0; //安全间距标志 u8 key; // u8 keySign=0; //初始化按键标志 //程序手动数值校准,存取1-50纸张频率数值,可根据不同机械结构环境进行校准 u16 valueBuf[51]={1000, 3728,4494,5219,5702,6182,6688,7050,7396,7823,8266 ,8757,9246,9571,9891,10179,10482,10974,11376,11604,11893 ,12169,12410,12682,12949,13203,13459,13697,13937,14180,14418 ,14651,14906,15129,15178,15272,15495,15707,15760,15790,15984 ,16209,16302,16502,16687,16737,16797,16847,16943,17126,18000}; // u16 valueBuf[61]={1000, 5500,6470,7186,7726,8287,8818,9319,9779,10250,10567, // 10873,11364,11695,11986,12418,12863,13169,13439,13688, // 13959,14223,14301,14532,14775,14994,15264,15537,15764,15987, // 16251,16493,16880,16780,17018,17216,17295,17509,17717,17794, // 17870,18072,18262,18322,18382,18562,18746,18805,18860,18910,19085, // 19265,19314,19356,19404,19579,19752,19794,19839,19873,19911}; u8 bufCount=0; //初始化数组元素计数标志符 delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); BEEP_Init(); //初始化蜂鸣器端口 KEY_Init(); //初始化与按键连接的硬件接口 OLED_Init(); //初始化OLED OLED_Clear(); // 主界面 OLED_ShowCHinese(0, 0, 0); //纸 OLED_ShowCHinese(16, 0, 1); //张 OLED_ShowCHinese(32, 0, 2); //计 OLED_ShowCHinese(48, 0, 3); //数 OLED_ShowCHinese(54 + 10, 0, 4); //显 OLED_ShowCHinese(80, 0, 5); //示 OLED_ShowCHinese(96, 0, 6); //装 OLED_ShowCHinese(112, 0, 7); //置 OLED_ShowCHinese(16, 6, 9); //启 OLED_ShowCHinese(32, 6, 10); //动 OLED_ShowCHinese(80, 6, 29); //校 OLED_ShowCHinese(96, 6, 30); //准 delay_ms(8000); uart_init(115200); //串口初始化 IIC_Init(); //iIC初始化 //InitSingleFDC2214();//初始化单通道 InitMultiFDC2214();//初始化多路复用 BEEP = 0; while(1) { ChValue[1] = FDC2X14ReadCH(0X02);//读取FDC2214通道二的数据 printf(“%drn”, FF = ChValue[1]);//串口打印,并将频率值转送给频率标志0 OLED_ShowCHinese(0, 4, 27); //频 OLED_ShowCHinese(18, 4, 28); //率 OLED_ShowString(36,4,“:”,16); // OLED_ShowString(0,4,“parameter:”,16); OLED_ShowNum(54, 4, FF, 8, 16); // OLED_ShowNum(54, 6, ffLast, 8, 16); // OLED_ShowNum(0, 6, KEY1_PRES, 1, 16); // OLED_ShowNum(32, 6, KEY2_PRES, 1, 16); //检查区间长度,安全间距为5 if (FF》ffLast) { if(FF-ffLast《=5) resultSign=1; } else { if(ffLast-FF《=5) resultSign=1; } ffLast=FF; delay_ms(2); key = KEY_Scan(); //得到键值 delay_ms(100); //进行测量和校准 if(key) { //区分是检测模式还算校准模式 switch(key) { case KEY1_PRES: //检测模式 //delay_ms(10); OLED_Clear(); //清屏 /// OLED_ShowCHinese(36, 0, 11); //测 OLED_ShowCHinese(54, 0, 12); //试 OLED_ShowCHinese(72, 0, 13); //结 OLED_ShowCHinese(90, 0, 14); //果 //delay_ms(8000); OLED_ShowCHinese(0, 2, 15); //纸 OLED_ShowCHinese(18, 2, 16); //张 OLED_ShowCHinese(36, 2, 17); //数 OLED_ShowCHinese(54, 2, 18); //量 //delay_ms(8000); keySign=1; //按键标志 bufCount=0; //清空数组计数 break; case KEY2_PRES://校准模式 OLED_Clear(); //清屏 OLED_ShowCHinese(36, 0, 29); //校 OLED_ShowCHinese(54, 0, 30); //准 OLED_ShowCHinese(72, 0, 31); //模 OLED_ShowCHinese(90, 0, 32); //式 OLED_ShowString(0,6,“Array:”,16); OLED_ShowNum(54, 6, bufCount, 8, 16);//显示数组元素位置 if(bufCount==0) { valueBuf[bufCount]=1000; //数组第一个元素为1000 } |
|
|
|
else
valueBuf[bufCount]=(FF1+FF)/2; //前一次测量与后一次测量的频率除二取中值存入数组 FF1=FF; //前一张赋给后一张 OLED_ShowNum(54, 2, valueBuf[bufCount], 8, 16);//显示数组中的频率值 bufCount++; //数组元素位置加一 if(bufCount》=50) //最大检测五十张 bufCount=0; break; } } //进入检测模式开始区间检测 else delay_ms(10); if((resultSign==1)&&(keySign==1))//是否满足安全间距和按键按下的条件 { / if(valueBuf[0] 《 FF && FF 《 valueBuf[1])//测量的结果是否在第一个区间 { OLED_ShowString(76, 2, “1”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 // OLED_ShowString(108 - 10, 2, “piece ”, 16); //1 } else if( valueBuf[1] 《 FF && FF 《 valueBuf[2]) { OLED_ShowString(76, 2, “2”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 // OLED_ShowString(108 - 10, 2, “piece ”, 16); //2 } else if( valueBuf[2] 《 FF && FF 《 valueBuf[3]) { OLED_ShowString(76, 2, “3”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:3 } else if( valueBuf[3] 《 FF && FF 《 valueBuf[4]) { OLED_ShowString(76, 2, “4”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:4 } else if( valueBuf[4] 《 FF && FF 《 valueBuf[5]) { OLED_ShowString(76, 2, “5”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:5 } // else if( valueBuf[5] 《 FF && FF 《 valueBuf[6]) { OLED_ShowString(76, 2, “6”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:6 } else if( valueBuf[6] 《 FF && FF 《 valueBuf[7]) { OLED_ShowString(76, 2, “7”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:7 } else if( valueBuf[7] 《 FF && FF 《 valueBuf[8]) { OLED_ShowString(76, 2, “8”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 // 8 } else if( valueBuf[8] 《 FF && FF 《 valueBuf[9]) { OLED_ShowString(76, 2, “9”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张//:9 } else if( valueBuf[9] 《 FF && FF 《 valueBuf[10]) { OLED_ShowString(76, 2, “10”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张//:10 } else if( valueBuf[10] 《 FF && FF 《 valueBuf[11]) { OLED_ShowString(76, 2, “11”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张//:11 } else if( valueBuf[11] 《 FF && FF 《 valueBuf[12]) { OLED_ShowString(76, 2, “12”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:12 } else if( valueBuf[12] 《 FF && FF 《 valueBuf[13]) { OLED_ShowString(76, 2, “13”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张//:13 } else if( valueBuf[13] 《 FF && FF 《 valueBuf[14]) { OLED_ShowString(76, 2, “14”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:14 } else if( valueBuf[14] 《 FF && FF 《 valueBuf[15]) { OLED_ShowString(76, 2, “15”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:15 } /// else if( valueBuf[15] 《 FF && FF 《 valueBuf[16]) { OLED_ShowString(76, 2, “16”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张//:16 } else if( valueBuf[16] 《 FF && FF 《 valueBuf[17]) { OLED_ShowString(76, 2, “17”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //:14 } else if( valueBuf[17] 《 FF && FF 《 valueBuf[18]) { OLED_ShowString(76, 2, “18”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[18] 《 FF && FF 《 valueBuf[19]) { OLED_ShowString(76, 2, “19”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[19] 《 FF && FF 《 valueBuf[20]) { OLED_ShowString(76, 2, “20”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[20] 《 FF && FF 《 valueBuf[21]) { OLED_ShowString(76, 2, “21”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[21] 《 FF && FF 《 valueBuf[22]) { OLED_ShowString(76, 2, “22”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[22] 《 FF && FF 《 valueBuf[23]) { OLED_ShowString(76, 2, “23”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[23] 《 FF && FF 《 valueBuf[24]) { OLED_ShowString(76, 2, “24”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[24] 《 FF && FF 《 valueBuf[25]) { OLED_ShowString(76, 2, “25”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[25] 《 FF && FF 《 valueBuf[26]) { OLED_ShowString(76, 2, “26”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[26] 《 FF && FF 《 valueBuf[27]) { OLED_ShowString(76, 2, “27”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[27] 《 FF && FF 《 valueBuf[28]) { OLED_ShowString(76, 2, “28”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[28] 《 FF && FF 《 valueBuf[29]) { OLED_ShowString(76, 2, “29”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[29] 《 FF && FF 《 valueBuf[30]) { OLED_ShowString(76, 2, “30”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[30] 《 FF && FF 《 valueBuf[31]) { OLED_ShowString(76, 2, “31”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[31] 《 FF && FF 《 valueBuf[32]) { OLED_ShowString(76, 2, “32”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[32] 《 FF && FF 《 valueBuf[33]) { OLED_ShowString(76, 2, “33”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[33] 《 FF && FF 《 valueBuf[34]) { OLED_ShowString(76, 2, “34”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[34] 《 FF && FF 《 valueBuf[35]) { OLED_ShowString(76, 2, “35”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } // else if( valueBuf[35] 《 FF && FF 《 valueBuf[36]) { OLED_ShowString(76, 2, “36”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[36] 《 FF && FF 《 valueBuf[37]) { OLED_ShowString(76, 2, “37”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[37] 《 FF && FF 《 valueBuf[38]) { OLED_ShowString(76, 2, “38”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[38] 《 FF && FF 《 valueBuf[39]) { OLED_ShowString(76, 2, “39”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[39] 《 FF && FF 《 valueBuf[40]) { OLED_ShowString(76, 2, “40”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } / else if( valueBuf[40] 《 FF && FF 《 valueBuf[41]) { OLED_ShowString(76, 2, “41”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[41] 《 FF && FF 《 valueBuf[42]) { OLED_ShowString(76, 2, “42”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[42] 《 FF && FF 《 valueBuf[43]) { OLED_ShowString(76, 2, “43”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[43] 《 FF && FF 《 valueBuf[44]) { OLED_ShowString(76, 2, “44”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[44] 《 FF && FF 《 valueBuf[45]) { OLED_ShowString(76, 2, “45”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } / |
|
|
|
else if( valueBuf[45] 《 FF && FF 《 valueBuf[46])
{ OLED_ShowString(76, 2, “46”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[46] 《 FF && FF 《 valueBuf[47]) { OLED_ShowString(76, 2, “47”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[47] 《 FF && FF 《 valueBuf[48]) { OLED_ShowString(76, 2, “48”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[48] 《 FF && FF 《 valueBuf[49]) { OLED_ShowString(76, 2, “49”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } else if( valueBuf[49] 《 FF && FF 《 valueBuf[50]) { OLED_ShowString(76, 2, “50”, 16); //: OLED_ShowCHinese(108 - 10, 2, 16); //张 //: } // else if( valueBuf[50] 《 FF && FF 《 valueBuf[51]) // { // OLED_ShowString(76, 2, “51”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[51] 《 FF && FF 《 valueBuf[52]) // { // OLED_ShowString(76, 2, “52”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[52] 《 FF && FF 《 valueBuf[53]) // { // OLED_ShowString(76, 2, “53”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[53] 《 FF && FF 《 valueBuf[54]) // { // OLED_ShowString(76, 2, “54”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[54] 《 FF && FF 《 valueBuf[55]) // { // OLED_ShowString(76, 2, “55”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[55] 《 FF && FF 《 valueBuf[56]) // { // OLED_ShowString(76, 2, “56”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[56] 《 FF && FF 《 valueBuf[57]) // { // OLED_ShowString(76, 2, “57”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[57] 《 FF && FF 《 valueBuf[58]) // { // OLED_ShowString(76, 2, “58”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[58] 《 FF && FF 《 valueBuf[59]) // { // OLED_ShowString(76, 2, “59”, 16); //: // OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } // else if( valueBuf[59] 《 FF && FF 《 valueBuf[60]) // { // OLED_ShowString(76, 2, “60”, 16); //: OLED_ShowString(108 - 10, 2, “pcs”, 16); //: // } //频率值超出可测量范围显示极板短路 //显示极板短路 else if(ChValue[1] 》 300000) //进入报警程序 { OLED_Clear(); //清屏 OLED_ShowCHinese(36, 0, 19); //极 OLED_ShowCHinese(54, 0, 20); //板 OLED_ShowCHinese(72, 0, 23); //短 OLED_ShowCHinese(90, 0, 24); //路 OLED_ShowCHinese(0, 2, 15); //纸 OLED_ShowCHinese(18, 2, 16); //张 OLED_ShowCHinese(36, 2, 17); //数 OLED_ShowCHinese(54, 2, 18); //量 OLED_ShowString(76, 2, “0”, 16); //: // OLED_ShowString(108 - 10, 2, “piece ”, 16); //1 OLED_ShowCHinese(108 - 10, 2, 16); //张 } //检测完成蜂鸣器报警 BEEP = 1; //蜂鸣器开启 delay_ms(100); BEEP = 0; //蜂鸣器关闭 keySign=0; //清空按键标志 resultSign=0; //清空间距检查标志 } //显示极板短路 else if(ChValue[1] 》 290000&&(keySign==1)) //进入报警程序 { OLED_Clear(); //清屏 OLED_ShowCHinese(36, 0, 19); //极 OLED_ShowCHinese(54, 0, 20); //板 OLED_ShowCHinese(72, 0, 23); //短 OLED_ShowCHinese(90, 0, 24); //路 OLED_ShowCHinese(0, 2, 15); //纸 OLED_ShowCHinese(18, 2, 16); //张 OLED_ShowCHinese(36, 2, 17); //数 OLED_ShowCHinese(54, 2, 18); //量 OLED_ShowString(76, 2, “0”, 16); //: // OLED_ShowString(108 - 10, 2, “piece ”, 16); //1 OLED_ShowCHinese(108 - 10, 2, 16); //张 BEEP = 1; //蜂鸣器开启 delay_ms(100); BEEP = 0; //蜂鸣器关闭 keySign=0; //清空按键标志 resultSign=0; //清空间距检查标志 } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
693 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1871浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
543浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 10:38 , Processed in 0.874284 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号