实验七:定时器中断实验

实验七:定时器中断实验
实验七:定时器中断实验

微控制器

综合设计与实训实验名称:实验七定时器中断实验

实验七:定时器中断实验

1 实训任务

(1) 设置定时器时钟,自动重装载值,分频系数和计数方式;

(2) 设置定时器中断优先级;

(3) 通过编写延时函数实现定时器中断。

1.1 实验说明

STM32的通用定时器是由一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。STM32的通用定时器的用途:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,可以使脉冲长度和波形周期在几个微秒到几个毫秒间调整。

STM32F10x的通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器功能包括:

(1)6位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。

(2) 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间的任意数值。

(3) 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:

A.输入捕获

B.输出比较

C.PWM生成(边缘或中间对齐模式)

D.单脉冲模式输出

(4) 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。

(5) 如下事件发生时产生中断/DMA:

A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)

B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

C.输入捕获

D.输出比较

E.支持针对定位的增量(正交)编码器和霍尔传感器电路

F.触发输入作为外部时钟或者按周期的电流管理

定时器的时钟来源有4个:

(1)内部时钟(CK_INT)

(2) 外部时钟模式1:外部输入脚(TIx)

(3)外部时钟模式2:外部触发输入(ETR)

(4) 内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B 提供时钟)。

这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。这里的CK_INT时钟是从APB1倍频来的,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。这里还要注意的就是高级定时器的时钟不是来自APB1,而是来自APB2。

本实验使用定时器3产生溢出中断,在中断服务函数里面翻转LED上的电平,来指示定时器中断的产生。定时器相关的库函数主要集中在固件库文件stm32f10x_tim.h和stm32f10x_tim.c文件中。

1.2 实验步骤

(1) 在实训平台上将PE4和PE5分别连接LED灯;

(2) 复制上一个实验工程修改名称并保存为定时器中断实验;

(3) 新建timer.c和timer.h文件,添加至工程中;

(4) 编写timer.h文件,声明定时器3初始化函数;

(5) 编写timer.c文件,编写定时器3初始化函数,设置分频系数、计数方式、自动重装载计数周期值和时钟分频因子;

(6) 编写main函数,程序编译正确;

2 程序设计

(1) 新建文件夹并命名为定时器中断实验,复制粘贴之前的实验文件,将工程文件改名为TIMER.uvprojx,同时添加timer.c和timer.h文件至工程中。

(2) 编写timer.h文件。

图8.2 timer.h文件

(3) 编写timer.c文件。

a. 让TIM3时钟使能

TIM3挂载在APB1下,通过APB1总线下的使能函数来使能。

图8.3 时钟使能

b. 初始化定时器参数, 设置自动重装值,分频系数,计数方式

库函数中定时器的初始化参数是通过初始化函数TIM_TimeBaseInit实现的,V oid TIM_TimeBaseInit(TIM_TypeDef*TIMx,

TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct

第一个参数是确定哪一个定时器,第二个参数是定时器初始化参数结构体指针

结构体类型为TIM_TimeBaseInitTypeDef,这个结构体的定义为:

图8.4 结构体定义

这个结构体一共有5个成员变量,对于通用定时器只有前面4个参数有用,

最后一个参数TIM_RepetitionCounter在高级定时器才会用到。

c. 设置TIM3_DIER允许更新中断

寄存器的相应位使能更新中断,在库函数里面定时器中断使能是通过TIM_ITConfig函数来实现的:

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_tTIM_IT, FunctionalState NewState);

第一个参数是选择定时器,取值为TIM1~TIM17。

第二个参数非常关键,是用来指明使能的定时器中断的类型,定时器中断的类型有很多种,包括更新中断TIM_IT_Update,触发中断TIM_IT_Trigger,以及输入捕获中断等等。

第三个参数是设定失能还是使能。

最终函数为TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );

d.TIM3中断优先级设置

