专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
51的复位按键不起作用,按下后程序无法重新执行,求指点
2020-01-20 19:06
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
11426
43
43
复位键的电路图如图所示
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
43条回答
chenhai
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
}
加载中...
查看其它43个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
程序有点多,我就贴个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
}
一周热门 更多>