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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6284|回復: 5
收起左側

基于stm32單片機制作的pda

[復制鏈接]
ID:37685 發表于 2013-9-5 14:26 | 顯示全部樓層 |閱讀模式
     斷斷續續搞了有四個月了,STM32是去年十月份開始學習的,到目前為止也快有一年了。雖然還有許多未完善的地方,比如游戲和文件傳送之類。但由于有別的東西等著做,所以暫時先放下了。趁剛考完試有點時間,和大家分享一下。

        這個PDA沒用操作系統,完全跑裸機的。如果真要說有操作系統,那我就稱它為“正點原子系統”。因為有好多部分的代碼(特別是GUI那里)是移植正點原子師兄的畢業設計的,應該也有不少網友看過的了,確實是很強大。真的非常感謝師兄。

       經過一些改進后,現在支持的市面上大部分的SD卡了,包括SD1.0,SD2.0,SDHC,實測可以支持到8G,更大的就未試過,不過我想應該是一樣可以的,因為更高的16G和32G基本上都是SDHC類型。

       文件系統用的是FAT32,這部分確實要花一定時間去學習,記得二月分開始搞FAT文件系統時真的搞得比較頭暈,后來是在三月分和一個同學一齊鉆研才攻破的。這個弄通了,后面的事就好辦多了。另外還有遇到許多其他的問題在這就不多說了。

板子功能:
1、音樂播放器,支持mp3、wma、MIDI等多種音頻格式,支持歌詞顯示,支持頻譜顯示,上一首、下一首、進度條等。(移植師兄的,很好用^_^)
2、圖片瀏覽,支持BMP、JPG、JPEG格式。
3、電子書功能,支持TXT,C,H,LRC文件的閱讀。
4、萬年歷、溫度傳感。
5、紅外。(這個什么用)
6、無線彩燈控制功能。之前是用NRF24L01來做的,控制一塊用LED組成的“SCUT”板。
7、收音機。用的是TEA5767數字收音機芯片。(聲音很小啊。。。)
8、畫畫功能。
9、計算器。
10、加速度傳感器,這個其實可以用來玩游戲的,現在我只用它做動作控制圖片切換,還有畫畫時搖一下就可以清屏(這個比較好玩^_^)。
11、文件傳送。當時是因為一個比賽需要才做這個功能的。只做了TXT文件傳送,以后可以做下其他文件的。
12、藍牙。

       板上加了個PL2303的USB轉串口芯片,因此現在下載程序是比較方便的,插上USB線后就可以下載程序了,不用再去找下載器。而且,它還可以用來做串口通信。這個芯片成本不用兩塊錢,的確是比較實惠的。其實有一個更好玩的東西我沒試過。就是無線下載程序,因為板上有個藍牙,我之前是用它來作無線串口用的,而下載程序也是用串口,所以用來做無線程序下載應該也是可以的。有空再試試。

       有個問題想請教一下大家。是不是所有的TEA5767輸出音量都很小,我的如果不加功放的話,幾乎是聽不見的。另外,我將TEA5767的 Rout,Lout,GND分別連到我的耳塞的對應端口,完全沒聲音。但當我把GND線斷開時,也就是只連上Rout和Lout線,卻是有聲音的(但聲音像上面所說的很小),很奇怪。

完整代碼下載地址:http://www.zg4o1577.cn/f/29782212PDA.rar

以下是文件列表:
http://www.zg4o1577.cn/bbs/dpj-21063-1.html
http://www.zg4o1577.cn/bbs/dpj-21062-1.html
http://www.zg4o1577.cn/bbs/dpj-21061-1.html
http://www.zg4o1577.cn/bbs/dpj-21060-1.html
http://www.zg4o1577.cn/bbs/dpj-21059-1.html