在定时器中断使能之后,因为要产生中断,必不可少的要设置NVIC相关寄存器,设置中断优先级。

图8.5 中断优先级设置

e.使能TIM3

配置完后要开启定时器,通过TIM3_CR1的CEN位来设置。在固件库里面使能定时器的函数是通过TIM_Cmd函数来实现的:

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)

此时定时器3初始化函数为:

图8.6初始化函数

TIM3_Int_Init()函数就是上边介绍的几个步骤,该函数的2个参数用来设置TIM3的溢出时间。系统初始化的时候在默认的系统初始化函数SystemInit函数里面已经初始化APB1的时钟为2分频,所以APB1的时钟为36M,而从STM32的内部时钟树图得知:当APB1的时钟分频数为1的时候,TIM2~7的时钟为APB1的时钟,而如果APB1的时钟分频数不为1,那么TIM2~7的时钟频率将为APB1时钟的两倍。因此,TIM3的时钟为72M,再根据我们设计的arr和psc的值,就可以计算中断时间了。计算公式如下:

Tout= ((arr+1)*(psc+1))/Tclk;

其中:

Tclk:TIM3的输入时钟频率(单位:Mhz)

Tout:TIM3的溢出时间(单位:us)

f. 编写中断服务函数

通过该函数来处理定时器产生的相关中断。在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,这里使用的是溢出中断,所以在状态寄存器SR的最低位。在处理完中断之后应该向TIM3_SR 的最低位写0,来清除该中断标志。

在固件库函数里面,用来读取中断状态寄存器的值判断中断类型的函数是:ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t)

该函数的作用是判断定时器TIMx的中断类型,TIM_IT是否发生中断。

固件库中清除中断标志位的函数是:

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)

该函数的作用是清除定时器TIMx的中断TIM_IT标志位。

中断服务函数为:

图8.7 中断服务函数

在图8.6中断服务函数中,中断后的指令为控制LED的翻转。每次中断后,判断TIM3的中断类型,如果中断类型正确(溢出中断),则执行LED的取反。

图8.8 主函数

(4) 编写main()函数

这里的代码和之前大同小异,此段代码对TIM3进行初始化后,进入死循环等待TIM3溢出中断,当TIM3_CNT的值等于TIM3_ARR的值的时候,就会产生TIM3的更新中断,然后在中断里面取反LED1,TIM3_CNT再从0开始计数。根据上面的公式,我们可以算出中断溢出时间为500ms。

Tout=((4999+1)*(7199+1))/72=500000us=500ms

3硬件原理图设计

图8.1 LED电路原理图

4总结

实验仿真结果:

实验心得:通过本次实验,我掌握了用定时器中断控制LED灯的闪烁。

所有的中断都有固定的写法:先使用伪命令定义中断入口地址:#pragma vector=T1_VECTOR,然后定义函数名称__interrupt void Timer1_ISR(void)。通过检测OVFIM(T1CTL 第4位)来判断是否发生了溢出中断,最后通过软件清除中断标志位。

提出的问题:溢出更新中断和通道捕获中断的区别?

解释:

溢出更新中断:计数器计数到你设定的值ARR ,溢出后,产生中断。

通道捕获中断:定期器捕获到你设定的边沿信号(上升沿/下降沿)时产生的中断。

以水龙头接水类比,更新中断相当于水桶水满的中断,捕获中断相当于水位监测报警,比如水半桶了要干嘛,满了要干嘛,水位监测设置最大和水桶水满一样。捕获是监测电平变化。

实验4,定时器实验

定时器实验 一、实验目的 1、熟悉使用Keil软件的使用和单片机程序的编写。 2、了解掌握51单片机定时器的结构与工作原理。 3、了解LCD1602的工作原理及程序编写。 4、掌握定时器程序的书写格式及使用方法。 二、实验仪器 1、C51单片机开发板(含LCD1602显示屏) 2、PC机(安装Keil软件及C51烧录软件) 三、实验原理 1、LCD1602显示屏 lcd1602可以显示2行16个字符,有8为数据总线D0-D7,和RS、R/W、EN 三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。其引脚功能 2、定时器工作原理 8051单片机有两个16位定时器T0,T1,有四种工作方式,由TMOD寄存器 TMODE寄存器的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。

