久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8872|回復: 2
打印 上一主題 下一主題
收起左側

IAP15L2K61S2單片機開發板 PCB+源代碼+電路原理圖

[復制鏈接]
跳轉到指定樓層
樓主
IAP15L2K61S2板子的實物圖如下:




  該IAP15L2K61S2開發板設計資料包括PCB、元件庫,大家可以隨意引用或更改文檔、代碼、PCB,不必等待作者同意。目前完成的資料,希望至少有點STC89C52的基礎看看,當然但愿對于所有的電子愛好者來說,有點參考價值。
PCB:



原理圖:





單片機開發板的測試程序如下:
  1. /**************************************************************************************
  2. 注意事項:按ALT+F7 配置->Target->Memory Mode->Large:variables in XDATA,如果需要用到仿真
  3.                   Debug中設置好仿真和串口號;
  4.                   初始化有液晶背光調節演示,需要把P19的跳線帽插到上面,使LCD背光引腳與P26相連,使
  5.                   用PWM1來調節液晶背光亮度;
  6.                   使用串口1的1通道發送數據打游戲:在lkb.h中增加了KEYMSG結構體
  7.                   mpu6050.c中Accel_x、Accel_y、Accel_z升為全局變量,增加;
  8.                   Accel_y  = (float)GetData(ACCEL_YOUT_H)/286.0f;          //讀取Y軸加速度
  9.                   ADC初始化把AD采樣時間改小了
  10. // *************************************************************************************
  11. #include "config0.h"
  12. #include "delay.h"
  13. #include "lkb.h"
  14. #include "timer.h"
  15. #include "uart.h"
  16. #include <stdio.h>                                                                                 
  17. #include "lcd.h"
  18. #include "adc.h"
  19. #include "mpu6050.h"
  20. #include "image0.h"
  21. #include "pca_pwm.h"
  22. #include "hmc5883l.h"
  23. #include "nrf24l01.h"
  24. #include <math.h>
  25. #include "int.h"

  26. unsigned int adc0,adc1,adc2,adc3,adc4;
  27. float li_voltage=0;

  28. KEYMSG left;
  29. KEYMSG right;
  30. KEYMSG up;
  31. KEYMSG down;
  32. KEYMSG kb;

  33. KEYMSG a_jump; //跳躍
  34. KEYMSG a_shoot;//射擊
  35. KEYMSG a_left;
  36. KEYMSG a_right;

  37. void Encoder_Task();
  38. void MPU6050_Task();
  39. void HMC5883_Task();
  40. void KEY_Task();
  41. void ADC_Task();

  42. void Encoder_Task()
  43. {
  44.         LCD_Show2Num(0,112,Freq,6);
  45.         printf("%d\n",Cnt_Now);        
  46. }

  47. void MPU6050_Task()
  48. {
  49.         static unsigned int j=0;
  50.         Angle_Calcu();                //傾角計算 將得到下面兩個全局變量,使用了網上摘抄的卡爾曼濾波
  51.                                                 //float Angle;   //最終傾斜角度
  52.                                                 //float Gyro_y;  //Y軸角速度
  53.         if(Accel_x >=20 && Accel_x<=90)        
  54.         {
  55.                 sendMsg(&a_jump, 7, 1);
  56.         }
  57.         else if(Accel_x >=-90 && Accel_x<=-20)        
  58.         {
  59.                 sendMsg(&a_shoot, 6, 1);                                         
  60.         }
  61.         else
  62.         {
  63.                 if(a_jump.msg == 1)
  64.                 {
  65.                         sendMsg(&a_jump, 7, 0);
  66.                 }
  67.                 else if(a_shoot.msg == 1)
  68.                 {
  69.                         sendMsg(&a_shoot, 6, 0);
  70.                 }
  71.         }

  72.         if(Accel_y >=20 && Accel_y<=90)        
  73.         {
  74.                 sendMsg(&a_right, 3, 1);
  75.         }
  76.         else if(Accel_y >=-90 && Accel_y<=-20)        
  77.         {
  78.                 sendMsg(&a_left, 2, 1);                                         
  79.         }
  80.         else
  81.         {
  82.                 if(a_right.msg == 1)
  83.                 {
  84.                         sendMsg(&a_right, 3, 0);
  85.                 }
  86.                 else if(a_left.msg == 1)
  87.                 {
  88.                         sendMsg(&a_left, 2, 0);
  89.                 }
  90.         }



  91.         //printf("%.2f,%.2f\n",Angle,Gyro_y);
  92.         j++;
  93.         if(j>=240)
  94.         {
  95.                 j=0;
  96.                 LCD_Fill(0,140,239,318,Black);
  97.                 POINT_COLOR = Red;
  98.                 BACK_COLOR=Black;
  99.                 LCD_DrawLine(0,229,239,229);
  100.                 POINT_COLOR = Green;
  101.         }
  102.         if((int)Angle>-90 && (int)Angle<90 )          //排除初始不穩定雜波
  103.         {
  104.                 LCD_DrawPoint(j,229-(int)Angle);
  105.                 //通過NRF24L01發送出去
  106.                 if(Angle>=0)
  107.                 {
  108.                         Tx_Buf[2] = '+';
  109.                         Tx_Buf[3] =(unsigned char)Angle;        
  110.                 }
  111.                 else
  112.                 {
  113.                         Tx_Buf[2] = '-';
  114.                         Tx_Buf[3] = (unsigned char)(Angle*(-1));
  115.                 }               
  116.                   Transmit(Tx_Buf);                        //24L01發送緩沖數組
  117.                   sta=SPI_Read(READ_REG +  STATUS);        //讀24L01的狀態寄存器
  118.                   if(TX_DS)        //sbit TX_DS =sta^5;數據發送完成中斷,接收到應答信號時此位置1,寫1清除中斷
  119.                   {  
  120.                            //Delay_ms(5);
  121.                            SPI_RW_Reg(WRITE_REG + STATUS,sta);  //寫狀態寄存器,清除中斷
  122.                   }
  123.                 if(MAX_RT)  //如果是發送超時  sbit MAX_RT =sta^4;
  124.                   {                        //達到最多次重發中斷,MAX_RT中斷產生則必須清除后系統才能進行通訊,寫1清除中斷
  125.                            //Delay_ms(5);  
  126.                            SPI_RW_Reg(WRITE_REG + STATUS,sta);
  127.                   }
  128.         }
  129.         
  130. }

  131. void HMC5883_Task()
  132. {
  133.         //static unsigned int m=0;
  134.         static float Last_HMC5883_Angle=0;
  135. //        float Avg_HMC5883_Angle=0;
  136. //        float Last_Avg_HMC5883_Angle=0;
  137. //        float temp_HMC5883_Angle=0;

  138.         Multiple_Read_HMC5883();                                  //角度的變化似乎并不是線性的
  139.         LCD_Show2Num(32,80,(int)HMC5883_Angle,3);
  140.         POINT_COLOR=BACK_COLOR;                                           //三角函數使用弧度而不是度!
  141.         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)));
  142.         POINT_COLOR=Yellow;
  143.         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)));
  144.         Last_HMC5883_Angle=HMC5883_Angle;
  145. //                        //平均值濾波
  146. //                        m++;
  147. //                        temp_HMC5883_Angle+=HMC5883_Angle;        
  148. //                        if(m==5)
  149. //                        {
  150. //                                m=0;
  151. //                                Avg_HMC5883_Angle=temp_HMC5883_Angle/5.0;         //與前面四個值相關聯
  152. //                                //printf("\n\n%.2f\n\n",HMC5883_Angle);          //HMC5883_Angle: float型,0~360
  153. //                                LCD_Show2Num(32,80,(int)Avg_HMC5883_Angle,3);
  154. //                                POINT_COLOR=BACK_COLOR;
  155. //                                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));
  156. //                                POINT_COLOR=Yellow;
  157. //                                LCD_DrawLine(120,100,120+28*cos((Avg_HMC5883_Angle-180.0)/57.3),100+28*sin((Avg_HMC5883_Angle-180.0)/57.3));
  158. //                                Last_Avg_HMC5883_Angle=Avg_HMC5883_Angle;
  159. //                        }
  160. }

  161. void ADC_Task()
  162. {
  163.         static unsigned int i=0;
  164.         static unsigned int k=0;

  165.         POINT_COLOR= Green;
  166.         i++;
  167.         switch(i)
  168.         {
  169.                 case 1: adc0=(int)ADC_GetResult(0);LCD_Show2Num(48,0,adc0,3); break;
  170.                 case 2:        adc1=(int)ADC_GetResult(1);LCD_Show2Num(48,16,adc1,3); break;
  171.                 case 3:        adc2=(int)ADC_GetResult(2);LCD_Show2Num(168,0,adc2,3); break;
  172.                 case 4:        adc3=(int)ADC_GetResult(3);LCD_Show2Num(168,16,adc3,3); break;
  173.                 case 5:        li_voltage=(float)ADC_GetResult(4)*0.019f; break; //adc4*3.3/256*(6.8+3.3)/6.8=adc4*0.019
  174.                 default:
  175.                         i=0;
  176.                         LCD_Show2Num(96,32,(int)li_voltage,1);                                 //顯示整數部分
  177.                         LCD_Show2Num(112,32,((int)(li_voltage*100))%100,2); //顯示小數部分
  178.                         //printf("%d,%d,%d,%d,%.2f\n",adc0,adc1,adc2,adc3,li_voltage);
  179.          }//switch 結束

  180.         k++;
  181.         //printf("%d,%d,", adc1, adc0);
  182.         if(k%2)
  183.         {
  184.                 if(adc1>=0 && adc1<=80)        
  185.                 {
  186.                         sendMsg(&up, 1, 1);
  187.                 }
  188.                 else if(adc1>=170 && adc1<=255)        
  189.                 {
  190.                         sendMsg(&down, 4, 1);                                         
  191.                 }
  192.                 else
  193.                 {
  194.                         if(up.msg == 1)
  195.                         {
  196.                                 sendMsg(&up, 1, 0);
  197.                         }
  198.                         else if(down.msg == 1)
  199.                         {
  200.                                 sendMsg(&down, 4, 0);
  201.                         }
  202.                 }
  203.         }
  204.         else
  205.         {
  206.                 if(adc0>=0 && adc0<=80)        
  207.                 {
  208.                         sendMsg(&left, 3, 1);
  209.                 }
  210.                 else if(adc0>=170 && adc0<=255)        
  211.                 {
  212.                         sendMsg(&right, 2, 1);                                         
  213.                 }
  214.                 else
  215.                 {
  216.                         if(left.msg == 1)
  217.                         {
  218.                                 sendMsg(&left, 3, 0);
  219.                         }
  220.                         else if(right.msg == 1)
  221.                         {
  222.                                 sendMsg(&right, 2, 0);
  223.                         }
  224.                 }
  225.         }
  226. }

  227. //void KEY_Task()
  228. //{
  229. //        if (key_up==0)
  230. //        {
  231. //                sendMsg(&kb, Key_Num, 1);         //sendMsg()函數里面有printf
  232. //        }
  233. //        else  //if(key_up == 1)
  234. //        {
  235. //
  236. //                if (kb.msg == 1) ;
  237. //                        sendMsg(&kb, kb.key, 0);
  238. //        }
  239. //        //printf("%d\n",Key_Num);
  240. //}

  241. /*可以使用單步仿真一步步查看效果*/
  242. void main()
  243. {        
  244.         unsigned int i;

  245.         Delay_ms(10);        
  246.         Delay_us(10);
  247.         PWM2=0;                        //電機制動,可以下拉10k設置引腳為推挽制動

  248.         /*2.2寸、320*240分辨率、SPI接口的LCD初始化,使用STC的硬件SPI,LCD驅動芯片為ILI9340C*/
  249.         LCD_LED=0;                //LCD背光最亮
  250.         SPI_Init();                //IAP15硬件SPI初始化,切換到了SPI的第二通道:SS/P24、MOSI/P23、MISO/P22、SCK/P21
  251.         LCD_Init();                //LCD初始化,廠家提供

  252.         /*LCD休眠演示*/
  253.         LCD_Sleep();        //LCD進入休眠狀態
  254.         Delay_ms(100);        
  255.         LCD_ExitSleep();//LCD退出休眠狀態
  256.         /*LCD刷屏演示:紅橙黃綠青藍紫 白黑*/
  257.         LCD_Clear(Red);        
  258.         LCD_Clear(Orange);
  259.         LCD_Clear(Yellow);
  260.         LCD_Clear(Green);
  261.         LCD_Clear(Cyan);
  262.         LCD_Clear(Blue);
  263.         LCD_Clear(Purple);
  264.         LCD_Clear(White);
  265.         LCD_Clear(Black);
  266.         /*LCD畫線、英文、漢字、數字顯示測試*/
  267.         /*液晶屏左上角坐標為(0,0),右下角坐標為(239,319)*/
  268.         POINT_COLOR=Green; //全局變量
  269.         BACK_COLOR=Black;         //前景色類似于在黑板寫字的各種顏色的粉筆,黑板的顏色就是背景色        
  270.         LCD_ShowString(0,0,"Hello,world!");        //從(0,0)坐標開始顯示字符串“Hello,World!”
  271.         POINT_COLOR=Blue;                                        //可以隨時更改畫筆顏色,顯示不同顏色的數字
  272.         LCD_DrawLine(100,0,240,15);                        //畫一條線段,起始坐標(100,0),終點坐標(240,15)
  273.         LCD_Show2Num(0,16,65535,5);                        //從(0,16)坐標開始顯示0~65535的數字,5為數字位數,即顯示5位數字
  274.         LCD_ShowNum(100,16,987654321,9);        //從(100,16)坐標開始顯示unsigned long型數字(0~4294967295),10為數字位數,即10位數字
  275.         POINT_COLOR=Yellow;
  276.         for(i=32;i<320;i+=16)
  277.         {
  278.                 LCD_ShowString(0,i,"abcdefghijklmnopqrstuvwxyz!");
  279.         }
  280.         LCD_LED=1;                //LCD背光關閉
  281.         Delay_ms(500);
  282.         LCD_LED=0;                //LCD背光最亮
  283.         Delay_ms(500);
  284.         LCD_Clear(Black);                                        //清屏:黑色
  285.         //LCD_Fill(120,120,160,160,Yellow);        //在矩形區域填充色塊,在函數處按F12可以查看函數原型
  286.         LCD_ShowImage(gImage_musi,80,120,78,80);//顯示彩色圖像: 慕司LOGO
  287.         Delay_ms(2000);
  288.         LCD_Clear(Black);
  289.         POINT_COLOR=Red;
  290.         LCD_DrawRectangle(0,0,239,60);         //畫矩形:對角坐標(左上、右下)為(0,0),(239,60)
  291.         POINT_COLOR=Purple;
  292.         LCD_ShowString(80,2,"慕司");          //顯示16*16漢字
  293.         LCD_ShowString(16,22,"為一線微茫憧憬一意孤行,");
  294.         LCD_ShowString(8,42,"這眾生蕓蕓誰不曾如此任性!");
  295.         POINT_COLOR=Cyan;
  296.         LCD_ShowGB3232(80,160,"青春");
  297.         POINT_COLOR=Green;
  298.         LCD_DrawCircle(112,176,48);
  299.         Delay_ms(500);

  300.         PCA_PWM_Init();                //PWM初始化,切換到PWM的第三通道P25/P26/P27,這里僅使用了PWM1(P26,即LCD_LED引腳)
  301.         LCD_LED=0;                        //LCD背光最亮
  302.         for(i=255;i<=0;i--)        //液晶背光256級亮度調節演示:由亮到暗
  303.         {
  304.                 CCAP1H = CCAP1L = i;           //通過調節占空比來調節屏幕亮度
  305.                 Delay_ms(20);
  306.         }
  307.         LCD_LED=1;                        //LCD背光關閉
  308.         for(i=0;i<255;i++)        //液晶背光256級亮度調節演示:由暗到亮
  309.         {
  310.                 CCAP1H = CCAP1L = i;           //通過調節占空比來調節屏幕亮度
  311.                 Delay_ms(20);
  312.         }
  313.         Delay_ms(1000);
  314.         LCD_Clear(Black);

  315.         LKB_Init();                                //LED Key Buzzer:LED、按鍵、蜂鳴器 初始化(設置蜂鳴器端口為推挽輸出)
  316.         Buzzer_Func(500,1000);        //蜂鳴器500Hz@1000ms

  317.         ADC_Init();                           //AD初始化:設置P1的0 1 2 3(搖桿)4(鋰電池電壓)口為AD口,
  318.         POINT_COLOR = Green;            //液晶屏畫筆顏色
  319.         BACK_COLOR=Black;           //背景色
  320.         LCD_ShowString(0,0 ,"adc0:     ");
  321.         LCD_ShowString(0,16,"adc1:     ");
  322.         LCD_ShowString(120,0,"adc2:     ");
  323.         LCD_ShowString(120,16,"adc3:     ");
  324.         LCD_ShowString(0,32,"li_voltage:      V");
  325.         LCD_ShowString(104,32,".");

  326.         NRF24L01_Init();
  327.         TX_Mode();                     //發送模式
  328.         LCD_ShowString(0,48,"NRF24L01_State: Tx_Mode");

  329.         MPU6050_Init();
  330.         Delay_ms(100);
  331.         POINT_COLOR = Red;
  332.         LCD_DrawLine(0,319,239,319);
  333.         LCD_DrawLine(0,139,239,139);
  334.         LCD_DrawLine(0,229,239,229);

  335.         HMC5883_Init();
  336.         Delay_ms(100);
  337.         POINT_COLOR = Green;
  338.         LCD_DrawCircle(120,100,31);
  339.         LCD_ShowString(0,64,"direction:");

  340.         LCD_ShowString(0,96,"speed:");

  341.         Timer_Init(100);         //每10ms中斷一次,參數為百us:100*100us = 10ms

  342.         UART_Init(115200);         //串口初始化,使用了串口1的第一通道,設置波特率115200,用于仿真時可以切換到第二通道P36/P37
  343.         TI=1;
  344.         SBUF=0;                                 //這一句使用printf有時是必須的

  345.         INT_Init();

  346.         while(1)
  347.         {
  348.                 if(LED_flag)                 //每1s切換一次LED的狀態
  349.                 {LED_flag=0;LED1 = ~LED1;}

  350.                 if(ADC_flag)
  351.                 {ADC_flag=0;ADC_Task();}
  352.                
  353.                 if(adc2 >=80 && Encoder_flag)         //使用adc2作開關
  354.                 {
  355.                         Encoder_flag=0;
  356.                         CCAP2H = CCAP2L = (adc3 - 10)*2;        //使用搖桿的ADC3調節電機轉速
  357.                         Encoder_Task();
  358.                 }
  359.                 else  if(adc2 <=70)
  360.                 {
  361.                         if(MPU6050_flag)          //MPU6050的幾個函數使用了Delay_us(5)
  362.                         {MPU6050_flag=0;MPU6050_Task();}
  363.         
  364.                         if(HMC5883_flag)
  365.                         {HMC5883_flag=0;HMC5883_Task();}
  366.         
  367.                         //interrupt.c中把Key_Scan()改成支持連按
  368.                         //uart.c中把串口1切換回P30/P31
  369.                         if(KEY_flag)
  370.                         {
  371. //                                KEY_Task();
  372.                                 if (key_up==0)
  373.                                 {
  374.                                         sendMsg(&kb, Key_Num, 1);         //sendMsg()函數里面有printf
  375.                                 }
  376.                                 else  //if(key_up == 1)
  377.                                 {
  378.                                          KEY_flag=0;
  379.                                         if (kb.msg == 1) ;
  380.                                                 sendMsg(&kb, kb.key, 0);
  381.                                 }
  382.                                 //printf("%d\n",Key_Num);
  383.                         }
  384.                 }
  385.                 else
  386.                         {;}
  387.         }               
  388. }
