标题: 51单片机编程,求大佬帮忙看看哪里出错了 达到一定的值蜂鸣器发生报警 [打印本页]

作者: chengkong    时间: 2019-5-21 22:06
标题: 51单片机编程,求大佬帮忙看看哪里出错了 达到一定的值蜂鸣器发生报警
刚学单片机不久,自己依葫芦画瓢的写了一个程序,要求达到一定的值蜂鸣器发生报警,报警声长用数码管显示,一分钟后关闭,可是仿真的时候数码管并不显示时间,用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++;        
}



作者: zhanghyg    时间: 2019-5-22 10:34
AD转换程序错误




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