C/ T置位时,T0/T1工作在计数器方式,清零时,工作在定时器方式。 GATE位置位时,由外部引脚中断来启动定时器,清零时,仅由TR0,TR1分别启动定时器T0,T1。 定时器若工作于中断方式,则在初始化时应该开放定时器的中断及总中断。注意定时器方式的选择,确定是否要在中断服务程序中置入定时器初值,最后启动定时器(TR0/TR1 = 1)。 四、实验内容 1、用定时器实现流水灯。 用89C51的定时器资源,在定时器中断服务程序中实现流水灯的运行。在中断服务程序中可以使用查表方式依次点亮LED,若采用移位操作,需注意移位逻辑。 2、用定时器和LCD1602制作电子时钟。 1602液晶显示模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的,通过D7~D0的8位数据端传输数据和指令。可以在定时器中断服务程序中进行计时,并将时间显示在LCD1602模块上。 五、预习要求 1、掌握实验原理,了解实验目的,熟悉实验内容。 2、了解LCD1602的工作原理,掌握其显示程序的编写。 3、掌握51单片机定时器的工作原理及过程。 六、思考题 1、用定时器实现延时与用软件延时相比,有什么优点? 2、定时器置入的初值如何计算?

实验三-定时器、计数器应用实验二

实验三-定时器、计数器应用实验二

定时器/计数器应用实验二 设计性试验 2012年11月21日星期三第三四节课 一、实验目的 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 三、电路原理图

开始 系统初始化装计数初值并 启动定时器 定时? 时间到 输出取反 结束 清除溢出标志N Y 四、实验程序流程框图和程序清单及实验结果 /********* 设计要求:(1)单片机的定时器/计数器以查询方式工作,设定计数功能, 对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0 口线状态,在P1.0口线上接示波器观察波形 编写:吕小洋 时间:2012年11月16日18:09:40 ***************/ ORG 0000H START: LJMP MAIN ORG 0100H MAIN: MOV SP, #2FH CLR EA ;关总中断 CLR ET1 ;禁止定时器1中断 MOV TMOD, #01100000B ;设置计数器1为工作方式2 MOV TH1, #9CH ;设置计数初值 MOV TL1, #9CH SETB TR1 ;启动计数器 LOOP: JNB TF1, LOOP ;查询计数是否溢出 CPL P1.0 ;输出取反 CLR TF1 ;清除计数溢出标志 LJMP LOOP ;重复取反 END

定时器实验报告

电子信息工程学系实验报告 课程名称:单片机原理及接口应用Array实验项目名称:51定时器实验实验时间: 班级:姓名:学号: 一、实验目的: 熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 二、实验环境: 软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件 三、实验原理: 1、51单片机定时计数器的基本情况 8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS-51系列单片机的定时/计数器有几个相关的特殊功能寄存器: 方式控制寄存器TMOD; 加法计数寄存器TH0、TH1 (高八位);TL0、TL1 (低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON) 定时/计数器启停控制位TR0、TR1(TCON) 定时/计数器中断允许位ET0、ET1(中断允许寄存IE) 定时/计数器中断优先级控制位PT0、PT1(中断优IP) 2、51单片机的相关寄存器设置 方式控制寄存器TMOD: TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。TMOD各位的含义如下: 1. 工作方式选择位M1、M0 3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。