///////////////////////////////////////////////////
//緩存共用說明:
//圖片解碼公用了w25x16的4k緩存(SPI_FLASH_BUF[4096])
//生成readme文件公用了w25x16的4k緩存(SPI_FLASH_BUF[4096])
//字庫更新共用了圖片解碼緩存jpg_buffer[1024]
//MP3共享了jpg_buffer[1024]臨時存放歌曲數據
//MP3共享了SPI_FLASH_BUF[4096]存路徑,從而支持盡量多層文件夾后的音頻文件的播放
//文件管理器調用了SPI_FLASH_BUF[4096]用做文件夾刪除備份路徑
////////////////////////////////////////////////////
//SETUP.SET:
//0-17:觸摸屏校準記錄
//19:屏保延時
//21:黑屏延時
//23:MP3音量
//24:VS10XXram0
//25:VS10XXram1
//26:VS10XXram2
//27:VS10XXram3
///////////////////////////////////////////////////
//TIM4:屏保延時,黑屏延時
///////////////////////////////////////////////////
//連線配置:
//SPI:SCK-PA5,MISO-PA6,MOSI-PA7
//FLASH:CS-PA2,LED-PA8
//SD:CS-PA3,LED-PD2
//觸摸屏:MOSI-PC3,MISO-PC2,CLK-PC0,CS-PC13,PEN-PC1
//液晶:LED-PC10,CS-PC9,RS-PC8,WR-PC7,RD-PC6,RST-PC4,DAT-PB
//按鍵:開機鍵:PA0,菜單鍵:PA13
//VS10XX:RST-PA11,DREQ-PA12,MIS0-PA6,MOSI-PA7,SCK-PA5,XDCS-PA4,XCS-PA1
//////////////////////////////////////////////////////
//圖標存放位置變動:僅修改了picdecoder.c,theme.h,theme.c這三個文件
///////////////////////////////////////////////////
#include <stm32f10x_lib.h>
#include "includes.h"
//定義文件系統結構體
FATFS fatfs;//引用文件系統結構體
void SystemInit(void){}
extern u8 bootup_adjust;
extern u8 bootup_font_update;
#if ICO_TO_SD==0
extern u8 bootup_ico_update;
#endif
void App_Init(void)
{
Stm32_Clock_Init(9);
Delay_Init(72);
Power_Init();
ILI9320_Init();//初始化液晶
clear(0,0,240,320,color(0,0,0));//立馬清屏
Touch_Init();//初始化觸摸屏
Adc_Init();//ADC初始化,為CPU溫度使用
// Load_Touch_Default();//預裝載默認觸摸屏校準值,為未初始化SD卡之前使用觸摸屏做準備
SPI_Flash_Init();//初始化字庫flash
Check_SD();//檢查SD卡,需要用到液晶,須在液晶后初始化
Theme_Init();//這個應用了Flash,須在Flash初始化后初始化
RTC_Init();//這個應用了觸摸屏,必須在觸摸屏初始化之后初始化
Key_Init();//初始化按鍵
///////////////////////
//開機畫面
if(PAin(13)==0)
{
  bootup_adjust=1;
  Touch_Adjust();
  bootup_font_update=1;
  Font_Update();
#if ICO_TO_SD==0
  bootup_ico_update=1;
  Ico_Update();
#endif
}
display_off(1);
show_ico(0,0,240,320,bootup.addr,bootup.size);
display_on(1);
Delay_ms(1000);
Delay_ms(1000);
Delay_ms(1000);
///////////////////////
TimerX_Init(10000,7199,4);//初始化定時器4,初始化屏保
if(Scr_Delay!=0)TimerX_On(4);
VS_Init();//初始化MP3
}
//顯示圖標特效
void show_icos(void)
{
//第一行圖標
show_ico(17,35,73,91,source.addr,source.size);//資源管理器圖標
show_string(5,98,80,"資源管理器",16,color(0,0,0));
show_ico(91,35,147,91,pic.addr,pic.size);//圖片圖標
show_string(103,98,32,"圖庫",16,color(0,0,0));
show_ico(165,35,221,91,drawing.addr,drawing.size);//繪圖板圖標
show_string(153,98,80,"簡易繪圖板",16,color(0,0,0));
//第二行圖標
show_ico(17,123,73,179,notebook.addr,notebook.size);//記事本圖標
show_string(21,186,48,"記事本",16,color(0,0,0));
show_ico(91,123,147,179,music.addr,music.size);//音樂圖標
show_string(103,186,32,"音樂",16,color(0,0,0));
show_ico(165,123,221,179,radio.addr,radio.size);//收音機圖標
show_string(169,186,48,"收音機",16,color(0,0,0));
//第三行圖標
show_ico(17,211,73,267,others.addr,others.size);//其他功能圖標
show_string(13,274,64,"其他功能",16,color(0,0,0));
show_ico(91,211,147,267,date.addr,date.size);//日歷圖標
show_string(103,274,32,"日歷",16,color(0,0,0));
show_ico(165,211,221,267,setup.addr,setup.size);//設置圖標
show_string(177,274,32,"設置",16,color(0,0,0));
//顯示時間背景
clear(0,0,239,17,color(0,0,255));
clear(0,301,239,319,color(0,0,255));
}
extern u8 reflash;//引用時鐘更新標志
u8 app_sta=0;//軟件啟動狀態
int main(void)
{
App_Init();
while(1)
{
  //還原觸摸屏坐標
  Pen_Point.x0=0;
  Pen_Point.y0=0;
  clear(0,0,239,319,color(255,255,255));
  show_icos();//顯示圖標
  while(app_sta==0)
  {
   if(Scr_Flag==1)
   {
    Scr_Flag=2;
    clear(0,0,240,320,color(0,0,0));
   }
   else if(Scr_Flag)
   {
    Screen_Saver();//屏保程序
    if(Scr_Flag==3)//還原圖標
    {
     clear(0,0,240,320,color(255,255,255));
     show_icos();
     Scr_Flag=0;
    }
   }
   else if((reflash)&&(Scr_Flag==0))
   {
    reflash=0;//清空時鐘更新標志
    //顯示時間日期
    Show_Digital_Clock(95,3,12,color(0,255,255),color(0,0,255));
    Show_Digital_Date(53,304,12,color(0,255,255),color(0,0,255));
    Show_Digital_Week(149,304,12,color(0,255,255),color(0,0,255));
   }
   if(Pen_Point.Key_Sta==Key_Down)
   {
    Pen_Int_Set(0);//關閉中斷
    Pen_Point.Key_Sta=Key_Up;
    do//連續讀取數據
    {
     Convert_Pos();
     if(Is_In_Area(15,33,75,107))app_sta=1;//((Pen_Point.x0>15)&&(Pen_Point.x0<75))&&((Pen_Point.y0>33)&&(Pen_Point.y0<107)))app_sta=1;
     else if(Is_In_Area(89,33,149,107))app_sta=2;//((Pen_Point.x0>89)&&(Pen_Point.x0<149))&&((Pen_Point.y0>33)&&(Pen_Point.y0<107)))app_sta=2;
     else if(Is_In_Area(163,33,223,107))app_sta=3;//((Pen_Point.x0>163)&&(Pen_Point.x0<223))&&((Pen_Point.y0>33)&&(Pen_Point.y0<107)))app_sta=3;
     //第二行圖標
     else if(Is_In_Area(15,121,75,193))app_sta=4;//((Pen_Point.x0>15)&&(Pen_Point.x0<75))&&((Pen_Point.y0>121)&&(Pen_Point.y0<193)))app_sta=4;
     else if(Is_In_Area(89,121,149,193))app_sta=5;//((Pen_Point.x0>89)&&(Pen_Point.x0<149))&&((Pen_Point.y0>121)&&(Pen_Point.y0<193)))app_sta=5;
     else if(Is_In_Area(163,121,223,193))app_sta=6;//((Pen_Point.x0>163)&&(Pen_Point.x0<223))&&((Pen_Point.y0>121)&&(Pen_Point.y0<193)))app_sta=6;
     //第三行圖標
     else if(Is_In_Area(15,209,75,281))app_sta=7;//((Pen_Point.x0>15)&&(Pen_Point.x0<75))&&((Pen_Point.y0>209)&&(Pen_Point.y0<281)))app_sta=7;
     else if(Is_In_Area(89,209,149,281))app_sta=8;//((Pen_Point.x0>89)&&(Pen_Point.x0<149))&&((Pen_Point.y0>209)&&(Pen_Point.y0<281)))app_sta=8;
     else if(Is_In_Area(163,209,223,281))app_sta=9;//((Pen_Point.x0>163)&&(Pen_Point.x0<223))&&((Pen_Point.y0>209)&&(Pen_Point.y0<281)))app_sta=9;
     else app_sta=0;
     //顯示選框
     //第一行圖標
     if(app_sta==1)dis_kuang(15,33,74,95,color(255,153,0));//資源管理器圖標
     else dis_kuang(15,33,74,95,color(255,255,255));//資源管理器圖標
     if(app_sta==2)dis_kuang(89,33,148,95,color(255,153,0));//圖片圖標
     else dis_kuang(89,33,148,95,color(255,255,255));//圖片圖標
     if(app_sta==3)dis_kuang(163,33,222,95,color(255,153,0));//繪圖板圖標
     else dis_kuang(163,33,222,95,color(255,255,255));//繪圖板圖標
     //第二行圖標
     if(app_sta==4)dis_kuang(15,121,74,183,color(255,153,0));//記事本圖標
     else dis_kuang(15,121,74,183,color(255,255,255));//記事本圖標
     if(app_sta==5)dis_kuang(89,121,148,183,color(255,153,0));//音樂圖標
     else dis_kuang(89,121,148,183,color(255,255,255));//音樂圖標
     if(app_sta==6)dis_kuang(163,121,222,183,color(255,153,0));//收音機圖標
     else dis_kuang(163,121,222,183,color(255,255,255));//收音機圖標
     //第三行圖標
     if(app_sta==7)dis_kuang(15,209,74,271,color(255,153,0));//其他功能圖標
     else dis_kuang(15,209,74,271,color(255,255,255));//其他功能圖標
     if(app_sta==8)dis_kuang(89,209,148,271,color(255,153,0));//日歷圖標
     else dis_kuang(89,209,148,271,color(255,255,255));//日歷圖標
     if(app_sta==9)dis_kuang(163,209,222,271,color(255,153,0));//設置圖標
     else dis_kuang(163,209,222,271,color(255,255,255));//設置圖標
     Delay_us(50);
    }while(T_PEN==0);
    Pen_Int_Set(1);//開啟中斷
   }
  }
  switch(app_sta)
  {
   case 1:Resource();break;
   case 2:break;
   case 3:Drawing();break;
   case 4:break;
   case 5:Music();break;
   case 6:break;
   case 7:break;
   case 8:Ri_Li();break;
   case 9:Set_Up();break;
  }
  app_sta=0;
}
}

