标题: 99秒计时,希望大家能帮帮我这个菜鸟,谢谢了 [打印本页]

作者: aaa123    时间: 2013-7-20 16:09
标题: 99秒计时,希望大家能帮帮我这个菜鸟,谢谢了
#include<reg51.h>
#define uchar unsigned char
uchar sec=0,time=0;         //sec每过一秒加一,time每中断一次加一
uchar code num[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};//0--9的编码
sbit DU=P2^6;
sbit WE=P2^7;
sbit SDA=P2^0;
sbit SCL=P2^1;
void delay(uchar n)         //n=1,延时0.2ms
{
        uchar i,j;
        for(i=0;i<n;i++)
                for(j=0;j<110;j++);
}
void t0_init()        //定时器T0初始化函数{        P0=0xff;        TMOD=0x01; //选择定时器T0方式为1 ,16位        TH0=60;        TL0=176;//装初值        TR0=1;        //让T0开始工作        ET0=1; //打开T0中断        EA=1; //打开全局中断        delay(5);}
void display(uchar sec)         //数码管显示函数{        uchar Ge,Shi;           //Ge用来显示个位,Shi 十位//        if(sec>=100)//                sec=0;        Ge=sec%10;        Shi=sec/10;        DU=1;                  // 个位显示        P0=num[Ge];        DU=0;        P0=0xff;        WE=1;        P0=0xfd;//1111 1101        WE=0;        delay(5);        DU=1;                   // 十位显示        P0=num[Shi];        DU=0;        P0=0xff;        WE=1;        P0=0xfe; //1111 1110        WE=0;        delay(5);        //这个延时一定要加}void main(){        t0_init();        while(1)        {                display(sec);        }}void t0()interrupt 1          //定时器T0中断函数{        time++;        if(time==20)        {//                if(sec>=100)//                        sec=0;                sec++;                time=0;                wr=1;        }        TL0=176;        TH0=60;}本来作用是利用T0计时99秒上面有两个注销的部分,任选其中一个,为{:soso_e154:}{:soso_e154:}{:soso_e154:}什么选上面那个到了九十九,到零为什么会停好久才回又开始计时,而选后面那个到九十九,到零,又直接开始计时,不是两个作用一样吗?不知道有没表达清楚,但是还是请帮帮忙吧,谢谢了


作者: 佛祖哦买嘎    时间: 2013-12-27 09:41
有汇编的吗?
作者: mjc1969    时间: 2014-1-3 14:15
中断的问题,不宜选用中断外注销




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1