T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。 4、51单片机的编程 使用MCS-51单片机的定时/计数器的步骤是: .设定TMOD,确定: 工作状态(用作定时器/计数器); 工作方式; 控制方式。 如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:0001 0110,即0x16。 .设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213 = 8192、216 = 65536和28 = 256,定时间隔为T,计数初值为a,则有 T = 12×(T_all – a)/fosc a = T_all – T×fosc/12 a = – T×fosc/12 (注意单位) THx = a / 256;TLx = a % 256; .确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1;EA = 1; 还需要编写中断服务函数: void T0_srv(void)interrupt 1 using 1 { TL0 = a % 256; TH0 = a / 256; 中断服务程序段} .启动定时器:TR0(TR1)= 1。 四、实验内容过程及结果分析: 利用protues仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。刚开始led数码管显示9,每过一秒数码管显示值减一,当显示到0时返回9,依此反复。然后设计00-59的两位秒表显示程序。 (1)实现个位秒表,9-0

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

4实验四 单片机定时器的使用

姓名:学号:日期: 实验四单片机定时器的使用 一、实验名称:单片机定时器的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG H ;定时器T0的入口地址 LJMP TIMER0 MAIN: MOV TMOD,#01H

MOV R0,#05H MOV TH0,# H ;定时器的初值 MOV TL0,# H SETB ;开定时器T0的中断 SETB ;开CPU的中断 SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ;重装初值 MOV TL0,# H ;重装初值 RETI END 将以上程序补充完整,流水时间间隔为250ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:实现流水灯,时间间隔250ms,由定时器实现定时250ms。 六、回答思考题 1.定时器由几种工作模式,各种模式的最大定时时间是多少? 2.各种模式下初值怎么计算?

定时器中断实验

实验四定时器中断实验 一、实验目的 (1)深刻理解对MCS-51单片机定时/计数器内部结构、工作原理和工作方式。(2)掌握定时/计数器工作在定时和计数两种状态下的编程方法。 (3)掌握中断服务程序设计方法。 二、实验设备 计算机 操作系统:Windows 98/2000/XP 应用软件:WAVE 6000或其他。 三、实验内容 设单片机的时钟频率为12MHz,要求在P1.0脚上输出周期为2ms的方波。四、实验原理 周期为2ms的方波要求定时间隔为1ms,每次时间到将P1.0取反。定时计数器频率为f osc/12,T cy=12/f osc=1us。每个机器周期定时计数器加1,1ms=1000us,需技术次数为1000/(12/f osc)=1000。由于加1计数器向上计数,为得到1000个计数之后的定时器溢出,必须给加1计数器赋初值65536-1000。 五、实验源程序 ORG 0000H AJMP START ORG 001BH AJMP T1INT ORG 0030H START: SETB TR1 SETB ET1 SETB EA MOV SP,#60H MOV TMOD,#10H MOV TH1,#0FCH MOV TL1,#18H MAIN: AJMP MAIN T1INT: CPL P1.0 MOV TH1,#0FCH MOV TL1,#18H RETI END

六、实验结果 七、实验心得 通过这次实验,我对MCS-51单片机定时/计数器内部结构、工作原理和工作方式有了更加深刻的理解,同时也掌握了定时/计数器工作在定时和计数两种状态下的编程方法以及中断服务程序设计方法。在今后的学习中,要更加注重实践,通过动手来增强自己解决问题的能力。

嵌入式定时器基本功能(定时器中断)c语言代码

定时器基本功能实验(定时器中断) 1.实验内容 使用定时器0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。 备注:EasyARM2131实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200 ; 2.实验步骤 ①启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程 TimeOut_C。 ②在user 组中的main.c 中编写主程序代码。 ③主程序中使用IRQEnable( )使能IRQ 中断。 ④选用DebugInExram 生成目标,然后编译连接工程。 ⑤将LPC2131实验板上的Beep跳线短接到P0.7。 ⑥选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。 ⑦全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。 3.实验参考程序 程序清单错误!文档中没有指定样式的文字。-1 定时器实验参考程序 #include "config.h" #define BEEP 1 << 7 /* P0.7控制BEEP,低电平蜂鸣 */ /***************************************************************************************** ** 函数名称:IRQ_Timer0() ** 函数功能:定时器0中断服务程序,取反LED9控制口。 ** 入口参数:无 ** 出口参数:无 ****************************************************************************************** */ void __irq IRQ_Timer0 (void) { if ((IO0SET & BEEP) == 0) IO0SET = BEEP; /* 关闭BEEP */ else IO0CLR = BEEP; T0IR = 0x01; /* 清除中断标志*/ VICVectAddr = 0x00; /* 通知VIC中断处理结束*/ } /* ***************************************************************************************** ** 函数名称:main()

