




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB23-T2971-2021-黄菠萝药用林苗木培育技术规程-黑龙江省
- 小学规范课程管理制度
- 产业周期处理方案(3篇)
- 小学禁毒工作管理制度
- 培训机构露营方案(3篇)
- 初中学校各种管理制度
- 库内物料摆放管理制度
- 全面梳理部门管理制度
- 废弃鱼塘清淤方案(3篇)
- 公司科研现场管理制度
- 延迟退休政策驱动中国第二次人口红利的多维度解析与展望
- T/CECS 10032-2019绿色建材评价保温系统材料
- 江苏扬州中学2024-2025学年数学高二下期末经典试题含解析
- 银行背债协议书
- 2025年四川省水电投资经营集团普格电力有限公司招聘笔试参考题库含答案解析
- 非洲地理课件
- 国际压力性损伤-溃疡预防和治疗临床指南(2025年版)解读课件
- MOOC 树木学-北京林业大学 中国大学慕课答案
- NBT 10739-2021 井工煤矿辅助运输安全管理规范
- 苏教版三年级数学下册期末试卷(江苏苏州常熟市2021春真卷)
- MBR系统运行技术手册
评论
0/150
提交评论