程序如下:
#include<stc12c5a60s2.h>
#include<datatype.h>
#define uchar unsigned char
#define uint unsigned int
sbit m=P0^0;
sbit n=P0^1; //m,n控制秒
sbit a=P0^2;
sbit b=P0^3; //a,b控制分钟
sbit x=P0^4;
sbit y=P0^5; //x,y控制小时
sbit zhan=P0^6; // 控制外部中断开
sbit bo=P0^7;
sbit led=P3^0;
sbit p33=P3^3; // 按键改数值
sbit p35=P3^5; // 改数值
sbit p36=P3^6; // 该数值
sbit p32=P3^2; // 外部中断触发
int num,k,p,q;
unsigned char pp;
code char shuzi[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay(int ms)
{
int a,b;
for(a=0;a<ms;a++)
for(b=0;b<80;b++);
}
void display(int num1)
{ int s=35;
int i,j;
int c,d;
int w,e;
i=num1%10;
j=num1/10;
c=q%10;
d=q/10;
w=p%10;
e=p/10;
while(s--)
{
m=0;
P1=shuzi[i];
delay(2);
m=1;
n=0;
P1=shuzi[j];
delay(2);
n=1; //显示秒
a=0;
P1=shuzi[c];
delay(2);
a=1;
b=0;
P1=shuzi[d];
delay(2);
b=1; //显示分钟
x=0;
P2=shuzi[w];
delay(2);
x=1;
y=0;
P2=shuzi[e];
delay(2);
y=1; //显示小时
}
}
void main()
{
P1M1=0x00;
P1M0=0xff;
P2M1=0x00;
P2M0=0xff;
P0M1=0x00;
P0M0=0xff;
P3M1=0x00;
P3M0=0xff;
TMOD=0x01; //选择定时器中断的运行方式
TL0=(65536-46038)%256;//赋定时器的初值
TH0=(65536-46038)/256;
EA=1; //中断总开关
ET0=1; //定时器的开关
TR0=1; //开启定时器中断
PX0=1;
PT0=0;
while(1)
{
display(k);
}
}
void T0_time() interrupt 1
{
TH0=(65536-46038)/256;
TL0=(65536-46038)%256;
num++;
if(num==20)
{
num=0;
led=~led;
k++;
if(k==60)
{
k=0;
q++;
if(q==60)
q=0;
}
if(q==0&&k==0)
{
p++;
if(p==24)
p=0;
}
}
if(zhan==0)
{
// EA=1;
EX0=1;
IT0=1;
// p32=1;
// if(bo==0)break;
}
zhan=1;
}
void waibu() interrupt 0
{
bo=1;
while(1)
{
p33=1;
if(p33==0){k+=1;}
p35=1;
if(p35==0){q+=1;}
p36=1;
if(p36==0){p+=1;}
// display(k);
if(bo==0)
for(pp=10;pp>0;pp--);
if(bo==0)
{
IE0=0;
break;
}
}
EX0=0;
}
要实现的功能是T0计时,然后zhan控制外部中断0的开启,p3^2触发进入外部中断0,bo按键跳出外部中断后继续t0的计数。
但是现在是跳出外部中断后计数器就被清零了,没有继续之前的计数。
弄了一晚上,不知道是怎么回事,求解呀。
希望大家帮忙。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
%是求余运算符,8bit是256,所以求出来的余数是寄存器低八位所需要的数值。路过帮解释下。
一周热门 更多>