51的复位按键不起作用,按下后程序无法重新执行,求指点

2020-01-20 19:06发布

复位键的电路图如图所示
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
42条回答
chenhai
1楼-- · 2020-01-24 08:39
xiaoseaip 发表于 2015-4-7 11:13
把程序贴上来看看

程序有点多,我就贴个main.c了
/*******************************************************************************
* 文件名                 :  18B20数字温度计加DS1302实时显示时间
* 说明     :   LCD1602显示温度值及当前时间。
*******************************************************************************/
#include <reg51.h>
#include "lcd.h"
#include "temp.h"
#include "ds1302.h"
#include "at24c02.h"
#include "key.h"
/*******************************************************************************/
unsigned char address,_Caiyang,address_1;//温度数据保存初始地址;采样时间;按键操作地址值
unsigned int  reserve_time,Set_time=1200;
void _interrupt(void);//中断配置
void reserve_data(void);//保存数据
void anjian(void);      //按键操作

/*******************************************************************************
* 函数名         : void main(void)
* 函数功能                     : 主函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void main(void)
{
        _interrupt();
        LcdInit();                         //初始化LCD1602
        Ds1302Init();    //初始化DS1302
        LcdDisplay_temp(Ds18b20ReadTemp()); //1602显示温度初始值
        while(1)
        {
//                if(_Caiyang>=100)        //_Caiyang=100,则采样时间为5秒
//                {
                                LcdDisplay_temp(Ds18b20ReadTemp());//lcd实时显示当前温度值
//                          _Caiyang = 0;//重新计数
//                }
                Ds1302ReadTime();                  //读取时间
                LcdDisplay_1302();                       //lcd实时显示当前时间
                reserve_data();
                if(KeyScan()==4)
                                anjian();
         }
}
/*******************************************************************************
* 函数名         : void reserve_data(unsigned int reserve_time,unsigned int Set_time)
* 函数功能                     : 温度数据保存函数
* 输入           :无
* 输出                  : 无
*******************************************************************************/
void reserve_data(void)  //1分钟保存一次数据
{
        if(reserve_time>=Set_time)
        {
                At24c02Write_temp(address,Ds18b20ReadTemp());//
                reserve_time = 0;
                if(address==254)
                {
                        address = 0;
                }
                address += 2;
        }
}
/*******************************************************************************
*函数名         : void _interrupt(void)
*函数功能                    : 中断配置函数
*输入           : 无
*输出                 : 无
*******************************************************************************/
void _interrupt(void)
{
   TMOD=0x01;                    //定时器0工作方式1,16位计时器
   TH0=(65536-50000)/256;        //50毫秒中断一次
   TL0=(65536-50000)%256;   
   EA=1;                              //开总中断
   ET0=1;                                    //定时器0中断允许
         //EX0=1;                //外部中断INT0的中断允许
   TR0=1;                              //允许定时器0计数
         //IT0 = 0;               //低电平触发中断
}
/*******************************************************************************
*函数名         : void anjian(void)
*函数功能                    : 按键操作函数
*输入           : 无
*输出                 : 无
*******************************************************************************/
void anjian(void)
{
        while(1)
        {
                if(KeyScan()==1)
                {
                        if(address_1==254)
                        {
                                address_1=0;
                        }
                        address_1 = address_1+2;
                }
                if(KeyScan()==2)
                {
                        if(address_1==0)
                        {
                                address_1=254;
                        }
                        address_1 = address_1-2;
                       
                }
                if(KeyScan()==3)
                {
                        break;
                }
                LcdDisplay_temp(At24c02Reading_temp(address_1));//lcd显示当前地址中保存的温度数据
                //LcdDisplay_temp(At24c02Reading_temp(address_1));
                Ds1302ReadTime();                  //读取时间
                LcdDisplay_1302();                       //lcd实时显示当前时间
        }
}
/*******************************************************************************
*函数名         : void time0() interrupt 1
*函数功能                    : 定时器重装初始值
*输入           : 无
*输出                 : 无
*******************************************************************************/

void time0() interrupt 1
{
   TH0=(65536-50000)/256;        //高八位,装入初值
   TL0=(65536-50000)%256;   //低八位,装入初值
   _Caiyang++;              //每50毫秒_Caiyang加1,最多加到255
         reserve_time++;           //每50毫秒reserve_time加1,最多加到65535
}
chenchaoting
2楼-- · 2020-01-24 09:11
看看晶振起振了没
chenhai
3楼-- · 2020-01-24 10:16
 精彩回答 2  元偷偷看……
chenchaoting
4楼-- · 2020-01-24 10:34
chenhai 发表于 2015-4-7 20:37
其他功能按键都好着,就是复位键有问题,愁死我了

你确定你的按钮没装反?用万用表试试是不是按下通,放开断
chenhai
5楼-- · 2020-01-24 11:34
chenchaoting 发表于 2015-4-7 20:39
你确定你的按钮没装反?用万用表试试是不是按下通,放开断

已经用万用表测过了,没有按下去时,9脚和vcc是不通的,按下去时才是通着的
黑夜之狼
6楼-- · 2020-01-24 13:48
chenhai 发表于 2015-4-7 20:10
这是完整的电路图,谢谢了

单纯看电路是没啥问题,会不会是元器件的问题

一周热门 更多>