|
因?yàn)閘dc1314與fdc2214的部分相似性,所以在ldc1314上面的魔改程序
單片機(jī)源程序如下:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "main.h"
- #include "timer.h"
- #include "LDC1314.h"
- #include "xunji.h"
- #define Coin_Data 60 //檢測硬幣的差值
- #define Wire_Data 3 //檢測鐵絲的差值
- #define Speed_PWM 50
- #define flag_beep 4
- #define flag_ch0 0
- #define flag_ch1 1
- #define flag_ch2 2
- #define flag_ch3 3
- #define flag_ch4 5
- static int dif_val1,dif_val2;
- int dif_val1=0,dif_val2=0;
- uint32_t CH_Dif[4]={0,0,0,0};
- u8 step_flag = 0;
- u8 key_flag;
- uint32_t CH[4]={0};
- int val_init,val_10,val_15,val_20,val_30; //初始值
- float Step1to10_val,Step10to15_val,Step15to20_val,Step20to30_val;//每張紙的步進(jìn)值
- u8 flag_Last[50]={0};
- unsigned long CH0_Data=0,CH1_Data=0,CH2_Data=0,CH3_Data=0;//傳感器初始值
- int Paper_Num(int *CH_Dif,u8 flag);//測量紙張數(shù)量
- void Auto_cheak(void); //自檢測函數(shù)
- u8 Key_cheak(void); //觸摸按鍵檢測函數(shù),有觸摸按鍵,返回1
- void Cal_Step_val(void);//計(jì)算各個步進(jìn)值
- u8 Cal_Paper(int *CH_Dif);//粗略計(jì)算紙張數(shù)量,返回紙張所在步進(jìn)區(qū)間標(biāo)志位
- int function1(uint32_t CH_Dif1,int dif_val1);//根據(jù)采集的數(shù)據(jù),計(jì)算紙張數(shù)量,紙張要求為1~15張
- int function2(uint32_t CH_Dif1,int dif_val2);//根據(jù)采集的數(shù)據(jù),計(jì)算紙張數(shù)量,紙張要求為16~35張
- int main(void)
- {
- uint8_t retVal=0;//傳感器自初始化返回值
- int i=0;
- int num=0;
- char *str;
- delay_init(); //延時函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- OLED_Init();
- OLED_Display_On();
- OLED_Clear();
-
- uart_init(115200); //串口初始化為115200
- printf("uart Init_OK\r\n");
- //TIM2_Int_Init();
- //TIM3_Int_Init(799,0); //10KHz PWM
- //EXTIX_Init();
- I2C_INIT(); //IIC初始化,模擬IIC,用于ldc1314通信,使用PA11,PA12
- printf("IIC Init_OK\r\n");
- do //LDC1314初始化
- {
- printf("LCD Init_ing\r\n");
- retVal=2;
- retVal = InitLDC1314();//ldc1314初始化,若不成功則一直執(zhí)行
- }while (retVal!= 1) ;
- delay_ms(100);
- //Auto_cheak();//自檢
- OLED_Clear();
- while(1)
- {
- OLED_ShowString(0,0," Work Mode",16);
- OLED_ShowString(0,2,"Place Paper...",16);
- OLED_ShowString(0,4,"Place... ",16);
- // while(!Key_cheak())
- // {
- // delay_ms(10);
- // }//等待按鍵確認(rèn)
- OLED_ShowString(0,4,"Place : OK ",16);//手動確認(rèn)紙張放好
- for(i=0;i<50;i++)
- {
- LDC_read(CH);
- CH_Dif[1] += CH[1];
- delay_ms(10);
- }
- CH_Dif[1]=CH_Dif[1]/50;
- if(CH_Dif[1]<=7638)
- num=function1(CH_Dif[1],0);
- else
- num=function2(CH_Dif[1],0);
- printf("CH_Dif[1]=%d Paper : %d\r\n",CH_Dif[1],num);
- // while(!Key_cheak())
- // {
- // delay_ms(10);
- // }//等待按鍵確認(rèn)
- CH_Dif[0]=0;
- CH_Dif[1]=0;
- CH_Dif[2]=0;
- }
- }
- int Paper_Num(int *CH_Dif,u8 flag)
- {
- int Num=0;
- switch(flag)
- {
- case 1://1~10張
- Num=(CH_Dif[1]-val_init)/Step1to10_val;
- break;
- case 2://11~15張
- Num=(CH_Dif[1]-val_10)/Step10to15_val;
- break;
- case 3://16~20張
- Num=(CH_Dif[1]-val_15)/Step15to20_val;
- break;
- case 4://21~30張
- Num=(CH_Dif[1]-val_20)/Step20to30_val;
- break;
- case 5://>30張
- Num=(CH_Dif[1]-val_30)/Step20to30_val;//待確定
- break;
- case 0://短路或錯誤標(biāo)識
- OLED_Clear();
- OLED_ShowString(0,0,"ERROR Mode",16);
- break;
-
- }
- return Num;
- }
- u8 Key_cheak(void)
- {
- int i;
- LDC_read(CH);
- for(i=0;i<10;i++)
- {
- LDC_read(CH);
- CH_Dif[0] += CH[0];
- }
- CH_Dif[0]=CH_Dif[0]/10;
- printf("Key_cheak CH_Dif[0]=:%d\r\n",CH_Dif[0]);
- if(CH_Dif[0]<31000)
- return 1;
- else
- return 0;
- }
- void Auto_cheak(void)
- {
- int i,sum=0;
- printf("Auto_Cheak!\r\n");
- OLED_ShowString(0,0,"Auto_Cheak Mode",16);
- OLED_ShowString(0,2,"Paper_Num:5",16);//自檢測5張紙
- OLED_ShowString(0,4,"Cheaking...",16);
- while(!Key_cheak())
- {
- delay_ms(10);
- }//等待按鍵確認(rèn)
-
- delay_ms(1000);//等待測量值穩(wěn)定
- for(i=0;i<30;i++)
- {
- LDC_read(CH);
- sum+=CH[1];
- delay_ms(10);
- }
- val_init=sum/30;
- if(5!=function1(val_init,0))
- {
- dif_val1=val_init-(6915+7055)/2;
- }
- sum=0;
- OLED_ShowString(0,4,"Cheak:OK! ",16);
- //beep
- delay_ms(1000);
- delay_ms(1000);
- delay_ms(1000);
-
-
-
- OLED_ShowString(0,2,"Paper_Num:20",16);//自檢測20張紙
- OLED_ShowString(0,4,"Cheaking...!",16);
- while(!Key_cheak())//等待按鍵確認(rèn)
- {delay_ms(10);}
- delay_ms(1000);
- for(i=0;i<30;i++)
- {
- LDC_read(CH);
- sum+=CH[1];
- delay_ms(10);
- }
- val_20=sum/30;
- if(20!=function1(val_init,0))
- {
- dif_val2=val_init-(7786+7816)/2;
- }
- sum=0;
- OLED_ShowString(0,4,"Cheak:OK! ",16);
- //beep
- delay_ms(1000);
- delay_ms(1000);
-
-
- }
- void Cal_Step_val(void)
- {
- Step1to10_val=(val_10-val_init)/9;//算出各個區(qū)間的步進(jìn)值
- Step10to15_val=(val_15-val_10)/5;
- Step15to20_val=(val_20-val_15)/5;
- Step20to30_val=(val_30-val_20)/10;
- }
- u8 Cal_Paper(int *CH_Dif)
- {
- if(CH_Dif[1]>(val_init-3) && CH_Dif[1]<(val_10))
- return 1;
- if(CH_Dif[1]>(val_10) && CH_Dif[1]<(val_15))
- return 2;
- if(CH_Dif[1]>(val_15) && CH_Dif[1]<(val_20))
- return 3;
- if(CH_Dif[1]>(val_20) && CH_Dif[1]<(val_30))
- return 4;
- if(CH_Dif[1]>(val_30))
- return 5;
- else
- return 0;//error
-
- }
- /*此函數(shù)用于判斷1~15張紙的數(shù)量*/
- /*輸入?yún)?shù):通道采樣值*/
- /*數(shù)出參數(shù):紙張數(shù)量 */
- /* f(x) = p1*x^4 + p2*x^3 + p3*x^2 + p4*x + p5 */
- /* p1 = 0.02382 (-0.0076, 0.05524)*/
- /* p2 = -0.08983 (-1.102, 0.9222)*/
- /* p3 = -15.9 (-26.84, -4.963)*/
- /* p4 = 293.3 (248.3, 338.3)*/
- /* p5 = 5916 (5860, 5972)*/
- /* 根據(jù)上述公式求得的參數(shù)區(qū)間*/
- int function1(uint32_t CH_Dif1, int dif_val1)
- {
- int dif_val=0;
- uint32_t CH_Dif[2]=0;
- CH_Dif[1]=CH_Dif1;
- if(CH_Dif[1]>=6059+dif_val && CH_Dif[1]<=6320+dif_val)
- return 1;
- else if(CH_Dif[1]>6320+dif_val && CH_Dif[1]<=6549+dif_val)
- return 2;
- else if(CH_Dif[1]>6549+dif_val && CH_Dif[1]<=6747+dif_val)
- return 3;
- else if(CH_Dif[1]>6747+dif_val && CH_Dif[1]<=6915+dif_val)
- return 4;
- else if(CH_Dif[1]>6915+dif_val && CH_Dif[1]<=7055+dif_val)
- return 5;
- else if(CH_Dif[1]>7055+dif_val && CH_Dif[1]<=7169+dif_val)
- return 6;
- else if((CH_Dif[1]>(7169+dif_val)) && (CH_Dif[1]<=(7259+dif_val)))
- return 7;
- else if(CH_Dif[1]>(7260+dif_val) && CH_Dif[1]<=(7329+dif_val))
- return 8;
- else if(CH_Dif[1]>(7329+dif_val) && CH_Dif[1]<=(7384+dif_val))
- return 9;
- else if(CH_Dif[1]>7384+dif_val && CH_Dif[1]<=7428+dif_val)
- return 10;
- else if(CH_Dif[1]>7428+dif_val && CH_Dif[1]<=7466+dif_val)
- return 11;
- else if(CH_Dif[1]>7466+dif_val && CH_Dif[1]<=7494+dif_val)
- return 12;
- else if(CH_Dif[1]>7494+dif_val && CH_Dif[1]<=7558+dif_val)//改區(qū)間
- return 13;
- else if(CH_Dif[1]>7558+dif_val && CH_Dif[1]<=7605+dif_val)
- return 14;
- else if(CH_Dif[1]>7605+dif_val && CH_Dif[1]<=7638+dif_val)
- return 15;
- else return 999;
-
-
-
- }
- int function2(uint32_t CH_Dif1, int dif_val2)
- {
- int dif_val=0;
- uint32_t CH_Dif[2]=0;
- CH_Dif[1]=CH_Dif1;
- if(CH_Dif[1]>7638+dif_val && CH_Dif[1]<=7678+dif_val)
- return 16;
- else if(CH_Dif[1]>7678+dif_val && CH_Dif[1]<=7717+dif_val)
- return 17;
- else if(CH_Dif[1]>7717+dif_val && CH_Dif[1]<=7753+dif_val)
- return 18;
- else if(CH_Dif[1]>7753+dif_val && CH_Dif[1]<=7786+dif_val)
- return 19;
- else if(CH_Dif[1]>7786+dif_val && CH_Dif[1]<=7816+dif_val)
- return 20;
- else if(CH_Dif[1]>7816+dif_val && CH_Dif[1]<=7844+dif_val)
- return 21;
- else if(CH_Dif[1]>7844+dif_val && CH_Dif[1]<=7869+dif_val)
- return 22;
- else if(CH_Dif[1]>7869+dif_val && CH_Dif[1]<=7891+dif_val)
- return 23;
- else if(CH_Dif[1]>7891+dif_val && CH_Dif[1]<=7911+dif_val)
- return 24;
- else if(CH_Dif[1]>7911+dif_val && CH_Dif[1]<=7929+dif_val)
- return 25;
- else if(CH_Dif[1]>7929+dif_val && CH_Dif[1]<=7943+dif_val)
- return 26;
- else if(CH_Dif[1]>7943+dif_val && CH_Dif[1]<=7959+dif_val)
- return 27;
- else if(CH_Dif[1]>7959+dif_val && CH_Dif[1]<=7970+dif_val)
- return 28;
- else if(CH_Dif[1]>7970+dif_val && CH_Dif[1]<=7984+dif_val)
- return 29;
- else if(CH_Dif[1]>7984+dif_val && CH_Dif[1]<=7995+dif_val)
- return 30;
- else if(CH_Dif[1]>7995+dif_val && CH_Dif[1]<=8005+dif_val)
- return 31;
- else if(CH_Dif[1]>8005+dif_val && CH_Dif[1]<=8015+dif_val)
- return 32;
- else if(CH_Dif[1]>8015+dif_val && CH_Dif[1]<=8026+dif_val)
- return 33;
- else if(CH_Dif[1]>8026+dif_val && CH_Dif[1]<=8038+dif_val)
- return 34;
- else if(CH_Dif[1]>8038+dif_val && CH_Dif[1]<=8052+dif_val)
- return 35;
- else return 999;
- }
復(fù)制代碼
所有資料51hei提供下載:
LDC1314_F1.7z
(218.01 KB, 下載次數(shù): 34)
2020-1-2 13:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|