freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

大功率晶體管技術(shù)畢業(yè)論文(編輯修改稿)

2025-07-21 21:38 本頁面
 

【文章內(nèi)容簡介】 程序如下所示:void port_init(void){ PORTA = 0x00。 DDRA = 0xFF。 PORTB = 0x21。 DDRB = 0x27。 PORTC = 0x18。 //m103 output only DDRC = 0xFF。 PORTD = 0x08。 DDRD = 0xFA。 PORTE = 0x02。 DDRE = 0xCE。 PORTF = 0x00。 DDRF = 0xF2。 PORTG = 0x1B。 DDRG = 0x1F。} 在生成好的系統(tǒng)框架中,在初始化程序前定義好要用到的宏,例如定義與NAND flash的片選線相連的引腳的宏定義為:define CS3 PC4define NF_CE(x) if(x==1)PORTC|=BIT(CS3)。else PORTCamp。=~BIT(CS3) //x=1,CE為高;x=0,CE為低這樣,當程序中想選中flash讓其工作時就可以這樣寫NF_CE(0);其它宏定義不在詳述。 彩色觸摸屏的調(diào)試單片機部分正常后,把觸屏的外圍元器件焊接好,用導線把觸屏的電源與信號控制與采集板的對應電源、通訊端口等通過端子接好, 為觸屏端子分配圖。 接線時信號板上的P3端子中GND、T0、R、T相連5V與信號板上的數(shù)字電源+5V相連。通上電后發(fā)現(xiàn)觸屏一直閃頻率很快,用萬用表測試未發(fā)現(xiàn)原因,但經(jīng)對電路板的PCB圖分析,可能是因為電源的線太細的原因(+5V電源線上的電流在800多毫安),PCB中的線寬為10mil,這可能太細。于是把觸屏的電源線直接接到電路板中的P1端子的+5V電源上(P1是電源端子,板子上的電就是由這引入的),再上電后觸屏就亮了。程序中通過UART0實現(xiàn)單片機與觸屏的通訊。連接好后上電,觸屏亮,說明電源連接正確了,在程序中編寫了取屏幕上坐標值的小程序來測試通訊,結(jié)果不管點擊屏上的那里,都沒有返回值信息,檢查線路和程序沒錯后懷疑觸屏有問題,經(jīng)過電話詢問廠家得知屏幕背面有一個屏幕返回值指示燈(D1A,亮時為綠色,在屏幕背面靠近晶振的地方),如果點擊屏上任何位置,該指示燈都會亮。結(jié)果調(diào)試發(fā)現(xiàn)該燈通上電后一直亮,說明屏上一直有東西壓著導致指示燈常亮。最后發(fā)現(xiàn)是由于固定觸屏的鐵框壓的太緊所導致的,把屏幕上的貼膜從鐵框中拿出后再調(diào)試,單擊屏幕,程序中就有返回值了。在程序編寫時需要特別注意的是:LJDZU070T觸屏(TFT真彩7寸)顯示屏上的坐標值是以BCD碼(十進制)格式發(fā)送或者接收的,而且彩屏的屏幕為800x480的,所以在程序中設置的坐標變量pos_x,pos_y應為無符號整型的全局變量。如果觸屏上的(200,300)點在程序中讀回來顯示的值應該為0x0200,0x0300,即:在設計軟件時把BCD碼當作十六進制直接處理,不需要轉(zhuǎn)換。要是向屏上(578,321)點發(fā)送信息,程序中就應該送0x0578,0x0321,否則程序中坐標值會先轉(zhuǎn)換成十六進制數(shù)據(jù)(242,141)再發(fā)送到觸屏上。如果發(fā)送接收數(shù)據(jù)是通過中斷進行的,那么,在程序中兩個發(fā)送或接受的數(shù)據(jù)之間要加延時子程序,延時長短由發(fā)送或接收的數(shù)據(jù)長度而定,一般一個字節(jié)1ms。發(fā)送接收數(shù)據(jù)程序中是通過URAT0實現(xiàn)的。其子程序如下所示:void uart0_init(void){ UCSR0B = 0x00。 //disable while setting baud rate UCSR0A = 0x00。 UCSR0C = 0x06。 UBRR0L = 0x2F。 //set baud rate lo UBRR0H = 0x00。 //set baud rate hi UCSR0B = 0x98。}pragma interrupt_handler uart0_rx_isr:19void uart0_rx_isr(void){ unsigned char i,temp1,temp2。 temp1=UDR0。 for(i=0。ireceiPC_len1。i++) { temp2=receive_buff[i+1]。 receive_buff[i]=temp2。 } receive_buff[receiPC_len1]=temp1。 if((receive_buff[0]==0xF0)amp。amp。(receive_buff[1]==0x5A)amp。amp。(receive_buff[2]==0x37)amp。amp。(receive_buff[8]==0xA5)amp。amp。(receive_buff[9]==0xF0)) { pos_x=((int)receive_buff[3]8)+receive_buff[4]。 pos_y=((int)receive_buff[5]8)+receive_buff[6]。//取屏幕上某點的坐標值 NOP()。 }}使用觸屏時需要考慮到屏幕的分辨率,所用觸屏為800x480的,其像素為800*480,即橫向有800個像素點,橫向有480個像素點。在它上面顯示點或者曲線等等都是基于點的,也就是說如果要畫一條直線首先要考慮直線的起點(x0,y0)和終點(x1,y1)的距離,計算一下x0 x1的絕對值x和y0 y1的絕對值y之間的數(shù)量關(guān)系。如果要以(100,100)為起點(200,150)為終點畫一條直線,在屏上顯示的就不是一條直線段了,而是由50個點組成的點直線,如:“……..”。x=0或y=0時,不管怎樣都會是直線;x!=0且y!=0時,只要x!=y,所畫出來的直線都會是由x個或y個點組成的點線(具體點數(shù)由x、y中較小的決定)。只有當畫的曲線為水平的、鉛直的或者45176。角時才會是平滑的曲線。 flash的調(diào)試焊接flash時,用的焊錫絲要細一些()因為所用的flash為K9F1208U0C是48引腳,如果焊錫絲太粗在焊接過程中很容易把相鄰引腳短上。焊好flash后,在程序中編寫讀flash ID的程序來驗證芯片與單片機的通訊。由于所用單片機為ATmega128,所以單片機內(nèi)部沒有與NAND flash 相關(guān)的控制寄存器,因此需要用軟件模擬控制時序來對flash進行讀、寫、擦除等操作。K9F1208U0C型的NAND flash中被分為4096個塊(block),每一個塊中包含32個頁(page),一頁包含528字節(jié),即:1 片K9F1208U0C型NAND flash=4096block;1block=32page;1page=528B=512B(data field) + 16B(spare field);對于flash的讀寫都是以page開始的,但是在讀寫之前必須進行flash的擦寫操作,flash的擦寫是以block為單位進行的。因此形成了三類地址:Column Address(列地址,地址的A[7:0]位)、Page Address(頁地址,地址的A[16:9]位)、Block Address(塊地址,地址的A[25:17]位),即26位的地址。而NAND flash只有8個I/O,所以這8個引腳就作為地址、數(shù)據(jù)、命令的復用端口,因此傳遞地址時只能傳遞8位,所以每讀寫一次NAND flash需要傳送4次(A[7:0]、 A[16:9] 、A[24:17] 、A[25])。NAND flash的一頁有528B,在每一頁中,最后16個字節(jié)(OOB)用于NAND flash執(zhí)行完命令后設置狀態(tài)用,剩余的512B又分為前半部(1st half Page Register)和后半部(2nd half Page Register)。程序中可以通過NAND flash命令對1st half和2nd half以及OOB進行定位。通過NAND flash內(nèi)置的指針指向各自的首地址。 編程時不需要考慮A8這位,因為讀寫數(shù)據(jù)是通過命令00h、01h或50h來指定訪問的是1st half page、2nd half page還是spare field。用于傳遞Column Address的數(shù)據(jù)線有8條(I/O0~I/O7,對應A0~A7),如果要訪問的地址為前256B時通過命令00h就會指向1st half page,但當訪問地址為后256B時,例如訪問某頁的第300B時,由于數(shù)據(jù)線只有8條,最大傳送地址為255,所以當超過255的地址時實際傳送的地址為300256=44,但是由于程序中已經(jīng)通過命令01h把指針指向了2nd half page的首地址(即一頁的第256位),所以最后訪問的地址就是第300位。程序再傳頁地址時就不用考慮A8這位了,直接傳遞A9~A16就可以了。K9F1208U0C型的NAND : flash中命令代碼 第一次對flash訪問時要先對其進行初始無效的塊(Initial Invalid Block),: 初始化無效的塊 初始化無效的塊后,編寫flash的各種子程序。首先編寫讀取flash ID的子程序。 讀芯片ID時序獲取ID子程序如下:void get_ID(uint i){ID_code_array[i]=PINA。//ID_code。}void NF_readID(void){ NF_ALE(0)。 NF_RE(1)。 NF_CLE(1)。 NF_WE(0)。 NF_CE(0)。 PORTA=0x90。 NF_WE(1)。 NF_CLE(0)。 NF_ALE(1)。 NF_WE(0)。 PORTA=0x00。 NF_WE(1)。 NF_ALE(0)。 DDRA=0x00。 NF_RE(0)。 get_ID(0)。 NF_RE(1)。 NF_RE(0)。 get_ID(1)。 NF_RE(1)。 NF_RE(0)。 get_ID(2)。 NF_RE(1)。 NF_RE(0)。 get_ID(3)。 NF_RE(1)。 DDRA=0xff。}編寫好程序運行后,發(fā)現(xiàn)讀ID號怎么也讀不回來,檢查編寫的時序無誤后,又檢查了一下單片機的I/O口初始化程序,對照原理圖發(fā)現(xiàn)PB口中有個關(guān)鍵引腳在初始化時配置錯了。開始時DDRB = 0x27;改正后為DDRB = 0xA7;PB7為CLE引腳,應該是輸出(即為1),初始化設置為輸入了。: 讀取芯片ID成功 NAND : NAND Flash的ID號分配表 NAND flash的ID號讀取成功說明硬件焊接方面已經(jīng)通過,接下來調(diào)試flash的讀、寫及擦除功能。 。 塊擦除時序圖在對flash進行寫操作之前,必須對其進行擦除操作,因為NAND flash中的位只能從1變成0,不能從0變成1,所以要想寫進去必須通過擦除命令把相關(guān)塊擦除為全1。 頁編程時序圖 寫操作中數(shù)據(jù)是在WE的上升沿鎖存,地址分四次送到flash中。寫完數(shù)據(jù)要送結(jié)束寫編程的命令字70h,然后把相應的I/O口方向置成輸入,讀去I/O0的值,若為0則寫成功,否則寫失敗。 頁讀取時序圖 頁讀取是驗證擦除成功和寫成功的最好途徑。通過讀取回來的數(shù)據(jù)判斷存儲與讀取的正確與否。 從flash中讀取的一頁數(shù)據(jù) ~255整數(shù)數(shù)據(jù)后讀回來的值。 從flash讀取回來的數(shù)據(jù)為了防止寫入和讀取的數(shù)據(jù)不對,在讀取數(shù)據(jù)時需要進行ECC校驗(Error Correcting Code),ECC能夠糾正單比的錯誤和檢測雙比特的錯誤,而且計算速度很快,但對于1比特以上的錯誤無法糾正,對2比特以上的錯誤不保證能檢測。當往NANDflash的page中寫入數(shù)據(jù)的時候,每256字節(jié)生成一個ECC校驗和,稱之為原ECC校驗和,保存到page的OOB(spare field)數(shù)據(jù)區(qū)中;當從NANDflash中讀取數(shù)據(jù)的時候,每256字節(jié)生成一個ECC校驗和,稱之為新ECC校驗和。校驗的時候從OOB區(qū)中讀出的原ECC校驗和新ECC校驗和按位異或,如果結(jié)果為0,則表示不存在錯(或是出現(xiàn)了ECC無法檢測的錯誤);若3個字節(jié)異或結(jié)果中存在11個比特位為1,表示存在一個比特錯誤,且可糾正;若3個字節(jié)異或結(jié)果中只存在1個比特位為1,表示OOB區(qū)出錯;其他情況均表示出現(xiàn)了無法糾正的錯誤。 模擬量
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1