回復

使用道具 舉報

ID:90992 發表于 2015-9-24 20:02 | 顯示全部樓層
頂!漂亮!
回復

使用道具 舉報

ID:59224 發表于 2015-9-24 21:36 | 顯示全部樓層
我去  好資料  贊一個  頂樓主
回復

使用道具 舉報

ID:65916 發表于 2015-9-28 20:25 | 顯示全部樓層
找個完整的程序下來好好學習學習,感謝樓主分享
回復

使用道具 舉報

ID:65916 發表于 2015-9-28 20:32 | 顯示全部樓層
感謝分享,本人初學者,keil5程序編譯不通過提示缺少stm32f10x_lib.h,是我的編譯環境有問題嗎編譯別的程序好著呢啊!再者,原理圖呢?
回復

使用道具 舉報

ID:65916 發表于 2015-9-28 21:53 | 顯示全部樓層
感謝分享,原理圖呢?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品视频 | 亚洲成人精 | 久久久久欧美 | 一区二区三区视频在线观看 | 91精品一区二区三区久久久久久 | 欧美极品在线观看 | 中文字幕视频在线免费 | 天堂久久久久久久 | 一区二区高清在线观看 | 成人影院午夜 | 久久免费视频网 | 午夜一级做a爰片久久毛片 精品综合 | 亚洲国产精品视频一区 | 国产美女h视频 | 国产精品18久久久久久白浆动漫 | 久久一区二区三区四区 | 黄网站涩免费蜜桃网站 | av电影一区二区 | 精品1区 | 老头搡老女人毛片视频在线看 | 国产一区二区三区欧美 | 亚洲欧洲综合av | 凹凸日日摸日日碰夜夜 | 精品视频一二区 | 日韩精品亚洲专区在线观看 | 日韩精品视频在线 | 天天天天天操 | 久久久久久久久久久久亚洲 | 国产 亚洲 网红 主播 | 天天干天天操天天射 | 国产永久免费 | 国产亚洲精品久久久久久牛牛 | 国产精品区一区二区三 | 久久999 | 一级片av| 日韩欧美在线观看 | 中文字幕免费在线 | 一区二区三区在线播放 | 亚洲区视频 | 国产激情网 | 在线观看你懂的网站 |