1、嵌入式系统设计一、设计目的1、掌握嵌入式系统的组成和设计方法;2、掌握嵌入式系统硬件的设计步骤和要点;3、掌握嵌入式系统软件的设计步骤和调试方法。二、设计内容1、设计一个简单的嵌入式系统,包括CPU、存储器、定时器、按键接口、七段数码管接口、LCD接口和UART接口,实现实时钟的显示和设置;2、定时器用于实时钟的月日、时分和秒计时;3、2个按键用于显示的切换和实时钟的设置;4、4个七段数码管用于实时钟的月日、时分和秒显示;*5、LCD用于实时钟的月日、时分和秒显示;*6、UART接口和微机相连,用于在微机上显示和设置实时钟。三、设计报告 1、设计目的; (5分) 2、设计内容; (5分)3、硬
2、件设计方框图和工作原理; (30分) 4、软件设计流程图和程序清单; (30分) 5、设计过程中遇到的问题和解决方法; (20分) 6、收获和建议等。 (10分)嵌入式系统设计入门嵌入式系统的设计包括硬件设计和软件设计两大部分。一、硬件设计入门硬件设计入门介绍系统的硬件设计过程,说明怎样使用SOPC Builder和Quartus II软件创建和处理SOPC硬件设计。硬件设计分为下列三个部分: 设计输入:使用SOPC Builder在Quartus II方块图文件(.bdf)中创建SOPC模块并将模块端口连接到FPGA引脚上。 编译:使用Quartus II编译程序设置编译SOPC设计、分配引
3、脚和使用EDA工具设置控制编译过程,生成sof和pof编程/配置文件。 编程/配置:使用QuartusII编程器和下载电缆配置开发板上的FPGA,或将设计结果编程到开发板上的配置芯片中以便开发板在加电时用用户设计配置FPGA。(一)设计输入设计输入指导用户创建Quartus II项目以及包含SOPC模块的顶层方块图文件(.bdf),SOPC模块使用SOPC Builder软件创建。1、创建Quartus II项目创建新的Quartus II项目时,用Quartus II的新建项目向导,可以指定项目的工作目录、项目名和顶层设计实体名。启动Quartus II软件创建新建项目的步骤为:启动Quar
4、tus II软件:单击Windows“开始”按钮,选择“所有程序” Altera Quartus II 9.0 Quartus II 9.0或直接双击桌面上的Quartus II 9.0快捷方式图标。如果是首次使用Quartus II,需要在Licensing Error(许可错误)提示框中选择Specify valid license file(指定有效许可文件)选项,然后在License Setup(许可设置)中指定License file(许可文件),许可文件可通过Altera网站免费申请。单击File(文件)菜单,选择New Project Wizard(新建项目向导)打开新建项目向导
5、对话框。指定项目工作目录:本例使用目录c:alteraexample。指定项目和顶层设计实体名example,如图1所示。单击Next(下一步),如果目录不存在,Quartus II将提示“目录不存在,是否创建?”,单击“是(Y)”创建目录。在Add Files(添加文件)页中单击Next(下一步)。选择器件:本例使用Cyclone II系列(Family)器件EP2C35F672C6。改变Show in Available devices list中的选项可以减少可用器件列表中的器件数,使查找目标器件变得容易些。单击Next(下一步)。在EDA Tool Settings(EDA工具设置)页
6、中单击Next(下一步)。图1 指定工作目录和项目名在Summary(总结)页中单击Finish(完成)。新的Quartus II项目创建完成后,顶层设计实体名出现在Project Navigator(项目导航)窗口的Hierarchy(层次)标签中,同时在项目目录中生成两个基本文件: example.qpf:Quartus II项目文件 example.qsf:Quartus II设置文件2、创建SOPC系统模块创建SOPC系统模块包括以下步骤: 创建新的BDF(可省略) 启动SOPC Builder 添加CPU和外围设备 生成SOPC系统模块 添加SOPC系统模块到BDF(可省略) 添加引
7、脚(可省略) 命名引脚(可省略)创建包含SOPC系统模块的顶层方块图文件(.bdf)时,首先创建方块图文件,然后使用SOPC Builder创建SOPC系统模块,最后将SOPC系统连接到FPGA器件引脚,FPGA引脚连接到开发板上的硬件组件。当Quartus II项目中只包含SOPC系统模块时(例如本例),可使系统名和项目名相同,这样可省略“创建新的BDF”步骤,直接用SOPC系统模块作为项目的顶层设计实体,同时也可省略“添加SOPC系统模块到BDF”、“添加引脚”和“命名引脚”步骤。3、创建新的BDF新创建的BDF文件名为example.bdf,它是example项目的顶层设计实体。创建新的
8、BDF的步骤为:单击File(文件)菜单,选择New(新建)或单击工具条中的新建工具按钮,打开新建对话框。在新建对话框的Design Files(设计文件)中选择Block Diagram/ Schematic File(方块图/原理图文件)。单击OK(确定),出现新建方块图编辑器窗口Block1.bdf。单击File(文件)菜单,选择Save As(另存为),打开“另存为”对话框,在“另存为”对话框中自动显示保存bdf文件的位置c:alteraexample和名称example,确认已选中Add file to current project(添加文件到当前项目),单击保存按钮保存文件。保持
9、文件打开以用于后面的设计输入。创建新的BDF后,在项目目录中生成第三个基本文件: example.bdf:Quartus II方块图文件4、启动SOPC BuilderSOPC Builder是用户创建SOPC系统模块或多控制器SOPC模块的软件工具,完整的SOPC系统模块包含Nios II嵌入式处理器及其系统外围设备。SOPC Builder提示用户选择端口和外围设备,设置有关参数的值,一旦向导生成SOPC系统模块,用户就可以在设计文件中使用。启动SOPC Builder的步骤为:在Quartus II中单击Tools(工具)菜单,选择SOPC Builder或单击工具条中的SOPC Bui
10、lder工具按钮启动SOPC Builder。在Create New System(新建系统)对话框System Name(系统名)后键入系统名nios32,如图2所示。也可以将系统名设为example,这样可以直接将系统模块作为顶层实体。图2 新建系统对话框根据用户选择的HDL语言,SOPC Builder对所有用户使用的组件生成纯文本Verilog HDL或VHDL描述文件。单击OK(确定),出现Altera SOPC Builder - nios32.sopc* (c:alteraexamplenios32.sopc)窗口并显示System Contents(系统内容)标签,如图3所示。
11、在添加CPU和外围设备之前,确认Clock Settings(时钟设置)中的clk_0为50.0MHz,这个值用来在硬件生成和软件设计中实现精确的定时。5、添加CPU和外围设备SOPC系统外围设备允许Nios II嵌入式处理器与FPGA中的内部逻辑或开发板上的外部硬件连接和通信,使用SOPC Builder可以指定SOPC系统模块中系统外围设备的名称、类型、存储器映象地址和中断等。将要添加到SOPC Builder中的组件包括: Nios II处理器(cpu) 片内存储器(onchip_memory) 定时器(timer) 按键PIO(pio_key) 七段数码管PIO(pio_led)图3
12、SOPC Builder(1)添加Nios II处理器(cpu)添加Nios II处理器(cpu)的步骤为:在Altera SOPC Builder下选择Nios II Processor(Nios II处理器),单击Add(添加)按钮,打开Nios II处理器配置向导Nios II Processor cpu_0。在Core Nios II标签中选择Nios II/e,如图4(a)所示。图中显示:Nios II/e核在50.0MHz系统时钟频率下性能达到5 DMIPS,使用600-700 LEs(逻辑单元)和两个M4K片内存储器块(8K位)。在JTAG Debug Module(JTAG调试
13、模块)标签中选择Level 1,如图4(b)所示。图中显示:1级JTAG调试模块使用300-400 LEs(逻辑单元)和两个M4K片内存储器块(8K位)。单击Finish(完成)返回Altera SOPC Builder - nios32.sopc窗口。添加Nios II处理器时出现的警告问题将在添加片内存储器后解决。(2)添加片内存储器(onchip_memory)添加片内存储器(onchip_mem)的步骤为:双击Memories and Memory Controllers(存储器和存储器控制器) On-Chip On-Chip Memory (RAM or ROM),打开On-chip
14、 Memory (RAM or ROM) - onchip_memory_0配置向导。在配置向导中使用下列缺省选项,如图5所示。 Memory type(存储器类型):RAM (Writable) Data width(数据宽度):32 bits Total memory size(总存储器容量):4096 Bytes单击Finish(完成)返回Altera SOPC Builder - nios32.sopc窗口。(3)配置Nios II处理器(cpu)添加片内存储器后重新配置Nios II处理器(cpu)可以解决添加Nios II处理器(cpu)时出现的警告问题,具体步骤为:(a) 选择N
15、ios II核(b) 选择调试级别图4 Nios II处理器配置向导双击(1)中添加的cpu,在Nios II Processor cpu_0配置向导的Core Nios II标签中选择下列选项,如图6所示。 Reset Vector(复位向量):onchip_memory2_0 Exception Vector(异常向量):onchip_memory2_0图5 片内存储器配置向导图6 配置Nios II处理器单击Finish(完成)返回Altera SOPC Builder - nios32.sopc窗口。(4)添加定时器(timer)添加定时器(timer)的步骤为:双击Periphera
16、ls(设备) Microcontroller Peripherals(微控制器设备) Interval Timer,打开Interval Timer timer_0配置向导。输入Timeout period(超时周期)为500 ms(毫秒),如图7所示。单击Finish(完成)返回Altera SOPC Builder - nios32.sopc窗口。(5)添加按键PIO(pio_key)为了给开发板上的按键提供接口,需要添加按键PIO(button _pio),步骤如下:双击Microcontroller Peripherals(微控制器设备)下的PIO (Parallel I/O)(并行I
17、/O),打开PIO (Parallel I/O) pio_0配置向导。在Basic Settings(基本设置)标签中指定以下选项,如图8(a)所示。 Width(宽度):2 bits Direction(方向):Input ports only在Simulation(仿真)标签中选中Hardware PIO inputs in test bench,如图8(b)所示。图7 定时器配置向导(a) 基本设置 (b) 仿真图8 PIO配置向导单击Finish(完成)返回Altera SOPC Builder - nios32.sopc窗口。右击刚添加的pio_0从弹出菜单中选择Rename(重新命
18、名)或按Ctrl-R组合键。将pio_0重新命名为pio_key,键入新名后按Enter键保存设置。(6)添加七段数码管PIO(pio_led)添加七段数码管PIO(pio_led)的步骤为:双击Microcontroller Peripherals(微控制器设备)下的PIO (Parallel I/O)(并行I/O),打开PIO (Parallel I/O) pio_0配置向导。在Basic Settings(基本设置)标签中指定以下选项: Width(宽度):16 bits Direction(方向):Output ports only单击Finish(完成)返回Altera SOPC B
19、uilder - nios32.sopc窗口。右击刚添加的pio_0从弹出菜单中选择Rename(重新命名)或按Ctrl-R组合键。将pio_0重新命名为pio_led,键入新名后按Enter键保存设置。至此完成CPU和外围设备的添加,设计结果如图9所示。图9 SOPC Builder设计结果6、生成SOPC系统模块为了将SOPC设计作为Quartus II项目的一部分编译到开发板上的FPGA器件,必须首先生成设计逻辑,生成设计的步骤为:单击System Generation(系统生成)标签。在系统生成标签中单击Generate(生成)按钮,在Save changes?(保存修改)对话框中单击
20、Save(保存)。依赖于用户指定的选项,SOPC Builder在设计生成期间完成下列操作: 生成Verilog HDL或VHDL系统模块文件 创建项目仿真文件在生成设计期间,系统生成标签中的消息框内显示生成信息,如图10所示。当生成完成时,显示Info: System generation was successful(信息:系统生成成功),单击Exit退出SOPC Builder。图10 系统生成标签SOPC Builder在指定目录中生成两个基本文件: nios32.sopc:SOPC系统配置文件 nios32.ptf:SOPC系统描述文件(用于软件设计)在以下的操作中,将使用方块图编辑
21、器工具栏中的不同工具,如图11所示。选择工具符号工具直角节点工具直角管道工具全屏幕水平翻转左旋90度矩形工具直线工具文本工具方块工具直角总线工具使用橡皮带缩放工具查找垂直翻转椭圆工具弧形工具图11 方块图编辑器工具栏7、添加符号到BDF在生成nios32期间,SOPC Builder创建SOPC系统模块符号,用户可以将系统模块符号添加到BDF,添加符号的步骤为:在Quartus II中双击BDF窗口内的任何地方,打开Symbol(符号)对话框。在符号对话框中双击Project(项目)展开项目符号目录。选择nios32,出现SOPC Builder创建的系统模块nios32符号,如图12所示。图
22、12 符号对话框单击“OK”(确定),符号对话框关闭,显示附着于指针的nios32符号轮廓。在方块图编辑器窗口的空白处单击,放置nios32符号。单击“Save”(保存)按钮()保存BDF文件。8、添加引脚添加输入和输出引脚的步骤为:如果Use rubberbanding(使用橡皮带)没有选中,单击方块图编辑器工具栏中的使用橡皮带图标使用橡皮带()。单击方块图编辑器工具栏中的符号工具按钮(),出现符号对话框。在符号对话框中选中Repeat-insert mode(重复插入模式)选项,以便于添加多个相同的符号。在符号对话框的Libraries(库)列表中单击“+”展开c:/altera/90/q
23、uartus/libraries文件夹,展开primitives(图元)文件夹及其下面的pin(引脚)文件夹。在引脚文件夹中选择input(输入)图元,单击OK(确定)。在nios32符号的左侧空白处单击三次,插入三个INPUT(输入)引脚符号,使每个符号右边与nios32符号接触,每个引脚符号中的水平线和nios32符号上的水平线相接。引脚符号自动按顺序命名为pin_name,当添加完符号时按Esc键。使用这种橡皮带方法放置的引脚是和nios32符号相连的,如果选择一个引脚符号并将它移离nios32符号,在两者之间将出现连接线。重复步骤到,在nios32符号右侧插入并放置一个OUTPUT(输
24、出)引脚。单击Save(保存)按钮()保存BDF文件。9、命名引脚命名引脚的步骤为:用Selection(选择)工具双击第一个输入引脚pin_name,打开Pin Properties(引脚属性)对话框,键入clk替换引脚的缺省名pin_name,按Enter键。重复步骤,用表1所示的引脚名称重新命名每个引脚,如图13所示。表1 输入和输出引脚名称引脚名称方向连接到的nios32信号clk输入clkreset_n输入reset_nkey1.0输入in_port_to_the_pio_key1.0led15.0输出out_port_from_the_pio_led15.0图13 添加和命名引脚为
25、了使设计正常工作,必须严格按表中的引脚名称命名引脚。单击“Save”(保存)按钮()保存BDF文件。(二)编译Quartus II编译程序包括检查设计错误、综合处理逻辑、使设计适合Altera器件、生成仿真输出文件、定时分析和器件编程等一系列模块。编译主要包括以下内容: 指定器件系列和器件 分配信号到器件引脚 指定器件和编程设置 编译设计1、指定器件系列和器件在新建项目时已经选择了器件系列和器件,也可以用设置对话框的器件页选择器件系列和器件,用设置对话框的器件页选择器件系列和器件的步骤为:选择Assignments(分配)菜单下的Device(器件)菜单项。在Device(器件)页的Famil
26、y(系列)下拉列表中选择使用的Altera器件系列(如Cyclone II)。在Target device(目标器件)下选择Specific device selected in Available devices list(在可用器件列表中选择特定器件)。在Available devices(可用器件)列表下选择使用的Altera器件名(如EP2C35F672C6)。改变Show in Available devices list中的选项可以减少可用器件列表中的器件数,使查找目标器件变得容易些。单击OK(确定)接受其余编译程序设置的缺省值。2、分配信号到器件引脚在编译期间,编译程序将用户设计
27、逻辑分配到实际器件资源。因为开发板上的目标器件已经固定,所以必须将设计信号分配到特定的器件引脚。Quartus II软件提供多种引脚分配方法: 用Tcl Script(Tcl脚本)一次分配所有需要的引脚 用Assignment Editor(分配编辑器)逐个分配引脚 在Pin Planner(引脚规划器)中分配引脚在整个系统设计过程中,只有引脚分配这一步是针对具体的开发板和器件,也就是说不同开发板和器件的引脚分配一般情况下各有不同,而其他所有的步骤都基本相同。为了方便引脚分配,可对设计进行“分析与综合”处理。下面以DE2开发板为例介绍用Pin Planner(引脚规划器)进行引脚分配的步骤:选
28、择Processing(处理)菜单下Start(开始)子菜单下的Start Analysis & Synthesis(开始分析与综合)对设计进行预处理。选择Assignments(分配)菜单下的Pins(引脚)或Pin Planner(引脚规划器)菜单项,打开引脚规划器窗口。在引脚规划器窗口的All Pins(所有引脚)视图中单击clk行的Location(位置)列,输入N2并按Enter键选择PIN_N2引脚。重复步骤,用表2所示的内容对每个引脚进行分配。表2 输入和输出引脚分配引脚名称方向引脚位置引脚名称方向引脚位置clk输入PIN_N2reset_n输入PIN_W26key1输入PIN_
29、N23key0输入PIN_G26led15输出不用led7输出PIN_Y12led14输出PIN_V20led6输出PIN_AF10led13输出PIN_V21led5输出PIN_AB12led12输出PIN_W21led4输出PIN_AC12led11输出PIN_Y22led3输出PIN_AD11led10输出PIN_AA24led2输出PIN_AE11led9输出PIN_AA23led1输出PIN_V14led8输出PIN_AB24led0输出PIN_V13为了使设计正常工作,必须严格按表中的引脚位置分配引脚。单击File(文件)菜单下的Close(关闭)关闭引脚规划器。引脚分配保存在Qu
30、artus II设置文件(example.qsf)中,用户可以直接用“记事本”或“写字板”等文本编辑程序对引脚分配进行修改,修改时必须关闭引脚规划器。3、指定器件和编程设置在编译设计前必须指定保留未用引脚的选项、选择生成的编程文件和EDA工具设置等。(1)保留未用引脚指定保留未用引脚选项的步骤为:选择Assignments(分配)菜单下的Device(器件)菜单项。在Device(器件)页中单击Device & Pin Options(器件和引脚选项)按钮,打开Device & Pin Options(器件和引脚选项)对话框。单击Unused Pins(未用引脚)标签,在Reserve all
31、 unused pins(保留所有未用引脚)下选择As inputs tri-stated(作为输入三态)。将未用引脚设置为输入三态可使DE2开发板上未用的七段数码管不显示。(2)指定可选编程文件默认时编译程序总是生成SRAM目标文件(.sof),Quartus II程序员使用SOF配置目标器件,用户也可以控制编译程序在编译期间生成其他的可选编程文件。例如:用户可以生成十六进制(Intel格式)输出文件(.hexout),用于将用户设计下载到Nios开发板Flash存储器的用户配置区。指定可选编程文件的步骤为:在Device & Pin Options(器件和引脚选项)对话框中单击Progra
32、mming Files(编程文件)标签。选中Hexadecimal (Intel-Format) Output File (.hexout)(十六进制(Intel格式)输出文件(.hexout)。单击OK(确定)接受其余缺省值并保存器件和引脚选项。在Settings(设置)对话框中单击OK(确定)关闭设置对话框。4、编译设计在编译期间编译程序定位和处理所有的设计和项目文件,生成并报告与当前编译相关的消息,创建SOF和任何可选编程文件。编译设计的步骤为:单击Processing(处理)菜单选择Start Compilation(开始编译)或单击Start Compilation(开始编译)工具条
33、按钮()。编译设计时Tasks(任务)窗口用百分数显示总的编译进度和每个阶段的进度。编译程序可能生成一个或多个警告信息(),这些警告信息不影响用户设计的结果。如果编译程序显示任何错误信息,必须在设计中改正并重新编译,直到没有错误为止。用户可以右击显示信息,在弹出菜单中选择Locate(定位)查找信息的来源或选择Help(帮助)显示信息帮助。编译完成后可以在Compilation Report(编译报告)窗口查看结果,如图14所示。图14 编译报告编译程序在项目目录中生成两个目标文件: example.sof:SRAM目标文件(用于配置FPGA) example.pof:编程目标文件(用于编程F
34、lash)(三)编程/配置在成功编译之后,Quartus II编译程序生成一个或多个用于编程或配置器件的文件。用户可以用连接到开发板的下载电缆将配置数据直接下载到FPGA,也可以将配置数据下载到开发板上的Flash存储器,再用Flash存储器中的数据配置FPGA。直接配置FPGA时,只要正确地连接和设置下载电缆,就可以用用户设计配置开发板上的FPGA。对于DE2开发板,配置前必须将开发板左边的SW19拨动开关拨到RUN(运行)位置。用设计直接配置开发板上FPGA的步骤为:单击Tools(工具)菜单选择Programmer(编程)或单击Programmer(编程)工具条按钮(),打开编程窗口,如
35、图15所示。图15 编程窗口如果在Hardware Setup(硬件设置)按钮后显示No Hardware(没有硬件),单击Hardware Setup(硬件设置)按钮打开硬件设置对话框,选择或添加编程硬件。在Mode(方式)列表中确认选择JTAG。如果没有编程文件,单击Add File(添加文件)按钮打开Select Programming File(选择编程文件)对话框,选择编程文件example.sof并打开。在编程窗口中选中编程文件后的Program / Configure(编程/配置)选项。单击Start(开始)将配置数据下载到FPGA,Progress(进度)区显示下载数据的百分比
36、。下载完成后,七段数码管显示88。至此,硬件设计全部完成,系统产生三个重要的系统硬件文件用于软件设计: nios32.ptf:SOPC系统描述文件 example.sof:SRAM目标文件 example.pof:编程目标文件二、软件设计入门软件设计入门介绍Nios II处理器软件的开发,指导用户进行程序设计、连编、调试和运行等基本的软件设计过程。Nios II的软件开发方法有两种:Nios处理器使用的软件开发工具包(SDK)和Nios II处理器使用的集成开发环境(IDE)。虽然Nios II支持SDK软件开发环境,但不推荐用户使用,这里主要介绍IDE集成软件开发环境的使用。和硬件设计类似,
37、软件设计也分为下列三个部分: 设计输入:使用任何文本编辑软件进行程序设计输入,最好使用IDE文本编辑器。 连编:对源程序进行编译,并和库文件等连接成目标文件。 调试和运行:将目标文件下载到开发板上的存储器中进行调试和运行。(一)设计输入软件设计输入指导用户创建IDE项目和C/C+源程序文件。1、创建IDE项目创建新的IDE项目时,用IDE的新建项目向导可以指定项目名、项目位置和目标硬件。启动IDE软件新建项目的步骤为:启动IDE软件:单击Windows“开始”按钮,选择“所有程序” Altera Nios II EDS 9.0 Nios II 9.0 IDE或直接双击桌面上的Nios II 9
38、.0 IDE快捷方式图标。如果是第一次使用Nios II IDE,软件将显示Welcome(欢迎)界面,关闭欢迎界面,显示Nios II C/C+界面。单击File(文件)菜单选择New Project或单击工具栏中的New按钮打开New Project(新建项目)对话框。在新建项目对话框的Wizards(向导)下选择Nios II C/C+ Application”(Nios II C/C+应用),单击Next(下一步)。指定项目名称(Name)为example。在Select Target Hardware(选择目标硬件)中单击Browse(浏览)按钮选择目标硬件描述文件C:alterae
39、xamplenios32.ptf,如图16所示。目标硬件描述文件nios32.ptf是SOPC硬件设计和软件设计的桥梁,必须保证选定正确的目标硬件描述文件。文件选定后硬件设计中的CPU名称cpu_0自动显示在CPU下拉列表中。在Select Project Template(选择项目模板)下选择Blank Project(空项目),单击Finish(完成)创建项目example和缺省的系统库项目example_syslib nios32。2、创建C/C+源程序文件创建C/C+源程序文件的步骤为:单击File(文件)菜单选择New Source Flie或单击工具栏中的New按钮在New(新建)
40、对话框中展开C选择Source Flie打开New Source Flie(新建源文件)对话框。在新建源文件对话框中选择Source Folder(源文件夹)example,输入Source File(源文件名)clk.c,单击Finish(完成)。在clk.c视图中输入以下源程序:图16 软件新建项目向导#include #include system.hint main(void) int min=0,sec=0,hse=0,flg=0; int led10=0x01,0x4F,0x12,0x06,0x4C,0x24,0x20,0x0F,0x00,0x04; IOWR(TIMER_0_BA
41、SE,1,6); / 启动定时器 while(1) if(IORD(TIMER_0_BASE,0)&1) / 500ms定时时间到 if(+hse=2) / 1秒钟时间到 hse=0; if(+sec&0xf)=0xa) / 二-十进制调整 sec+=6; if(sec=0x60) / 1分钟时间到 sec=0; if(+min&0xf)=0xa) / 二-十进制调整 min+=6; if(min=0x60) / 1小时时间到 min=0; IOWR(TIMER_0_BASE,0,0); / 清除时间到标志 if(IORD(PIO_KEY_BASE,0)&1)=0) / 按键判断 if(+flg=3) flg=0; switch(flg) case 0: / 显示秒 IOWR(PIO_LED_BASE,0,(led(sec&0xf0)48)+ledsec&0xf); break; case 1: / 显示分和秒指示 IOWR(PIO_LED_BASE,0
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922