实验四 定时器中断实验

实验四 定时器中断实验 一:实验目的 1.熟悉定时器初始化的步骤; 2.熟悉定时器控制寄存器(TCR )的含义和使用; 3.熟悉定时器的原理和应用。 二:实验内容 本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF 引脚相连的LCD 指示灯。当定时器中断产生时可以观察到LCD 周期性闪烁。 三:实验原理 1.定时器 .C54xx 系列的DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。应用中可以用定时器来产生周期性的CPU 中断或脉冲输出。定时器的功能方框图如图9.1所示,其中有一个主计数器(TIM )和一个预定标计数器(PSC )。TIM 用于重装载周期寄存器PRD 的值,PSC 用于重装载周期寄存器TDDR 的值。 图5.1信号,是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。

定时器实际上是有20bit 的周期寄存器。它对CLKOUT 信号计数,先将PSC (TCR 中的D6~D9位)减1,直至PSC 为0,然后把TDDR (TCR 中的低4位)重新装载入PSC ,同时将TIM 减1,直到TIM 减为0。这时CPU 发出TINT 中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度与CLKOUT 一致,然后将PRD 重新装入TIM ,重复下去直到系统或定时器复位。 定时器产生中断的计算公式如下: TINT t c 为 CLKOUT 的周期) 定时器由三个寄存器组成:TIM 、PRD 、TCR 。 TIM :定时器寄存器,用于装载周期寄存器值并自减1。 PRD :周期寄存器,用于装载定时器寄存器。 TCR :定时器控制寄存器,包含定时器的控制状态位。 定时器是一个片内减计数器,用于周期地产生发,后者每个CPU 时钟周期减1,当计数器减至0周期计数器被定时周期值重新装载。 在正常操作模式下,当TIM 自减至0时,TIM 将被PRD 内的数值重装载。在硬件复位或定时器单独复位(TCR 中TRB 位置1)的情况下,主定时器模块输出的是定时器中断(TINT )信号。该中断被发送至CPU ,同时由TOUT 引脚输出。TOUT 脉冲的宽度等于CLKOUT 的时钟宽度。 预定标模块由两个类似TIM 和PRD 的单元构成。它们是预定标计数器(PSC )和定时器分频寄存器(TDDR )。PSC 、TDDR 是RCR 寄存器的字段。在正常操作时PSC 自减为0,TDDR 值装入PSC ,同样在硬件复位或定时器单独复位的情况下,TDDR 也被装入PSC 。PSC 被CPU 时钟定时,即每个CPU 时钟使PSC 自减1。PSC 可被TCR 读取,但不能直接写入。 当TSS 置位时,定时器停止工作。若不需要定时器,终止定时操作,可使芯片工作在低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM 和PRD )作为通用的存储器单元,可以在任意周期对它们进行读或写操作。 TIM 的当前值可被读取,PSC 也可以通过TCR 读取。因为读取这两个存储器需要两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC 两次读的结果可能有差别,不够准确。若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS 置1和清0后,可重新开始定时。 通过TOUT 信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。对于有多个定时器的DSP ,由寄存器GPIOCR 中的第15位控制使用某一个定时器产生的TOUT 信号。 2.定时器初始化 (1)定时器初始化步骤 ●TCR 的TSS 位写1,定时器停止工作; ●装载TRD ;

