|
IAP15L2K61S2板子的實物圖如下:
0.png (416.9 KB, 下載次數: 140)
下載附件
2016-6-20 16:02 上傳
0.png (589.97 KB, 下載次數: 166)
下載附件
2016-6-20 15:57 上傳
該IAP15L2K61S2開發板設計資料包括PCB、元件庫,大家可以隨意引用或更改文檔、代碼、PCB,不必等待作者同意。目前完成的資料,希望至少有點STC89C52的基礎看看,當然但愿對于所有的電子愛好者來說,有點參考價值。
PCB:
0.png (56.79 KB, 下載次數: 157)
下載附件
2016-6-20 15:54 上傳
原理圖:
0.png (54.33 KB, 下載次數: 201)
下載附件
2016-6-20 15:53 上傳
單片機開發板的測試程序如下:
- /**************************************************************************************
- 注意事項:按ALT+F7 配置->Target->Memory Mode->Large:variables in XDATA,如果需要用到仿真
- Debug中設置好仿真和串口號;
- 初始化有液晶背光調節演示,需要把P19的跳線帽插到上面,使LCD背光引腳與P26相連,使
- 用PWM1來調節液晶背光亮度;
- 使用串口1的1通道發送數據打游戲:在lkb.h中增加了KEYMSG結構體
- mpu6050.c中Accel_x、Accel_y、Accel_z升為全局變量,增加;
- Accel_y = (float)GetData(ACCEL_YOUT_H)/286.0f; //讀取Y軸加速度
- ADC初始化把AD采樣時間改小了
- // *************************************************************************************
- #include "config0.h"
- #include "delay.h"
- #include "lkb.h"
- #include "timer.h"
- #include "uart.h"
- #include <stdio.h>
- #include "lcd.h"
- #include "adc.h"
- #include "mpu6050.h"
- #include "image0.h"
- #include "pca_pwm.h"
- #include "hmc5883l.h"
- #include "nrf24l01.h"
- #include <math.h>
- #include "int.h"
- unsigned int adc0,adc1,adc2,adc3,adc4;
- float li_voltage=0;
- KEYMSG left;
- KEYMSG right;
- KEYMSG up;
- KEYMSG down;
- KEYMSG kb;
- KEYMSG a_jump; //跳躍
- KEYMSG a_shoot;//射擊
- KEYMSG a_left;
- KEYMSG a_right;
- void Encoder_Task();
- void MPU6050_Task();
- void HMC5883_Task();
- void KEY_Task();
- void ADC_Task();
- void Encoder_Task()
- {
- LCD_Show2Num(0,112,Freq,6);
- printf("%d\n",Cnt_Now);
- }
- void MPU6050_Task()
- {
- static unsigned int j=0;
- Angle_Calcu(); //傾角計算 將得到下面兩個全局變量,使用了網上摘抄的卡爾曼濾波
- //float Angle; //最終傾斜角度
- //float Gyro_y; //Y軸角速度
- if(Accel_x >=20 && Accel_x<=90)
- {
- sendMsg(&a_jump, 7, 1);
- }
- else if(Accel_x >=-90 && Accel_x<=-20)
- {
- sendMsg(&a_shoot, 6, 1);
- }
- else
- {
- if(a_jump.msg == 1)
- {
- sendMsg(&a_jump, 7, 0);
- }
- else if(a_shoot.msg == 1)
- {
- sendMsg(&a_shoot, 6, 0);
- }
- }
- if(Accel_y >=20 && Accel_y<=90)
- {
- sendMsg(&a_right, 3, 1);
- }
- else if(Accel_y >=-90 && Accel_y<=-20)
- {
- sendMsg(&a_left, 2, 1);
- }
- else
- {
- if(a_right.msg == 1)
- {
- sendMsg(&a_right, 3, 0);
- }
- else if(a_left.msg == 1)
- {
- sendMsg(&a_left, 2, 0);
- }
- }
- //printf("%.2f,%.2f\n",Angle,Gyro_y);
- j++;
- if(j>=240)
- {
- j=0;
- LCD_Fill(0,140,239,318,Black);
- POINT_COLOR = Red;
- BACK_COLOR=Black;
- LCD_DrawLine(0,229,239,229);
- POINT_COLOR = Green;
- }
- if((int)Angle>-90 && (int)Angle<90 ) //排除初始不穩定雜波
- {
- LCD_DrawPoint(j,229-(int)Angle);
- //通過NRF24L01發送出去
- if(Angle>=0)
- {
- Tx_Buf[2] = '+';
- Tx_Buf[3] =(unsigned char)Angle;
- }
- else
- {
- Tx_Buf[2] = '-';
- Tx_Buf[3] = (unsigned char)(Angle*(-1));
- }
- Transmit(Tx_Buf); //24L01發送緩沖數組
- sta=SPI_Read(READ_REG + STATUS); //讀24L01的狀態寄存器
- if(TX_DS) //sbit TX_DS =sta^5;數據發送完成中斷,接收到應答信號時此位置1,寫1清除中斷
- {
- //Delay_ms(5);
- SPI_RW_Reg(WRITE_REG + STATUS,sta); //寫狀態寄存器,清除中斷
- }
- if(MAX_RT) //如果是發送超時 sbit MAX_RT =sta^4;
- { //達到最多次重發中斷,MAX_RT中斷產生則必須清除后系統才能進行通訊,寫1清除中斷
- //Delay_ms(5);
- SPI_RW_Reg(WRITE_REG + STATUS,sta);
- }
- }
-
- }
- void HMC5883_Task()
- {
- //static unsigned int m=0;
- static float Last_HMC5883_Angle=0;
- // float Avg_HMC5883_Angle=0;
- // float Last_Avg_HMC5883_Angle=0;
- // float temp_HMC5883_Angle=0;
- Multiple_Read_HMC5883(); //角度的變化似乎并不是線性的
- LCD_Show2Num(32,80,(int)HMC5883_Angle,3);
- POINT_COLOR=BACK_COLOR; //三角函數使用弧度而不是度!
- LCD_DrawLine(120,100,120+(int)(28.0*cos((Last_HMC5883_Angle-180.0)/57.3)),100+(int)(28.0*sin((Last_HMC5883_Angle-180.0)/57.3)));
- POINT_COLOR=Yellow;
- LCD_DrawLine(120,100,120+(int)(28.0*cos((HMC5883_Angle-180.0)/57.3)),100+(int)(28.0*sin((HMC5883_Angle-180.0)/57.3)));
- Last_HMC5883_Angle=HMC5883_Angle;
- // //平均值濾波
- // m++;
- // temp_HMC5883_Angle+=HMC5883_Angle;
- // if(m==5)
- // {
- // m=0;
- // Avg_HMC5883_Angle=temp_HMC5883_Angle/5.0; //與前面四個值相關聯
- // //printf("\n\n%.2f\n\n",HMC5883_Angle); //HMC5883_Angle: float型,0~360
- // LCD_Show2Num(32,80,(int)Avg_HMC5883_Angle,3);
- // POINT_COLOR=BACK_COLOR;
- // LCD_DrawLine(120,100,120+28*cos((Last_Avg_HMC5883_Angle-180.0)/57.3),100+28*sin((Last_Avg_HMC5883_Angle-180.0)/57.3));
- // POINT_COLOR=Yellow;
- // LCD_DrawLine(120,100,120+28*cos((Avg_HMC5883_Angle-180.0)/57.3),100+28*sin((Avg_HMC5883_Angle-180.0)/57.3));
- // Last_Avg_HMC5883_Angle=Avg_HMC5883_Angle;
- // }
- }
- void ADC_Task()
- {
- static unsigned int i=0;
- static unsigned int k=0;
- POINT_COLOR= Green;
- i++;
- switch(i)
- {
- case 1: adc0=(int)ADC_GetResult(0);LCD_Show2Num(48,0,adc0,3); break;
- case 2: adc1=(int)ADC_GetResult(1);LCD_Show2Num(48,16,adc1,3); break;
- case 3: adc2=(int)ADC_GetResult(2);LCD_Show2Num(168,0,adc2,3); break;
- case 4: adc3=(int)ADC_GetResult(3);LCD_Show2Num(168,16,adc3,3); break;
- case 5: li_voltage=(float)ADC_GetResult(4)*0.019f; break; //adc4*3.3/256*(6.8+3.3)/6.8=adc4*0.019
- default:
- i=0;
- LCD_Show2Num(96,32,(int)li_voltage,1); //顯示整數部分
- LCD_Show2Num(112,32,((int)(li_voltage*100))%100,2); //顯示小數部分
- //printf("%d,%d,%d,%d,%.2f\n",adc0,adc1,adc2,adc3,li_voltage);
- }//switch 結束
- k++;
- //printf("%d,%d,", adc1, adc0);
- if(k%2)
- {
- if(adc1>=0 && adc1<=80)
- {
- sendMsg(&up, 1, 1);
- }
- else if(adc1>=170 && adc1<=255)
- {
- sendMsg(&down, 4, 1);
- }
- else
- {
- if(up.msg == 1)
- {
- sendMsg(&up, 1, 0);
- }
- else if(down.msg == 1)
- {
- sendMsg(&down, 4, 0);
- }
- }
- }
- else
- {
- if(adc0>=0 && adc0<=80)
- {
- sendMsg(&left, 3, 1);
- }
- else if(adc0>=170 && adc0<=255)
- {
- sendMsg(&right, 2, 1);
- }
- else
- {
- if(left.msg == 1)
- {
- sendMsg(&left, 3, 0);
- }
- else if(right.msg == 1)
- {
- sendMsg(&right, 2, 0);
- }
- }
- }
- }
- //void KEY_Task()
- //{
- // if (key_up==0)
- // {
- // sendMsg(&kb, Key_Num, 1); //sendMsg()函數里面有printf
- // }
- // else //if(key_up == 1)
- // {
- //
- // if (kb.msg == 1) ;
- // sendMsg(&kb, kb.key, 0);
- // }
- // //printf("%d\n",Key_Num);
- //}
- /*可以使用單步仿真一步步查看效果*/
- void main()
- {
- unsigned int i;
- Delay_ms(10);
- Delay_us(10);
- PWM2=0; //電機制動,可以下拉10k設置引腳為推挽制動
- /*2.2寸、320*240分辨率、SPI接口的LCD初始化,使用STC的硬件SPI,LCD驅動芯片為ILI9340C*/
- LCD_LED=0; //LCD背光最亮
- SPI_Init(); //IAP15硬件SPI初始化,切換到了SPI的第二通道:SS/P24、MOSI/P23、MISO/P22、SCK/P21
- LCD_Init(); //LCD初始化,廠家提供
- /*LCD休眠演示*/
- LCD_Sleep(); //LCD進入休眠狀態
- Delay_ms(100);
- LCD_ExitSleep();//LCD退出休眠狀態
- /*LCD刷屏演示:紅橙黃綠青藍紫 白黑*/
- LCD_Clear(Red);
- LCD_Clear(Orange);
- LCD_Clear(Yellow);
- LCD_Clear(Green);
- LCD_Clear(Cyan);
- LCD_Clear(Blue);
- LCD_Clear(Purple);
- LCD_Clear(White);
- LCD_Clear(Black);
- /*LCD畫線、英文、漢字、數字顯示測試*/
- /*液晶屏左上角坐標為(0,0),右下角坐標為(239,319)*/
- POINT_COLOR=Green; //全局變量
- BACK_COLOR=Black; //前景色類似于在黑板寫字的各種顏色的粉筆,黑板的顏色就是背景色
- LCD_ShowString(0,0,"Hello,world!"); //從(0,0)坐標開始顯示字符串“Hello,World!”
- POINT_COLOR=Blue; //可以隨時更改畫筆顏色,顯示不同顏色的數字
- LCD_DrawLine(100,0,240,15); //畫一條線段,起始坐標(100,0),終點坐標(240,15)
- LCD_Show2Num(0,16,65535,5); //從(0,16)坐標開始顯示0~65535的數字,5為數字位數,即顯示5位數字
- LCD_ShowNum(100,16,987654321,9); //從(100,16)坐標開始顯示unsigned long型數字(0~4294967295),10為數字位數,即10位數字
- POINT_COLOR=Yellow;
- for(i=32;i<320;i+=16)
- {
- LCD_ShowString(0,i,"abcdefghijklmnopqrstuvwxyz!");
- }
- LCD_LED=1; //LCD背光關閉
- Delay_ms(500);
- LCD_LED=0; //LCD背光最亮
- Delay_ms(500);
- LCD_Clear(Black); //清屏:黑色
- //LCD_Fill(120,120,160,160,Yellow); //在矩形區域填充色塊,在函數處按F12可以查看函數原型
- LCD_ShowImage(gImage_musi,80,120,78,80);//顯示彩色圖像: 慕司LOGO
- Delay_ms(2000);
- LCD_Clear(Black);
- POINT_COLOR=Red;
- LCD_DrawRectangle(0,0,239,60); //畫矩形:對角坐標(左上、右下)為(0,0),(239,60)
- POINT_COLOR=Purple;
- LCD_ShowString(80,2,"慕司"); //顯示16*16漢字
- LCD_ShowString(16,22,"為一線微茫憧憬一意孤行,");
- LCD_ShowString(8,42,"這眾生蕓蕓誰不曾如此任性!");
- POINT_COLOR=Cyan;
- LCD_ShowGB3232(80,160,"青春");
- POINT_COLOR=Green;
- LCD_DrawCircle(112,176,48);
- Delay_ms(500);
- PCA_PWM_Init(); //PWM初始化,切換到PWM的第三通道P25/P26/P27,這里僅使用了PWM1(P26,即LCD_LED引腳)
- LCD_LED=0; //LCD背光最亮
- for(i=255;i<=0;i--) //液晶背光256級亮度調節演示:由亮到暗
- {
- CCAP1H = CCAP1L = i; //通過調節占空比來調節屏幕亮度
- Delay_ms(20);
- }
- LCD_LED=1; //LCD背光關閉
- for(i=0;i<255;i++) //液晶背光256級亮度調節演示:由暗到亮
- {
- CCAP1H = CCAP1L = i; //通過調節占空比來調節屏幕亮度
- Delay_ms(20);
- }
- Delay_ms(1000);
- LCD_Clear(Black);
- LKB_Init(); //LED Key Buzzer:LED、按鍵、蜂鳴器 初始化(設置蜂鳴器端口為推挽輸出)
- Buzzer_Func(500,1000); //蜂鳴器500Hz@1000ms
- ADC_Init(); //AD初始化:設置P1的0 1 2 3(搖桿)4(鋰電池電壓)口為AD口,
- POINT_COLOR = Green; //液晶屏畫筆顏色
- BACK_COLOR=Black; //背景色
- LCD_ShowString(0,0 ,"adc0: ");
- LCD_ShowString(0,16,"adc1: ");
- LCD_ShowString(120,0,"adc2: ");
- LCD_ShowString(120,16,"adc3: ");
- LCD_ShowString(0,32,"li_voltage: V");
- LCD_ShowString(104,32,".");
- NRF24L01_Init();
- TX_Mode(); //發送模式
- LCD_ShowString(0,48,"NRF24L01_State: Tx_Mode");
- MPU6050_Init();
- Delay_ms(100);
- POINT_COLOR = Red;
- LCD_DrawLine(0,319,239,319);
- LCD_DrawLine(0,139,239,139);
- LCD_DrawLine(0,229,239,229);
- HMC5883_Init();
- Delay_ms(100);
- POINT_COLOR = Green;
- LCD_DrawCircle(120,100,31);
- LCD_ShowString(0,64,"direction:");
- LCD_ShowString(0,96,"speed:");
- Timer_Init(100); //每10ms中斷一次,參數為百us:100*100us = 10ms
- UART_Init(115200); //串口初始化,使用了串口1的第一通道,設置波特率115200,用于仿真時可以切換到第二通道P36/P37
- TI=1;
- SBUF=0; //這一句使用printf有時是必須的
- INT_Init();
- while(1)
- {
- if(LED_flag) //每1s切換一次LED的狀態
- {LED_flag=0;LED1 = ~LED1;}
- if(ADC_flag)
- {ADC_flag=0;ADC_Task();}
-
- if(adc2 >=80 && Encoder_flag) //使用adc2作開關
- {
- Encoder_flag=0;
- CCAP2H = CCAP2L = (adc3 - 10)*2; //使用搖桿的ADC3調節電機轉速
- Encoder_Task();
- }
- else if(adc2 <=70)
- {
- if(MPU6050_flag) //MPU6050的幾個函數使用了Delay_us(5)
- {MPU6050_flag=0;MPU6050_Task();}
-
- if(HMC5883_flag)
- {HMC5883_flag=0;HMC5883_Task();}
-
- //interrupt.c中把Key_Scan()改成支持連按
- //uart.c中把串口1切換回P30/P31
- if(KEY_flag)
- {
- // KEY_Task();
- if (key_up==0)
- {
- sendMsg(&kb, Key_Num, 1); //sendMsg()函數里面有printf
- }
- else //if(key_up == 1)
- {
- KEY_flag=0;
- if (kb.msg == 1) ;
- sendMsg(&kb, kb.key, 0);
- }
- //printf("%d\n",Key_Num);
- }
- }
- else
- {;}
- }
- }
復制代碼
本開發板的全部資料(壓縮包)下載:
|
-
-
lizhibo.rar
2016-6-20 16:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2.71 MB, 下載次數: 25, 下載積分: 黑幣 -5
-
-
設計說明和問題匯總.zip
2016-6-20 16:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
461.16 KB, 下載次數: 27, 下載積分: 黑幣 -5
-
-
演示程序.rar
2016-6-20 16:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
256.05 KB, 下載次數: 32, 下載積分: 黑幣 -5
-
-
IAP15L2K61S2開發板硬件設計.zip
2016-6-20 16:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
145.2 KB, 下載次數: 43, 下載積分: 黑幣 -5
|