刚学单片机不久,自己依葫芦画瓢的写了一个程序,要求达到一定的值蜂鸣器发生报警,报警声长用数码管显示,一分钟后关闭,可是仿真的时候数码管并不显示时间,用keil调试的时候发现不能进入定时中断,想了很久都不知道为什么这样,不知道如何改,求求大佬们帮助。
单片机源程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar AD_val;
uchar aa,shi,ge,miao,zheng,flag;
sbit wei1=P2^6;
sbit wei2=P2^7;
sbit buzzer=P1^0;
sbit CS=P3^0;
sbit CLK=P3^6;
sbit DIO=P3^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char A_D();
void init();
void display(uchar shi,uchar ge);
void delay(uint z);
void alarm();
void main()
{
while(1)
{
AD_val=A_D();
zheng=AD_val/51;
alarm();
if(buzzer==0)
{
// miao=60;
init();
if(aa==20)
{
aa=0;
miao++;
if(miao==60)
{
miao=0;
TR0=0;
buzzer=1;
}
shi=miao/10;
ge=miao%10;
}
display(shi,ge);
}
}
}
unsigned char A_D()//模数转换
{
uchar i,dat;
CS=1;
CLK=0;
CS=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
CLK=0;
DIO=0;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
for(i=0;i<8;i++)
{
CLK=1;
CLK=0;
dat<<=1;
dat|=(uchar)DIO;
}
CS=1;
return dat;
}
void display(uchar shi,uchar ge)//显示程序
{
wei1=1;
wei2=0;
P0=table[ge];
delay(1);
P0=0Xff;
wei1=0;
wei2=1;
P0=table[shi];
delay(1);
P0=0xff;
}
void delay(uint z)//延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void alarm()//警报
{
if(zheng>0)
{
buzzer=0;
}
else
{
buzzer=1;
}
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
PT0=1;
}
void timer0() interrupt 1//定时器中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
|