定时器实验报告

定时器实验报告 文档编制序号:[KK8UY-LL9IO69-TTO6M3-MTOL89-FTT688]

电子信息工程学系实验报告课程名称:单片机原理及接口应用 实验项目名称:51定时器实验 实验时间: 班级:姓名:学号: 一、实验目的: 熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 二、实验环境: 软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件 三、实验原理: 1、51单片机定时计数器的基本情况 8051型有两个十六位定时/计数器T0、T1,有四种工作方式。 MCS-51系列单片机的定时/计数器有几个相关的特殊功能寄存器: 方式控制寄存器TMOD; 加法计数寄存器TH0、TH1 (高八位);TL0、TL1 (低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON) 定时/计数器启停控制位TR0、TR1(TCON) 定时/计数器中断允许位ET0、ET1(中断允许寄存IE) 定时/计数器中断优先级控制位PT0、PT1(中断优IP)

2 、51单片机的相关寄存器设置 方式控制寄存器TMOD: D7D6D5D4D3D2D1D0 GATE C/T M1 M0GATE C/T M1M0 TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。 TMOD各位的含义如下: 1. 工作方式选择位M1、M0 M1、M0的状态决定定时器的工作方式: M1M0功能说明 0 0 1 10 1 1 方式0,为13位的定时/计数器 方式1,为16位的定时/计数器 方式2,为常数自动重装入的8位定时/计数器 方式3,T0分为两个8位定时/计数器, T1在该方式时停止 3、51单片机定时器的工作过程(逻辑)方式一方式1:当M1M0=01时,定时器工作于方式1。

单片机定时器实验报告

