STC89C52单片机定时器2的使用讲解学习
STC89C52单片机定时器2详细整理

STC89C52单片机定时器2详细整理51单片机是我自学的第一款单片机,那时正好是过春节,想起那个寒假,外面下着大雪,有时还会传来一两声爆竹的炸响,而我一个人在房间里摆弄单片机开发板,反复调试程序的时光,真是难忘!我自认为这款单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。
定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。
所以掌握好定时器2还是非常有必要的。
以下是在我完全搞明白它的原理和用法的基础上整理的一篇小文章。
读起来,好像Datasheet一样!请原谅,希望没有辜负你的点击!定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获、自动重新装载(递增或是递减计数)和波特率发生器。
知识点一、定时器2的控制寄存器T2CON(可按位寻址)*D7位--TF2:定时器2溢出标志位。
用于请求中断(必须由软件清0)D6位--EXF2:定时器外部标志位。
当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0)D5位--RCLK:接受时钟标志位。
默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供。
D4位--TCLK:发送时钟标志位。
原理同上D3位--EXEN2:定时器2的外部使能标志位。
定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装D2位--TR2:定时器2启动/停止控制位。
D1位--C/T2:定时器2的定时器/计数器选择位(在reg52头文件中定义为了C_T2,请注意,下面相同)D0位--CP/RL2:捕获/重装标志位。
知识点二定时器2的模式控制寄存器T2MOD(不可按位寻址)该寄存器在单片机的头文件reg2.h中可能没有被定义,自己定义吧!D1位—T2OE:定时器2输出使能位D0位—DCEN:向下计数使能位知识点三:定时器2的三种模式**1、捕获模式*在'CP/RL2=1'&&'TR2=1'时进入捕获模式。
STC89S52单片机定时器T2捕获

/****************************************************************************** ***************说明:定时器2捕获功能的使用。
由于只有三个三个数码管,帮只显示捕获的低八位,经验证,当P1.1(T2EX)用定时器0控制发出一个下降沿,用T2的P1^1;引脚进行捕获,从而得到高电平时间用以测量波形的宽度跳变时,数据被捕获/****************************************************************************** ***************//****************************************************************************** ****************/#include<reg52.h> //常用的头文件,52单片机包含定时器2#include <intrins.h> //51基本运算(包括_nop_空函数)#define uchar unsigned char#define ulong unsigned long#define uint unsigned intsbit STC_WR=P3^6;sbit IC138_C=P2^7;sbit IC138_B=P2^6;sbit IC138_A=P2^5;sbit p10=P1^0; //有定时器0控制从P2.0口输出一个信号bit flag=0;#define Port_Data P0uint tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar count=0; //注,使用扩展RAM时一定要注意初始化uchar temp[]={0,0,0,0,0,0,0,0}; //用于赋捕获值/****************************************************************************** ****************/void delay(uint z) //ms级延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/****************************************************************************** ****************/void BUZZ_Y5C(){STC_WR=0;IC138_C=1;IC138_B=0;IC138_A=1;}void we_Y6C(){STC_WR=0;IC138_C=1;IC138_B=1;IC138_A=0;}void du_Y7C(){STC_WR=0;IC138_C=1;IC138_B=1;IC138_A=1;}void up_we_Y6C(){STC_WR=1;IC138_C=1;IC138_B=1;IC138_A=0;}void up_du_Y7C(){STC_WR=1;IC138_C=1;IC138_B=1;IC138_A=1;}void display() //显示程序{du_Y7C();Port_Data=tab[temp[0]];up_du_Y7C();we_Y6C();Port_Data=0x01;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[1]]; up_du_Y7C();we_Y6C();Port_Data=0x02;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[2]]; up_du_Y7C();we_Y6C();Port_Data=0x04;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[3]]; up_du_Y7C();we_Y6C();Port_Data=0x08;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[4]]; up_du_Y7C();we_Y6C();Port_Data=0x10;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[5]];up_du_Y7C();we_Y6C();Port_Data=0x20;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[6]];up_du_Y7C();we_Y6C();Port_Data=0x40;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[7]];up_du_Y7C();we_Y6C();Port_Data=0x80;up_we_Y6C();delay(1);}void gaibian(){uint x;x=RCAP2H*256+RCAP2L;temp[7]=x%10;x=x/10;temp[6]=x%10;x=x/10;temp[5]=x%10;x=x/10;temp[4]=x%10;x=x/10;temp[3]=x%10;x=x/10;temp[2]=x%10;x=x/10;temp[1]=x%10;temp[0]=x/10;RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;flag=0;}/****************************************************************************** ****************/void time2_init(void) //捕获模式,当EXEN2=1,外部T2EX为负跳变时,则将定时器中的值捕获到RCAP2L和RCAP2H{TH2=0; //初值为0,不断自加,当溢出时中断,或者外部T2EX由1到0时产生中断TL2=0;RCAP2L=0;RCAP2H=0; // 允许T2定时器中断T2CON=0x09; //必须将T2CON.7位置1才能进行外部捕获/或者外部T2EX由1到0时产生中断}void time_init(){TMOD=0X12;TH0=256-12;TL0=256-12;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;ET2=1;TR0=1;TR1=1;TR2=1;}/****************************************************************************** ****************/void main(){time2_init();time_init();BUZZ_Y5C();Port_Data=0X00;while(1){if(flag==1)gaibian();display(); //只用来显示低八位}}void timer2(void) interrupt 5{if(TF2){TF2=0; //若定时器溢出则产生中断清0RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;}else{TR0=0;TR2=0;flag=1;EXF2=0; //若外部负跳变时产生中断清0}}void timer0() interrupt 1{p10=~p10;}void timer1() interrupt 3{static uchar x=0;TH1=(65536-50000)/256;TL1=(65536-50000)%256;x++;if(x==20){TR2=1;TR0=1;x=0;RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;}}。
STC89C52RC单片机用户手册(20210304163300)

