找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1239|回复: 1
打印 上一主题 下一主题
收起左侧

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++;        
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:330198 发表于 2019-5-22 10:34 | 只看该作者
AD转换程序错误
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表