XXXX大学信息工程与自动化学院学生实验报告 (2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

单片机实验 中断、定时器

大连理工大学实验报告(模板) 实验时间:年月日星期时间::~ : 实验室(房间号):实验台号码:班级:姓名: 指导教师签字:成绩: 实验三外部中断/INT0实验 一、实验目的和要求 学习、掌握单片机的中断原理。正确理解中断矢量入口、中断调用和中断返回的概念及物理过程。学习编写“软件防抖”程序,了解“软件防抖”原理。 对/int0、/int1两个外部中断进行编程,其中: ●主程序的功能:LDE灯“全亮”、“全灭”交替进行 --------(状态2); ●Int0中断服务程序功能:2个相邻的LED灯被点亮且循环左移(状态0); ●Int1中断服务程序功能:1个LED灯被点亮且循环右移 ---(状态1);【注意】:实验仪上的LED灯物理位置最左侧为d0;最右侧为d7。 二、实验算法 1 在主程序中利用CPL P3.3的指令驱动其电平不断地转换(由逻辑笔电路做程序状态监视)。 2 在中断服务程序中将P3.3置位(P3.3=1),实现对计数器“加1”并(通过P1口)显示的功能。 3 中断结束后回到主程序,程序继续对P3.3的电平不断取反。 三、实验电路图

四、实验流程图 主程序入口INT0入口 设置中断允许P3.2置1 设置中断优先级调用延时子程序 设TCON 计数器加一并显示 CLR A开中断 (P0)—(A) P3.2=0? 调用延时子程序调用延时子程序 (A)—(A) RETI INT1同理 五、程序清单 ORG 0000H LJMP START ORG 0003H LJMP INT_0 ORG 0013H LJMP INT_1 ORG 0100H ;主程序 START: MOV SP,#60H MOV IE,#85H

外部中断,定时器与串行口综合实验

硬件实验八外部中断,定时器与串行口综合实验 一.实验目的 1.进一步巩固外部中断,定时计数器和串行口的原理 2.进一步巩固外部中断,定时计数器使用和编程方法 3.进一步巩固串行口与PC机通信的实现方法 二.实验内容 独立按键按下后,单片机每隔3s将内部的RAM60H开始的存储单元中的数据发送到串行口,并在PC上的串行调试助手上显示。再次按下,则停止传送。若继续按下,则继续传送。以此类推。 三.实验连线 用杜邦线将P3.0口和独立按键连接起来 四.实验说明 本实验结合外部中断,定时计数器和串行口的知识,实现数据定式传输。独立按键的按下将产生从高到低的电平变化,可作为外部中断的输入信号。 主程序中,应首先对外部中断,定时计数器和串行口进行初始化。在外部中断程序中判断是发送还是停止发送,若需要发送数据则开启定时器,若停止发送数据则关闭定时器。在定时器中断服务程序中发送数据。 五.实验代码及其现象 程序代码: #include

#define uchar unsigned char #define uint unsigned int char code table[]="communication engineering kingsam 1006052150"; char *p; uint i; int k=0; char overtime,flag; void init() //初始化函数 { TMOD=0x21; //置工作方式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xfd; TL1=0xfd; EA=1; EX0=1; ET0=1; IT0=1; ES=1; TR1=1; //启动定时器R1 SCON=0x40; p=0x60;

定时器基本功能实验(定时器中断)

实验二、定时器基本功能实验(定时器中断) 班级: 学号: 姓名:

一、实验目的 熟悉LPC2000 系列ARM7 微控制器的定时器0的基本设置及定时中断应用。二、实验设备 硬件:PC 机、LPC2131 教学实验开发平台 软件:Windows98/XP系统,ADS 1.2 集成开发环境 三、实验内容 使用定时器 0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。备注:EasyARM2131 实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200。 四、实验步骤 1、启动 ADS 1.2,使用ARM Executable Image for lpc2131 工程模板建立一个工程TimeOut_C; 2、在 user 组中的main.c 中编写主程序代码; 3、主程序中使用IRQEnable( )使能IRQ 中断; 4、选用 DebugInExram 生成目标,然后编译连接工程; 5、将 LPC2131 实验板上的Beep 跳线短接到P0.7; 6、选择 -> ,启动AXD 进行JTAG 仿真调试; 7、全速运行程序,蜂鸣器会响一秒,停一秒,依次循环。 五、实验参考程序 #include "config.h" #define BEEP 1 << 7 /* P0.7 控制BEEP,低电平蜂鸣 */ /* ********************************************************************* ** 函数名称:IRQ_Timer0() ** 函数功能:定时器 0 中断服务程序,取反LED9 控制口。 ** 入口参数:无 ** 出口参数:无 ********************************************************************* */ void __irq IRQ_Timer0 (void) { if ((IO0SET & BEEP) == 0) IO0SET = BEEP; /* 关闭BEEP */

4实验四_定时器计数器

PIC单片机定时器实验 课程名称微机原理与单片机技术 学院自动化学院 专业班级电子信息科学与技术(2)班 学号 3214001426 姓名林玫妮 2016年 11月 7日

一、实验目的 熟练掌握在 PIC16F877 的定时器 TMR0 的工作原理配置方式,会使用定时器查 询、中断方式,以及计数器模式。 二、实验内容和要求 在MPLAB环境中建立工程,实现对PIC单片机的定时器TMR0的初始 化,分别实现查询方式和中断方式定时,对比中断及查询方式的差异。实现对 PIC单片机的计数器的初始化,掌握计数器脉冲的输入硬件电路。 三、实验主要仪器设备和材料 计算机,MPLAB 软件,PIC 单片机实验板 HL-K18 四、实验方法、步骤及结果测试 1,熟悉电路板,熟悉相关电路原理图(要求使用 4M 晶振进行编程)。 2,任务1,分别采用定时器查询和定时器中断的方式,实现蜂鸣器按0.5秒周期鸣叫,即一秒鸣叫2次。比较查询与中断响应的区别。在MPLAB环境中 建立工程,按要求编写如下程序,并加载到工程中,编译并下载到单片机实 验板中观察实验结果。 例程1定时器查询方式 主程序 计算初值,实现蜂鸣 器按0.5s周期鸣叫

例程 2 定时器中断方式计算初值,实现蜂鸣器按0.5s周 期鸣叫 主程序 中断服务程序

例程3计数器模式 五、实验报告要求 1,对例程 1、2、3 的每一句程序进行注释。描述如何改变寄存器及其对 IO 的影

响。 (1)例子1: (2)例子2:

(3)例子3: 2,详细写出任务 1 中定时器初值的计算过程。 任务 1 中定时器初值的计算过程如下: 3,画出例程 2 的程序流程图。 4,讨论定时器查询方式和中断方式的差异和优缺点。 (1)中断方式不占用CPU资源,定时时间到会自动进入中断程序,准确度高。自动调用对应的函数。 (2)查询方式需要一直占用CPU资源(需要一直扫描标志位),定时时间到后需要程序查询到才能判断时间到,稍微有点误差。在需要的地方,需要手动调用对应函数 六、思考题 编写中断服务程序,实现蜂鸣器0.25秒周期鸣叫,同时LED数码管前两位按照100 毫秒周期从 10 开始倒数。

实验七:定时器中断实验

微控制器 综合设计与实训实验名称:实验七定时器中断实验

实验七:定时器中断实验 1 实训任务 (1) 设置定时器时钟,自动重装载值,分频系数和计数方式; (2) 设置定时器中断优先级; (3) 通过编写延时函数实现定时器中断。 1.1 实验说明 STM32的通用定时器是由一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。STM32的通用定时器的用途:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,可以使脉冲长度和波形周期在几个微秒到几个毫秒间调整。 STM32F10x的通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器功能包括: (1)6位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。 (2) 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间的任意数值。 (3) 4个独立通道(TIMx_CH1~4),这些通道可以用来作为: A.输入捕获 B.输出比较 C.PWM生成(边缘或中间对齐模式) D.单脉冲模式输出 (4) 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。 (5) 如下事件发生时产生中断/DMA: A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) C.输入捕获