STC89C52RC单片机用户手册(20210304163300)*****2R单片机介绍*****2R单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2. 工作电压:5.5V?3.3V (5V单片机)/3.8V?2.0V (3V单片机)3. 工作频率范围:0?40MHz相当于普通8051的0?80MHz实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O 口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP (在系统可编程)/IAP (在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1 )直接下载用户程序,数秒即可完成一片8. 具有EEPRO功能9. 具有看门狗功能10. 共3个16位定时器/计数器。
即定时器T0、T1、T211. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12. 通用异步串行口(UART,还可用定时器软件实现多个UART13. 工作温度范围:-40?+85C(工业级)/0?75C(商业级)14. PDIP封装*****2R单片机的工作模式掉电模式:典型功耗<0.1卩A,可由外部中断唤醒,中断返回后,继续执行原程序空闲模式:典型功耗2mA 正常工作模式:典型功耗4Mr 7mA掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备*****2R 引脚图*****2RC 脚功能说明VCC (40弓I 脚):电源电压VSS (20弓I 脚):接地P0端口(P0.0?P0.7, 39?32引脚):P0 口是一个漏极开路的8位双向I/O 口。
STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。
软件定时:执行一个循环程序进行时间延迟。
定时准确,不需要外加硬件电路,但会增加CPU 开销。
专用硬件电路定时:可以实现请精确的定时和计数,但参数调节不方波。
可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方式和其他参数,使用方便。
以下说明仅试用宏晶的STC89C52!!定时器2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址)000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。
定时器2 可配制成向上/向下计数器。
0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址)TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会置位。
EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。
定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。
EXF2 位必须用软件清零。
在递增/递减计数器模式(DCEN=1)中,EXF2 位不会引起中断。
RCLK:5 接收时钟标志。
RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。
RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。
TCLK:4 发送时钟标志位。
TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。
TCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 发送时钟。
EXEN2:3 定时器2 外部使能标志。
STC89C52单片机定时器2的使用知识讲解

52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8HTF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
STC89C52单片机用户手册

STC89C52单片机用户手册一、概述STC89C52 单片机是一款高性能、低功耗的 8 位微控制器,具有丰富的片内资源和强大的功能,广泛应用于各种电子设备和控制系统中。
二、主要特点1、增强型 8051 内核,指令代码完全兼容传统 8051 单片机。
2、工作电压范围宽,可在 38V 55V 之间正常工作。
3、片内集成 8K 字节的 Flash 程序存储器,可反复擦写 1000 次以上。
4、 512 字节的片内数据存储器(RAM)。
5、拥有 32 个可编程的 I/O 口,方便连接外部设备。
6、 3 个 16 位定时器/计数器,可用于定时、计数和脉冲宽度测量等功能。
7、 8 个中断源,包括 2 个外部中断、3 个定时器中断和 2 个串行口中断,具有两级中断优先级。
8、全双工串行通信接口(UART),可方便地与其他设备进行通信。
三、引脚功能1、 VCC:电源正极,接+5V 电源。
2、 GND:电源地。
3、 P0 口:8 位漏极开路双向 I/O 口,作为地址/数据总线分时复用口。
4、 P1 口:8 位准双向 I/O 口,具有内部上拉电阻。
5、 P2 口:8 位准双向 I/O 口,作为高 8 位地址总线。
6、 P3 口:8 位准双向 I/O 口,具有第二功能。
例如,P30 为串行输入口(RXD),P31 为串行输出口(TXD)等。
四、存储结构1、程序存储器STC89C52 单片机的程序存储器空间为 8K 字节,地址范围为0000H 1FFFH。
用于存放用户编写的程序代码。
2、数据存储器数据存储器分为内部数据存储器和外部数据存储器。
内部数据存储器包括低 128 字节的 RAM(地址范围为 00H 7FH)和高 128 字节的特殊功能寄存器(SFR,地址范围为 80H FFH)。
外部数据存储器最大可扩展至 64K 字节。
五、时钟与复位1、时钟电路STC89C52 单片机可以使用内部时钟和外部时钟。
内部时钟通过在XTAL1 和 XTAL2 引脚之间连接晶振和电容来产生时钟信号。
STC89C52单片机用户手册讲解学习

STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:∙增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.∙工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)∙工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz∙用户应用程序空间为8K字节∙片上集成512字节RAM∙通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
∙ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片∙具有EEPROM功能∙具有看门狗功能∙共3个16位定时器/计数器。
即定时器T0、T1、T2∙外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒∙通用异步串行口(UART),还可用定时器软件实现多个UART∙工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)∙PDIP封装STC89C52RC单片机的工作模式∙掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序∙空闲模式:典型功耗2mA∙正常工作模式:典型功耗4Ma~7mA∙掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。
80C52、AT89C52的定时计数器2

∙80C52、AT89C52的定时/计数器2∙作者:佚名发布时间:2009-10-30 阅读次数:543 字体大小: 【小】【中】【大】80C52、AT89C52、80C51FA/FB等单片机增加了一个16位定时/计数器T2,可用于定时或外部事件计数。
它有三种工作方式:16位自动重装初值的定时/计数器、捕捉事件、串行口波特率发生器。
与T2有关的外部引脚是:P1。
0-外部计数脉冲输入端T2,P1。
1-外部控制端T2EX。
8052、AT89C52、80C51FA/FB等单片机增加了一个16位定时/计数器T2,可用于定时或外部事件计数。
它有三种工作方式:16位自动重装初值的定时/计数器、捕捉事件、串行口波特率发生器。
与T2有关的外部引脚是:P1。
0-外部计数脉冲输入端T2,P1。
1-外部控制端T2EX。
1、T2的特殊功能寄存器1)控制寄存器T2CON(C8H)位:TF2 EXF2 RCLK TCLK EXEN2 TR2 C//T2 CP//RL2TF2:T2溢出中断标志,在捕捉方式和自动重装初值方式中计数溢出时置1,对应中断入口002BH,但中断响应后,必须由软件清0。
在串行口波特率发生器方式中TF2不会置1。
EXF2:T2外部中断标志。
当EXEN2=1(T2外部中断允许)时,引脚T2EX(P1。
1)的负跳变使EXF2=1,CPU响应中断,入口地址002BH;EXF2也必须由软件清0。
EXEN2:T2外部中断允许标志。
使EXEN2=1,当T2工作在捕捉方式时,引脚T2EX上出现的负跳变使EXF2=1,申请中断,同时TH2、TL2的当前值自动送入RCAP2H、RCAP2L寄存器;如果T2工作在重载初值方式,那么T2EX的负跳变将RCAP2H和RCAP2L的内容自动装入TH2、TL2,同时EXF2=1,申请中断。
EXEN2=0时,T2EX引脚上的变化对T2工作无影响。
RCLK、TCLK:选择串行口波特率发生器方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:
0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:
TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器
TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器
EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部
时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获
或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2
C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变
(EXEN2=1时),将会引起T2重装载;CP/RT2=1时,选择捕获方式,这时若T2EX 引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。
但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。
对应郭天祥老师的52单片机板子!
/***********************************
程序编著院校南昌航空大学
晶振11.0592MHZ
T2CON(0XC8)的说明定时器2可以产生两个中断TF2和EXF2,这两个中断通过逻辑或共享一个端口
定时器2溢出时TF2置位如果定时器工作在重装模式RCAP2H和RCAP2L的值会自动装入TH2和TL2 TR2启动
TF2和TL2必须软件清零
T2MOD 必须定义sfr T2MOD= 0xC9;
扩展RCLK TCLK其中一个为高电平定时器2做波特率发生器
***********************************/
#include<reg52.h>
#include<intrins.h> // _nop_();
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD = 0xC9;
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^7;
uchar timer2_ctr,num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//11.0592MHZ延时函数
void delay(uint ms)
{
uint x;
while(ms--)
{
for(x=125;x>0;x--);
}
}
//初始化主函数
void init()
{
dula=wela=0; //关闭数码管显示
RCAP2H=(0XFFFF-50000)/256;
RCAP2L=(0XFFFF-50000)%256;
//TH2=RCAP2H; //会自动重装
//TL2=RCAP2L;
T2CON=0;
T2MOD=0;
IE=0XA0; //开总中断和定时器2中断TR2=1; //启动
}
void display(uchar num)
{
uchar gw,sw,bw;
bw=num/100;
sw=num%100/10;
gw=num%10;
P0=0xfe;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[bw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfd;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[sw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfb;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[gw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3); //显示个十百
}
void main()
{
init();
while(1)
{
display(num);
}
}
void timer2() interrupt 5
{
TF2=0; //注意!定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
timer2_ctr++;
if(timer2_ctr>=20) //定时50ms×20=1000ms即1秒钟,这里模拟一个60秒秒表
{
timer2_ctr=0;
led=~led;
num++;
if(num>=256)
{
num=0;
}
}
}
现象是:数码管显示0-256,
程序很简单!朋友们可以自己试试!
不明白问我739141300!
祝你学成!。