




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、設計名稱:A Fancy Digital Clock所在院系:華技大學電信系班級電信 0903 班姓名:外力江學號:u200813654指導:曾喻江目錄:1 實驗名稱32 實驗內容33 實驗要求33.1 硬件要求33.2 功能要求34 系統設計34.1:系統框圖34.2:系統各部分的說明34.2.1:VGA contoler34.2.2:8MB SDRAM44.2.3:Timekeeper44.2.4:Nios 44.3:系統的實現44.3.1VGA Controller44.3.2:8MB SDRAM74.3.3:Time keeper75.系統86.總結96.1 心得體會106.2 待改進
2、功能116.3 修改過的部分117.Main.c 代碼析138.完成任務381 實驗名稱:A Fancy Digital Clock2 實驗內容:用 quartus設計一個 A Fancy Digital Clock3 實驗要求:3.1 硬件要求:要在 DE2 上實現 A Fancy Digital Clock 的設計3.2 功能要求:a)要具有時鐘的功能,既是能夠顯示時間,日期,。b)要具有數字相框的功能,既是能夠隨機選擇圖片顯示在我們的界面上。c)數字相框的顯示要用流水線的方式實現。d)時間改變時,改變的動畫要有重力的效果。e)有簡單的鬧鐘功能。4 系統設計:4.1:系統框圖還有一個LED
3、 顯示部分接到 Avalon bus4.2:系統各部分的說明鬧鐘到點時的值。4.2.1:VGA contolera) VGA peripheral這一部分實現的功能是像素的收集與,并且一系列的輸出功能。b) Framebuffer這一部分是將SRAM 作為 VGA 輸出地緩存器,用來的下一個圖片。當前顯示圖片c) VGA DAC完成轉換功能。4.2.2:8MB SDRAM同步動態隨機器,同步是指 Memory 工作需要同步時鐘,內部令的與數據的傳輸都以它為基準;動態是指陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次,而是自由指定地址進行數據讀寫。跟時鐘同步用來圖片信息,位圖等。可
4、以存代碼.4.2.3:Time keeper原作者為了方便新建timer 模塊除了時鐘功能之外還有中斷來調時鐘.用來時序,實現時鐘的時間與產生。提供時鐘中斷.4.2.4:Nios 此部分編寫代碼,來實現時鐘顯示,重力翻頁效果,時間調整,圖片循環隨機顯示。鬧鐘實現.4.3:系統的實現4.3.1VGA Controller:SRAM 直接與 VGA設備連接,而且不與Avalon 總線連接。它只當做VGA 的輸出幀緩存,因此我們讀一個 16 位的數據需要 1 個時鐘周期,寫一個 16 位的數據需要 2 個時鐘周期。在整個VGA Controller 中,我們主要是為了實現下面 7 個方面的設計:a)
5、 顯示成面的設計在顯示器上一共分為三層:第一層是背景,第二層是右邊圖片的顯示,第三層是左邊時鐘的顯示。第一層背景的生成并不是直接從內存里面的,而是通過函數來生成的。其是:ED2版里面的內存不夠大,而存放背景需要很大的內存空間,因此為了節約內存,我們使用函數來生成背景。具體函數是:R 的值由當前像素點的 x 坐標加上一個數值來給定,B 的值由當前像素點的 y 坐標加上一個數值來給定.而 G 的值則直接付全 1.因為我們的數據總線的位寬為 16 位,因此我們所取的像素點也是 16 位的,并且人為的法僅僅是為了是系統結構簡單化。R5G6B5 這種形式。這種做第二層右邊圖片的設計,右邊圖片是直接從內存
6、中提取的,由于屏幕的寬度和器大小有限,因此我們需要將內存中的圖片的格式做一個規定 144*height,在生成頭文件時就規定了它的寬度,為了實現上的簡單,我們正好把它設計為屏幕寬度的一半。圖片文件先是從SDRAM 中讀到 SRAM 中,然后再從 SRAM 中輸出到屏幕上。第三層左邊時鐘的顯示設計,此部分的顯示有tiles 來實現,tiles 如何時鐘里面的數字,文字可以參考后面 tiles 的設計。b) Tiles 的設計一個tile 設計為 32X32 的像素,并且附帶 4 為的深度。一共設計 72 個 tiles(所有的 tiles 都在下圖)。tiles 存放在 RAM 中,因為 SRA
7、M中已經存放了圖片,沒有的空間留給 tiles 存放,放在 SDRAM 沒有 SRAM 中好組織。大寫數字,每一個都有 4 個 tiles 組合而成,小寫的數字和字母都只由一個 tile 來實現。Tiles在屏幕上所放置的位置和位置編號如下圖所示。(四個 tiles一個大數字):(tiles 在屏幕上的顯示位置):c) 混色的設計混色的問題就是解決背景色和時間數字,圖片的疊加問題。我們引進并設置 alpha 值來解決這個問題,alpha 值是調整顏色深度的一個指標,它滿足下面這個公式:d) 著色的設計的設計很簡單,既是將每一個 tile 的顏色值 R,G,B 都改成 11111111(這種情況
8、就是白色)。e) SRAM 的結構設計SRAM 僅僅實現一個功能,既是 256X1024 的 16 位的幀輸出緩存器。但是因為右半邊屏幕的分辨率是 320X480,而 SRAM 每一行最大只能存 256 個像素,因此我們想要將內存結構設計的簡單,可以將圖片的于系統的設計。那么 SRAM 中就會有那些內存)。f) 硬件和軟件的接口格式設計為 160X240,這樣內存結構就很清晰了,有利顯示到屏幕上的一部分內存了(列數大于 60 的我們整個系統中,地址線將作為兩種用處,其一是傳輸數據,其二是命令g) 命令的提交設計。為了防止命令時序的,我們在設置命令提交時,在 RAM 中設計了一個 ring 用來
9、存放命令,并且設計了兩個指針,一個指向 head,一個指向 back。當有命令提交時,head 加一,當命令完成時 back 加一,CPU 所執行的任務就是 back 所指向指向的是同一個位置時,說明ring 里面沒有命令了。令,當 back 和 head4.3.2:8MB SDRAMSDRAM 中為處理器存放指令和數據。它基本上是由 SOPC 來實現的,作為處理器的高速緩存。4.3.3:Time keeper在 50Mhz 的時鐘下,VGA設備每 5 千萬個時鐘周期會產生一個中斷信號用來給數字鐘計時,也就是每隔一秒產生一個時鐘信號。在有按鍵發生時,VGA設備也會相應的產生一個中斷信號,用來改
10、變顯示的數據。實現相應的功能。5.系統:原代碼的圖形為:修改以后得到的圖形為:6.總結:6.1 心得體會本次課題中出現了很多問題,其中最為主要的一些問題是如下幾個方1.版本問題:我用的是Quartus 9.1。在 sopc Builder 生成系統發生兩個錯誤原作者編寫 timer 模塊和 fdc_模塊的地址(address),輸入輸出數據端口(readdata,writedata)定義類型unsigned 但在 9.1 里不支持這種類型。解決方案:改變他們三個類型然后在編譯按錯誤找出其他地方類型不一致的地方用強制類型轉換。2.WIN7 系統和 Nios 不兼容造成編譯失敗,只 有少數情況下才
11、較大而 heap size 設置太小的造成的. 而多重復幾次可以。因為工程文件比的是因為這個,結果積累makefile 牽涉到許多次的編譯以及工作,而其中的 heap 沒有得到很好的下來就超過了所設置的heap 大小。可以在 64 位操作系統里面沒有這種問題。6.2 待改進的功能待改進的功能就是,將數字的顯示的空格區間全部填滿,這樣看起來更加舒服。還有可以添加的是秒表計時器,用來精確計時。在鬧鐘部分把鬧鐘顯示到屏幕上并用 key 來調時間,鬧鐘的相應部分我已經做出來了。6.3 修改部分鬧鐘部分:此鬧鐘達到預定的時間點時啟動LED發光延遲一段時間就關閉。這部分鬧鐘有點簡單,以后可以把鬧鐘部分顯示
12、到屏幕上來調.void comparator()/鬧鐘實現int i;if(bellhours=hours&&bellminutes=minutes&&bellseconds=seconds)for(i=0;i<10;i+)IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,1);/LED發光usleep(100000); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0);調鬧鐘:void alter_sec(void)bellseconds+;if(bellseconds>59 )
13、bellseconds=0;void alter_min(void)bellminutes+;if(bellminutes >59)bellminutes=0;void alter_hou(void)bellhours+;if(bellhours >23)bellhours = 0;/按鍵中斷服務void KEY_ISR(void* context,alt_u32 id)IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0);IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xff); flag=
14、IORD_ALTERA_AVALON_PIO_DATA(TIMERMODULE_BASE);if(flag)int button_value = IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);/取按鍵值if(button_valuealter_sec();&0x01)=0)/比較按鍵值并調鬧鐘if(button_valuealter_min();if(button_valuealter_hou();/按鍵初始化&0x02)=0)&0x04)=0)void button_init()IOWR_ALTERA_AVALON_PIO_IRQ
15、_MASK(KEY_PIO_BASE, 0xff); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0);alt_irq_register(KEY_PIO_IRQ, NULL,(void*)KEY_ISR);a) 圖片的替換圖片的替換是將我們生成的圖片放到顯示器上顯示,將原來程序中的圖片去掉。具體做法是,首先,在網上python 軟件然后就用在 helpercode 的toarray.py 文件生成為.h 式的文件,然后將每一個文件當做頭文件,替換掉原來的圖片文件。然后將main.c 中的相應部分進行改動,首先是include 處,將那些被我們
16、刪除了的頭文件的include 去掉,并且添加新的include,用來 include 新的圖片頭文件。其次,將圖片數組unsigned short *ima 中的名稱相應的替換成我們的圖片文件名。最后,將圖片高度數組iheightsNUM_PICS相應圖片高度替換成現有圖片高度。這樣,即可完成對圖片的替換。b) 數字突出行修改數字突出修改是將數字時鐘顯示時間的數字背景顏色進行修改,我們這一部分的修改是在硬件 vhdl 代碼中進行的,通過對代碼的閱讀與理解,我么發現在該代碼中,fdc_.vhd主要寫的是有關圖片顯示,時鐘數字顯示,背景顏色生成,數字改變動畫的實現這么幾個功能。因此,我們要修改背
17、景顏色,就必須在 fdc_.vhd 中修改相應的代碼。在fdc_.vhd 中,我們通過閱讀代碼發現,可以通過 alpha 的值來數字背景的顏色是哪一段,因為 alpha 的時表示的是混色的深度,當 alpha 為 0 時,表明表面的顏色的0,也就是說該處表面顏色完以看到,了背景的顏色,因此,找到 alpha 為 0 的代碼,我們可if alpha = x"0" then- Show the background-no occlusionVGA_R<=(others => '0');-std_logic_vector(bg_x);VGA_B<
18、=std_logic_vector(bg_x);-std_logic_vector(bg_y);VGA_G<=std_logic_vector(bg_y);- (others => '0');以上代碼,后面的注釋部分(每一行兩個杠之后的代碼是注釋部分,兩個杠指的是-)是原代碼的寫法,原代碼修改了,也就是將 R,G,B 三個通道的值的生成方法變了一下,就實現了顏色的變換。因為源代碼這個地方的顏色生成方法與背景的一樣,這樣看起來這部分的顏色就和背景顏色一個樣,但是這樣的話,我感覺不夠使得數字顯眼,因此此處的背景顏色生成函數進行修改變化。也就是上面代碼的修改方法。但是這樣
19、后,發現數字突出行效果并不好,于是又將數字突出行的背景顏色直接改為只有紅色的狀態,代碼如下:if alpha = x"0" then- Show the background-no occlusionVGA_R VGA_BVGA_G<=<=<=std_logic_vector(bg_x); (others => '0');(others => '0');c) 背景顏色修改通過上面 b)的分析,可以知道,背景顏色就是當 alpha 值為 1 的時候的顏色,也就是說 toplevel 的顏色為全透明時顯示的顏色。我們
20、找到了該段代碼,并進行修改:if alpha = x"0" thenelse- Show the background - no occlusionVGA_R <=gai guo(others => '0');-std_logic_vector(bg_x);-xiuVGA_B <=std_logic_vector(bg_x);-std_logic_vector(bg_y);VGA_G <=std_logic_vector(bg_y);-(others => '0');end if;在該部分代碼,R,G,B 三個通
21、道的值的生成方法進行了改變,將 R 的生成方法改成 G的,將 B 的生成方法改成 R 的,將 G 的生成方法改成 B 的,這樣就得到了我們最后的背景顏色。d) 數字高亮度選中顏色修改由于原作者在寫設置時鐘時間的代碼時,將選中顏色調的很不明顯,因此,該處的顏色修改成容易分辨的。選中要修改的部分時,就是TINT 為 1 的時候,這時候,顏色進行改變,代碼如下:if tint = '1' thentemp13(C15 -:= ("111111111" * alpha) + (bg_x(9 downtoalpha);1)*VGA_R<= std_logic_v
22、ector(temp13(12 downto 3);temp13 := ("001001000" * alpha) + bg_y(9 downto(C15 - alpha);1)*VGA_B <= std_logic_vector(temp13(12 downto 3);此代碼中,VGA_R 與VGA_B 的顏色值都是混色而來的,該處的基色進行修改,也就是temp13 的第一項,我們都改成了 111111111。這樣生成的顏色就比較顯眼了,能夠讓人一眼看出來修改的部分是那一部分的時間。7.源程序:(注釋與代碼之比大于 1:3)#include #include#inc
23、lude<io.h><system.h><stdio.h>#include<altera_avalon_pio_regs.h> #include <unistd.h>#include <system.h>/* -Automatically generatedstart*/headers#include #include #include#include"BitstreamVeraMono.h" "fg_asianlick.h" "fg_aiguang.h"&quo
24、t;fg_bridge.h"/#include "fg_library.h"/#include "fg_cmongler.h"#include #include #include#include"fg_cone.h" "fg_dice.h" "fg_farm.h""fg_frogdog.h"#include "fg_japcar.h"#include "fg_lionking.h"/*#include "fg_sna
25、il.h"#include #include #include#include"fg_osprey.h" "fg_raptor.h" "fg_sagan.h""fg_joseph.h"*/#include"me.h" #include"meijing.h" #include"meijing1.h" #include"meijing2.h" #include"meijing3.h" #include"
26、;wa.h" #include"wa1.h"#include"think.h"/*Automaticallyheaders end -*/generated/*-Definitions-*/#define #define #define #define #define #define #define #define #define #define #define #define#defineOP_WRITE (0x0 << 1) /0000 OP_SET_VERT_OFFSET (0x1 << 1) /0010 OP_S
27、EEK_ROW (0x4 << 1) /0040 OP_TILE_SET_CURRENT (0x5 << 1) /0050OP_TILE_WRITE (0x6 << 1) /0060OP_TILE_SEEK (0x7 OP_TILE_TO_CHANGEOP_TILE_CHANGE_TO<< 1) /0070(0x8(0xA<< 1) /0080<< 1) /00A0(0xB << 1) /00B0OP_TILE_SET_ANIM_STATEOP_TINT (0xC << 1) /00C0 OP_TI
28、LE_TRANSFORMER_CHANGE (0xD << 1) /00D0 SEE_THRU 2047NUM_PICS 18/*-End_Definitions-*/*-Arrays_and_Variable_Definitions*/const int daytext79 = /tiles 顯示位置的編號TILE_blank, TILE_blank, TILE_M, TILE_o, TILE_n, TILE_d, TILE_a,TILE_y, TILE_blank,/這一行是顯示器第一行的TILE的相應位置的各個TILETILE_blank, TILE_T, TILE_u, T
29、ILE_e, TILE_s, TILE_d, TILE_a,TILE_y, TILE_blank,/這二行是顯示器第一行的TILE的相應位置的各個TILETILE_W, TILE_e, TILE_d, TILE_n, TILE_e, TILE_s, TILE_d, TILE_a,TILE_y,/這三行是顯示器第一行的TILE的相應位置的各個TILETILE_blank, TILE_T, TILE_h, TILE_u, TILE_r, TILE_s, TILE_d,TILE_a, TILE_y,/這四行是顯示器第一行的TILE的相應位置的各個TILETILE_blank, TILE_blank,
30、 TILE_F, TILE_r, TILE_i, TILE_d, TILE_a,TILE_y, TILE_blank,/這五行是顯示器第一行的TILE的相應位置的各個TILETILE_blank, TILE_S, TILE_a, TILE_t, TILE_u, TILE_r, TILE_d,TILE_a, TILE_y,/這六行是顯示器第一行的TILE的相應位置的各個TILETILE_blank, TILE_blank, TILE_S, TILE_u, TILE_n, TILE_d, TILE_a,TILE_y, TILE_blank,/這七行是顯示器第一行的TILE的相應位置的各個TILE;
31、/-時間的初始化-int int intintsecondsminutes hours = 54;= 59;11;letterDay = 0; / 0 is monday, 1 tuesday, etc., used for displayingdays in wordsint int int int int intintday = 18;year = 11; / 20XX month = 12; bellseconds=20; bellminutes=0; bellhours=12; bell;/position 0 is minutes,1 is hours,2 is am or pm,
32、3 is day, 4 is month,5 is yearint incrementposition = 0;int flag=0;/ stores the last second in which a button was pressed, used to resettintinttintTimerSeconds = 0;intintPM = 1; /if 0, its PM. 1 = PMtint = 0; / if tint is 1 then whatever incrementposition is shouldbe tintedint intintx = 0;y = 0;time
33、sThrough = 0;unsigned short posPrev;int currentPicRow = 0;int currentPic = 0;unsignedunsignedint lfsr = 0xACE1u;randpic;unsigned unsigned unsignedunsignedshort short shortshortday_change; long_month; short_month;end_month;/* -List ofavailable images -*/unsigned short *imagesNUM_PICS imagesNUM_PICS=/
34、名字為fg_cmongler的圖片存放在/ fg_cmongler,/fg_asianlick, fg_frogdog, fg_farm, fg_japcar, fg_aiguang, fg_bridge,/ fg_hustgate,/ fg_library, fg_cone, fg_dice, fg_lionking,/ fg_snail,/ fg_osprey,/fg_raptor,/ fg_sagan,/fg_joseph, me,meijing, meijing1, meijing2, meijing3, wa,wa1, think, fg_frogdog, fg_farm,fg_ja
35、pcar,;/* *List*/int heightsNUM_PICS =/ 176, /* cmongler */194, asianlick 138, /* frogdog */ 90, /* farm */ 226,/ japcar99, /* aiguang */ 108, /* bridge */ 98, /* chair */125, /* daqiao */144, /* hust */94, /* gaotie */ 99, /* hustgate */ 108, /* library */oftheheightsoftheimagesabove142,108,102,/*/*
36、/*cone */dice */ lionking */86, /* snail */95, /* osprey */164, /* raptor */119, /* sagan */189 /* jospeh */ 108,/me 94,/meijing 93,/meijing1 108,/meijing2 102,/meijing3 108,/think 144,/wa108,/wa1138,90,226,;/*-Random NumberFunction-*/void random_number() /產生隨機數,用來隨機選取圖像unsigned int bit;do /先做一系列的位運
37、算,得到lfsr的值bit = (lfsr >> 0) (lfsr >> 2) (lfsr >> 3) (lfsr >>5) & 1; lfsr = (lfsr >> 1) | (bit << 15); while (randpic = lfsr % NUM_PICS); /*運算過后的lfsr的值對NUM_PICS的值取模后,若等于上一次randpic值,則繼續做運算。若不相等,則將取模后的值賦給randpic,從而保證randpic的值不同,且隨機*/randpic = lfsr % NUM_PICS;/*-E
38、nd Random Number Function-*/*Setup_Tiles_Function*/void setup_tiles() /在內存中tilesint i = 0;int j = 0;for (i = 0; i < 72; i+)IOWR_16DIRECT(VGA_BASE, OP_TILE_SET_CURRENT, i); /將i作為當前的tile的標號IOWR_16DIRECT(VGA_BASE, OP_TILE_SEEK, 0); /將0寫入所找到的tile的內存,起到將當前內存清零的效果for (j = 0; j < 256; j+) IOWR_16DIRE
39、CT(VGA_BASE,OP_TILE_WRITE, tile_dataij);/將tile的data寫入到所找到的當前tile的內存/* Now blank out centers for clock effect */for (i = 0; i < 32; i+) /將小數字和字母的tile中間一行改成空白的IOWR_16DIRECT(VGA_BASE, OP_TILE_SET_CURRENT, i); /將i的值賦給當前tileIOWR_16DIRECT(VGA_BASE, OP_TILE_SEEK, 15 * 8); /找到下一個tile,然后賦值15*8for (j = 0;
40、j < 16; j+) IOWR_16DIRECT(VGA_BASE,OP_TILE_WRITE, 0); /將中間的部分全部寫0,以達到中間顯示空白裂縫的目的/* Blank out centers of big number tiles */for (i = 32; i < 72; i+) /將大數字的4個tiles所組成的圖片的中間一行改成空白IOWR_16DIRECT(VGA_BASE,OP_TILE_SET_CURRENT, i);if (i-1) % 4 = 1) |shit */(i-1) % 4 = 2) /* CLean up thisIOWR_16DIRECT(
41、VGA_BASE,OP_TILE_SEEK, 0);else IOWR_16DIRECT(VGA_BASE, OP_TILE_SEEK, 31 * 8);for (j = 0; j < 8; j+) IOWR_16DIRECT(VGA_BASE, OP_TILE_WRITE, 0);/*End_Setup_Tiles_Function*/*-Change_Tile_Function-*/void change_tile(const int currentTile, const int newTile, consttransformTile,intconst int animationSt
42、ate, const int tint) /定義并實現change_tile函數,用來改變某位置的tile,/以實現時鐘數字,字母的改變 /* This is the only function which changes the tile which thecurrent tile will* animate to ANIMATION state is either 0 for clear, 1 for noanimation, and 2* for animation, but the msb of the animation tells whetherit is part of a* b
43、ig number or small. */IOWR_16DIRECT(VGA_BASE, OP_TILE_TO_CHANGE, currentTile);/執行命令,尋找到當前需要改變的tileIOWR_16DIRECT(VGA_BASE, OP_TILE_CHANGE_TO, newTile);/執行命令,將當先需要改變的tile換成要變換/成的tileIOWR_16DIRECT(VGA_BASE, OP_TILE_SET_ANIM_STATE,animationState); /是否對當先tile實現重力翻/轉動畫效果IOWR_16DIRECT(VGA_BASE, OP_TILE_TRA
44、NSFORMER_CHANGE,transformTile);/改變后,指出下一個需要/改變的tile位置IOWR_16DIRECT(VGA_BASE, OP_TINT, tint);/對當前tile執行命令/*-End_Change_Tile_Function-*/*Place_Letter_Days_Function*/void place_letter_days(const int animation, const int tint)/將當前日期寫到顯示器上/* places the day of week as a word */int x;const int base = 41;fo
45、r (x = 0; x < 9; x+)/選擇tilechange_tile(base + x, daytextletterDayx,daytext(letterDay + 1) % 7x, animation, tint);/*End_Place_Letters_Days_Function*/*-Place_AM_PM_Function-*/void place_am_pm(const int animation, const int tint)/將當前的時間是上午還是下午寫到顯示器上change_tile(28, TILE_A+3*PM, TILE_A+3*(PM1), animat
46、ion,tint);change_tile(29, TILE_M, TILE_M, animation, tint);/*-End_Place_AM_PM_Function-*/*Place_Seconds_Function*/void place_seconds() /當時間變了,將時間的秒顯示到屏幕相應位置/if seconds 59, change 10s place to 0 not 6if (seconds = 59) change_tile(25,TILE_0 + seconds/10,TILE_0,2,0);/if seconds singles place is 9, chan
47、ge 10s to plus 1else if (seconds%10=9) change_tile(25,TILE_0 +seconds/10,TILE_0+seconds/10+1,2,0);else change_tile(25,TILE_0 + seconds/10,TILE_0+seconds/10+1,1,0);if (seconds % 10 = 9) change_tile(26,TILE_0 + seconds % 10,TILE_0,2,0);else change_tile(26,TILE_0 + seconds % 10,TILE_0+seconds%10 +1,2,0
48、);/*End_Place_Seconds_Function*/*-Place_Ones_Minutes-*/void place_ones_minutes(const int animation, const int tint)/當時間變了,將時間的分的個位顯示到屏幕相應位置 int correction;int tileOnes = TILE_0_NW + 4 * (minutes % 10);if (minutes % 10 = 9) correction = -40;else correction = 0;change_tile(8, tileOnes, tileOnes + 4 +
49、correction, animation, tint);change_tile(9, tileOnes + 1, tileOnes + 5 + correction, animation, tint);change_tile(18, tileOnes + 2, tileOnes + 6 +correction, animation, tint);change_tile(19, tileOnes + 3, tileOnes + 7 + correction,animation, tint);/*-End_Place_Ones_Minutes-*/*Place_Tens_Minutes*/voi
50、d place_tens_minutes(const int animation, const int tint)/當時間變了,將時間的分的十位顯示到屏幕相應位置 int correction;int tileTens = TILE_0_NW + 4 * (minutes / 10);if (minutes/10 = 5) correction = -24;else correction = 0;change_tile(6, tileTens, tileTens + 4 + correction, animation, tint);change_tile(7, tileTens + 1, tileTens + 5 + correction, animation,tint);change_tile(16, tileTens + 2, tileTens + 6 +correction, animation,tint);change_tile(17, tileTens + 3, tileTens + 7 + correction,animation, tint);/*End_Place_Tens_Minutes*/*-Place_Ones_Hours
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生活垃圾焚燒處理廠初步設計方案分析
- 農業光伏電站項目發展前景與可行性分析
- 廠房屋頂分布式光伏項目發展潛力分析
- 8 人之初 第二課時 教學設計-2024-2025學年語文一年級下冊統編版
- 注冊電氣工程師必考題含答案2025
- 一級建造師考前沖刺必刷題附答案2024
- 人教版七年級上冊地理教學設計+同步測試
- 旅游攻略寫作培訓
- 2025年高級經紀專業技術資格重點試題帶答案
- 英語角的探索之旅
- 初中期末家長會模板
- 駕駛員安全管理培訓
- 道路交通運輸生產安全事故責任追究典型案例(企業專題:安全管理人員盡職免責篇)
- 書香致遠閱讀啟智-2025世界讀書日主題班會教案
- GB/T 27060-2025合格評定良好實踐指南
- 企業研究方法知到智慧樹章節測試課后答案2024年秋華東理工大學
- 公司安全事故隱患內部舉報、報告獎勵制度
- 小區網球可行性方案
- 初始過程能力分析報告
- 天然氣管道放空時間的計算
- 紅日歌詞 粵語發音修正版
評論
0/150
提交評論