D.输出比较 E.支持针对定位的增量(正交)编码器和霍尔传感器电路 F.触发输入作为外部时钟或者按周期的电流管理 定时器的时钟来源有4个: (1)内部时钟(CK_INT) (2) 外部时钟模式1:外部输入脚(TIx) (3)外部时钟模式2:外部触发输入(ETR) (4) 内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B 提供时钟)。 这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。这里的CK_INT时钟是从APB1倍频来的,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。这里还要注意的就是高级定时器的时钟不是来自APB1,而是来自APB2。 本实验使用定时器3产生溢出中断,在中断服务函数里面翻转LED上的电平,来指示定时器中断的产生。定时器相关的库函数主要集中在固件库文件stm32f10x_tim.h和stm32f10x_tim.c文件中。 1.2 实验步骤 (1) 在实训平台上将PE4和PE5分别连接LED灯; (2) 复制上一个实验工程修改名称并保存为定时器中断实验; (3) 新建timer.c和timer.h文件,添加至工程中; (4) 编写timer.h文件,声明定时器3初始化函数; (5) 编写timer.c文件,编写定时器3初始化函数,设置分频系数、计数方式、自动重装载计数周期值和时钟分频因子; (6) 编写main函数,程序编译正确;

单片机实验报告——定时器

实验四定时器实验 自动化121班1202100236 张礼 一.实验目的 掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。 二.实验仪器 单片机开发板一套,计算机一台。 三.实验任务 编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。 开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。两片锁存器的输出使能端OE都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。而U2的锁存使能端LE由P2.1控制,所

以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。 汇编语言程序流程如图4-2: 四.实验步骤: 1.数码管的0~9的字型码表如下: 2.参考图4-2所给的程序流程图编写实验程序。(注:以下程序为两位60秒计数程序) #include sbit wei=P2^0; sbit duan=P2^1; char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

相关文档
最新文档