復制代碼

本開發板的全部資料(壓縮包)下載:



lizhibo.rar

2.71 MB, 下載次數: 25, 下載積分: 黑幣 -5

設計說明和問題匯總.zip

461.16 KB, 下載次數: 27, 下載積分: 黑幣 -5

演示程序.rar

256.05 KB, 下載次數: 32, 下載積分: 黑幣 -5

IAP15L2K61S2開發板硬件設計.zip

145.2 KB, 下載次數: 43, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:67984 發表于 2016-6-22 09:54 | 只看該作者
怎么沒有PCB文件,打開空的
回復

使用道具 舉報

板凳
ID:79544 發表于 2018-4-30 11:19 | 只看該作者
樓主:我也IAP15W4K58S4做AD怎么不好啊?請教一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久 | 一级在线观看 | 91精品国产91久久久久久最新 | a久久 | 国产欧美精品在线观看 | 高清av一区 | 久久久久久亚洲 | 亚洲综合一区二区三区 | 日韩免费在线 | 在线欧美一区二区 | 男人天堂99 | 色接久久| 日韩中文字幕在线视频 | 成人精品在线视频 | 成人午夜黄色 | 欧美日韩国产三级 | 皇色视频在线 | 日韩一区二区三区视频 | 一区免费观看 | 日韩精品在线观看视频 | 免费高潮视频95在线观看网站 | 一区二区免费 | 亚洲精品一区中文字幕乱码 | 精品国产一区二区在线 | 国产日产精品一区二区三区四区 | 国产小视频在线观看 | 天堂一区二区三区 | 亚洲成人精选 | 华丽的挑战在线观看 | 伊人狠狠 | 久久久久久综合 | 国产日韩精品久久 | 99九九久久 | 中文字幕一区二区三区四区五区 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 亚洲欧洲精品成人久久奇米网 | 精产国产伦理一二三区 | 一区二区三区亚洲精品国 | 亚洲国产日韩欧美 | 福利电影在线 | 欧美中文字幕在线 |