|
提醒:由于SD卡周邊電路欠缺此圖只能仿真使用!如據(jù)此圖做實(shí)物將損壞你的SD卡  
源程序:
'---------------------------------------------------------------
'簡(jiǎn)單波形播放器(SD/MMC)<Wave1.0.bas>
'程序員:Behnam Zakizade
'>>>所有MMC接口子程序由:Ranjit Diol編寫(xiě)
'>非常感謝迪奧,他允許使用MMC代碼
'編譯器:BASCOM 1.11.9.1
'創(chuàng)建日期:2009年12月5
'版權(quán)所有:(C)2009wwwavr64com
'許可證:這是一個(gè)免費(fèi)固件,不用于商業(yè)用途版本:1.00
'---------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 64
'LCD
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , E = Pind.1 , Rs = Pind.0
Config Lcd = 16 * 2
Cursor Off '光標(biāo)關(guān)閉
Cls
'顯示圖形塊
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 31 , 32 '第一個(gè) #
Deflcdchar 1 , 32 , 32 , 18 , 26 , 30 , 26 , 18 , 32 '播放/暫停 >|
Deflcdchar 2 , 32 , 32 , 2 , 6 , 14 , 6 , 2 , 32 '返回 <<
Deflcdchar 3 , 32 , 32 , 8 , 12 , 14 , 12 , 8 , 32 '前進(jìn) >>
'PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
'常量
Const Msbl = 0
'變量
Dim Indat(512) As Byte '內(nèi)存緩沖區(qū)
Dim Dat As Byte
Dim Resp As Byte '捕獲
Dim I As Word
Dim Addr As Long
Dim Address As Long '尋址的
Dim Fat As String * 5 '文件分配表
Dim Firstaddr As Long '第一地址
Dim Play As Bit
'別名
Cs Alias Portc.5
Clk Alias Portc.3
Miso Alias Pinc.2 'Mcu輸入 <- MMC
Mosi Alias Portc.4 'Mcu輸出 -> MMC
'聲明
Declare Sub Minit 'M初始化
Declare Sub Mread(byval Addr As Long) 'M讀取
Declare Sub Msearch 'M搜索
Declare Sub Mfirstfile 'M第一個(gè)文件
Declare Sub Menu '菜單
Config Pinc.5 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.2 = Input
Waitms 300
Config Spi = Soft , Din = Pinc.2 , Dout = Portc.4 , Ss = Portc.5 , Clock = Portc.3
Spiinit
' 按鍵
Config Pind.6 = Input
Config Pind.7 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
'設(shè)置上拉
Portd.6 = 1
Portd.7 = 1
Portb.2 = 1
Portb.3 = 1
'別名
First_key Alias Pind.6
Play_key Alias Pind.7
Prev_key Alias Pinb.2
Next_key Alias Pinb.3
'_______________________________________________________________________________
'主程序從這里開(kāi)始:
For I = 1 To 100
Pwm1a = 0
Waitms 1
Pwm1a = 64
Waitms 1
Next I
Cls : Lcd " Search Card..." '搜索SD卡。。。
Call Minit '調(diào)用M 初始化
Call Msearch '調(diào)用M搜索
Call Mfirstfile '調(diào)用M第一個(gè)文件
Call Menu ' 調(diào)用菜單
'Adrrr = 281600 '256MB微型的 SD FAT16 起始地址
'Adrrr = 265728 '1GB 微型的 SD FAT16 起始地址
'Adrrr = 396288 '1GB 數(shù)字硬盤(pán) MMC FAT16 起始地址
'Adrrr = 2113024 '1GB 數(shù)字硬盤(pán) MMC FAT32 起始地址
'FAT Addr
'Adrrr = 19968 '256 微型的 SD FAT16/32 地址
'Adrrr = 0 '1GB 微型的 SD FAT16/32 地址
'Adrrr = 130560 '1GB 數(shù)字硬盤(pán) MMC FAT16/32 地址
Xloop:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
'Mosi = 要輸出數(shù)據(jù)的端口引腳的名稱(chēng)。 ( A , B , C , D , E , F ) ( 0 ~ 7 )
'Clk = 時(shí)鐘的端口引腳的名稱(chēng)。 (A, B, C, D, E, F) (0~7)
'Dat = 包含要輸出的數(shù)據(jù)的變量名稱(chēng)。
'Msbl = 輸出位方向和時(shí)鐘邊緣。 (0 到 3)
End
'_______________________________________________________________________________
'DIO提供的初始化SD/MMC[Compsys1.com]
Sub Minit
Set Cs
Dat = &HFF
For I = 1 To 10
Shiftout Mosi , Clk , Dat , Msbl
Next I
Resp = 255
Reset Cs
Cmd0:
Dat = &H40
Shiftout Mosi , Clk , Dat , Msbl
Addr = &H00000000
Shiftout Mosi , Clk , Addr , Msbl
Dat = &H95
Shiftout Mosi , Clk , Dat , Msbl
While Resp <> &H01
Shiftin Miso , Clk , Resp , Msbl
Wend
Set Cs
Waitms 50
Reset Cs
Dat = &HFF
Cmd1:
While Resp <> &H00
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H41
Shiftout Mosi , Clk , Dat , Msbl
Addr = 0
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Wend
Dat = &HFF
Set Cs
End Sub
'_______________________________________________________________________________
'Diol提供的讀取SD/MMC扇區(qū)[Compsys1.com]
Sub Mread(byval Addr As Long)
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H51
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
While Resp <> 0
Shiftin Miso , Clk , Resp , Msbl
Wend
While Resp <> &HFE
Shiftin Miso , Clk , Resp , Msbl
Wend
Dim Stn As Byte , A As String * 20 , C As Byte , J1 As Byte
For I = 1 To 512
Shiftin Miso , Clk , Resp , Msbl
Indat(i) = Resp
If Play = 1 Then
Pwm1a = Resp
Waitus 30
End If
Next I
Shiftin Miso , Clk , Resp , Msbl
Shiftin Miso , Clk , Resp , Msbl
Set Cs
End Sub
'_______________________________________________________________________________
'Behnam提供的搜索SD/MMC的FAT表
Sub Msearch
Address = 0
Do
Call Mread(address)
For I = 1 To 512
'M is First Char Of "MSDOS5.0" In FAT Sector
If Indat(i) = "M" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "MMC OK"
Lowerline
Lcd "MMC FAT: "
'------------------------ 如果FAT16,字節(jié)55到59包含“FAT16”字符串
For I = 55 To 59
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT16" Then
Lcd "FAT16"
End If
'------------------------ 如果FAT32,字節(jié)83到87包含“FAT32”字符串
For I = 83 To 87
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT32" Then
Lcd "FAT32"
End If
Wait 2
End Sub
'_______________________________________________________________________________
'Behnam提供的查找SD/MMC的第一個(gè)文件地址
Sub Mfirstfile
Cls : Lcd " Search File..."
Address = 0
Do
Call Mread(address)
For I = 1 To 512
'1是第一個(gè)文件扇區(qū)中“F1”的最后一個(gè)字符
If Indat(i) = "1" And Indat(i -1) = "F" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "First File:"
Lowerline
Lcd Address
Firstaddr = Address 'Copy FirstFile Addr
Wait 2
End Sub
'_______________________________________________________________________________
Sub Menu
Address = Firstaddr
Play = 1
Cls : Lcd " Wave Player"
Lowerline
Lcd Chr(0) ; Spc(4) ; Chr(1) ; Spc(4) ; Chr(2) ; Spc(4) ; Chr(3)
Do
'Read Keys
If Play_key = 0 Then '暫停
Waitms 300
Do
If Play_key = 0 Then Exit Do '播放
Loop
Waitms 300
End If
If First_key = 0 Then Address = Firstaddr '第一個(gè)
If Prev_key = 0 Then '上一個(gè)
If Address > Firstaddr Then Address = Address - 1048576
Waitms 50
End If
If Next_key = 0 Then 'Next
Address = Address + 1048576
Waitms 50
End If
Call Mread(address)
Address = Address + 512
Loop
End Sub
工程文件用Proteus 8.9打開(kāi)
|
-
-
-
新建文件夾.zip
2021-6-15 17:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
5.02 MB, 下載次數(shù): 14, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|