//----------------------------------------------
//程序名:key_smg_2.c
//程序描述:启动时四个数码管全都显示0,当按一下按键(key=0有效),开始累加,直到9999停止,蜂鸣器响,当途中有按键按下则停止累加,再次按下继续。
//编程时间:2010.1.17
//----------------------------------------------
#include<reg52.h> //包含特殊功能寄存器库
//---定义---------------------------------------
sbit fmq=P3^6;
#define key P1^4;
unsigned char k,ge,shi,bai,qian;
unsigned int i=0;
unsigned char a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char b[4]; //定义b数组,存储每一位数码管上的字符
//---显示延时-----------------------------------
void delaym(unsigned int t)
{
unsigned char j; //j=0~255
while(t--)
{
for(j = 0; j <150; j++); //j进行的内部循环
}
}
//---主函数-------------------------------------
void main()
{
TMOD=1;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
for(k=0;k<4;k++)
{
P0=b[k];
P2=k;
delaym(2);
}
}
}
//---定时---------------------------------------
time0_int(void) interrupt 1 //中断服务程序
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
i++;
qian=i/1000;
bai=i%1000/100;
shi=i%100/10;
ge=i%1000;
b[3]=a[qian];
b[2]=a[bai];
b[1]=a[shi];
b[0]=a[ge];
if(i==9999)
{
while(1)
{
fmq=1;
b[3]=a[10];
b[2]=a[10];
b[1]=a[10];
b[0]=a[10];
}
}
}
小弟初学中断和定时,仿真如上程序,当i加到9999时,并没有在四个数码管上都显示9999,只是在shi位上显示9,并且蜂鸣器没有响,怎么回事?还有如果像我程序描述那样用按键来控制的话,程序该怎么写?多谢高手们指教了!!! |