1511|13

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

大佬救救我 [复制链接]

 

/***********************************************
***********************************************/
#include "reg52.h"
#include "lcd1602.h"
#include "delay.h"
#include "HCSR04.h"
#include "eeprom.h"
#include "key.h"
 
sbit beep = P3^7;    //蜂鸣器控制脚
 
bit flag_timer = 0;    //定时时间到标志位
bit flag_beep = 0;    //报警标志位
 
short Dis_up = 50;    //距离上限 默认50cm
 
void EEPROM_Read(void)          //读EEPROM中保存的数据
{
 Dis_up = byte_read(0x2000+1)*256+byte_read(0x2000+2);  //读取距离上限数据 
}
void EEPROM_Write(void)     //写数据进eepROM
{
 SectorErase(0x2000);     //擦除扇区
 byte_write(0x2000+0,12);      //存储标志位
 byte_write(0x2000+1,Dis_up/256);  //存数据  Dis_up不是八位的数据 可能会大于256 所以分为成高低八位存储
 byte_write(0x2000+2,Dis_up%256); //存数据
 
}
 
void EEPROM_Check(void)     //检测 是不是第一次使用芯片或者芯片是否正常
{
 if(byte_read(0x2000+0)!=12) 
 {  
  EEPROM_Write();     //写数据进EEPROM  
 }
 else
  EEPROM_Read();     //读数据从EEPROM
}
/************************************************************************
* 函数: void Timer0Init(void)
* 描述: 定时器1初始化函数
* 参数: none.
* 返回: none.
* 备注:定时2ms 12MHz
************************************************************************/  
void Timer1Init(void) //2毫秒@12MHz
{
 TMOD &= 0x0F;  //设置定时器模式
 TMOD |= 0x10;  //设置定时器模式
 TL1 = 0xCD;   //设置定时初值
 TH1 = 0xF8;   //设置定时初值
 TF1 = 0;   //清除TF1标志
 TR1 = 1;   //定时器1开始计时
 ET1 = 1;   //开始计数
 EA = 1;    //开总中断
}
 
void main(void)
{
 unsigned char var = 0;
 unsigned int Fdistance,Ldistance,Rdistance;
 EEPROM_Check();       //读取EEPROM
 Timer1Init();       //2毫秒@12MHz
 HCSR04_Init();
 Lcd1602_Init();         //LCD1602液晶初始化
 Lcd1602_String(0,0,"    F:          ");
 Lcd1602_String(0,1,"L:      R:      ");
 while(1)
 {
    if(flag_timer==1)      //600毫秒赋一次值 flag_timer是标志位
  { 
   flag_timer = 0;      //清除标志  等待下一次600ms
 
   if(HCSR04_Count(&Fdistance)==0)  //测距 将距离值传递给distance
   {
    Lcd1602_Write_Com(0x80+6);
    Lcd1602_Write_Data(Fdistance%1000/100+0x30);
    Lcd1602_Write_Data(Fdistance%1000%100/10+0x30); 
    Lcd1602_Write_Data(Fdistance%1000%100%10+0x30); 
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
   }
   else
   {
    Lcd1602_Write_Com(0x80+6);
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');  
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
 
   }
   if(HCSR04_Count1(&Ldistance)==0)  //测距 将距离值传递给distance
   {
    Lcd1602_Write_Com(0xc0+2);
    Lcd1602_Write_Data(Ldistance%1000/100+0x30);
    Lcd1602_Write_Data(Ldistance%1000%100/10+0x30); 
    Lcd1602_Write_Data(Ldistance%1000%100%10+0x30); 
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
   }
   else
   {
    Lcd1602_Write_Com(0xC0+2);
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');  
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
   }
   if(HCSR04_Count2(&Rdistance)==0)  //测距 将距离值传递给distance
   {
    Lcd1602_Write_Com(0xc0+10);
    Lcd1602_Write_Data(Rdistance%1000/100+0x30);
    Lcd1602_Write_Data(Rdistance%1000%100/10+0x30); 
    Lcd1602_Write_Data(Rdistance%1000%100%10+0x30); 
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
   }
   else
   {
    Lcd1602_Write_Com(0xC0+10);
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');
    Lcd1602_Write_Data('-');  
    Lcd1602_Write_Data('c');
    Lcd1602_Write_Data('m');
   }
  }
  KEY_Set();
  if(Fdistance<Dis_up||Ldistance<Dis_up||Rdistance<Dis_up) //当前距离小于上限  
  {
   var++;
   if(var>5)      //为了防止误差多次判断距离是否超限
   {
    var = 0;
    flag_beep = 1;    //开报警标志 执行报警程序在定时器中断 
   } 
  }
  else
  {
   var = 0;
   flag_beep = 0;     //关报警标志位 
  } 
 }
}
//定时器1中断服务函数
void tm1_isr() interrupt 3 using 1
{
 static unsigned int cnt=0,cnt1;         
  TF1 = 0;
 TL1 = 0x30;    //设置定时初值
 TH1 = 0xF8;    //设置定时初值
 
 if(cnt++ >= 300)     //2ms*300 =600ms
 {
  cnt = 0;
  flag_timer = 1;   //600ms到 赋值标志为1  600ms赋一次 600ms不是必须的  可以自己修改
  
 }
 if(cnt1++>=200)   //2ms*200 =400ms    
 {
  cnt1 = 0;
  if(flag_beep==1)  //报警标志位打开
   beep = ~ beep;  //蜂鸣器控制脚取反 400ms取反一次 产生滴滴滴 响声 而不是一直长鸣
  else 
   beep = 1;    //高电平关闭报警
 }
}

 

 

一直是这个错误,请问 怎么解决

此帖出自51单片机论坛

最新回复

还是要先巩固C基础再上马   详情 回复 发表于 2023-2-27 10:18
点赞 关注
 

回复
举报

2939

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 

missing function prototype 缺少delay.c这个文件的byte_read函数原型。

此帖出自51单片机论坛

点评

该怎么弄,就给一段代码,该如何接下来的操作,我刚学 是个小白  详情 回复 发表于 2023-2-18 22:27
 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 

你们delay.c没有帖出来呀?是不是学习别人的代码,是不是没有考完过来。

此帖出自51单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 
lugl4313820 发表于 2023-2-18 22:00 你们delay.c没有帖出来呀?是不是学习别人的代码,是不是没有考完过来。

对,就是别人的代码,我想做个超声波预测,请问该怎么建立工程,

此帖出自51单片机论坛

点评

你别急,看看keil如何新建工程,去学学郭天祥10天学会单片机的教程。  详情 回复 发表于 2023-2-19 07:05
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

5
 
tagetage 发表于 2023-2-18 22:00 missing function prototype 缺少delay.c这个文件的byte_read函数原型。

该怎么弄,就给一段代码,该如何接下来的操作,我刚学 是个小白

此帖出自51单片机论坛
 
 
 

回复

4771

帖子

12

TA的资源

版主

6
 

把编译器报错去百度下哟

tmp_8b92141407e95958f381a56f48eb634637e1cfee9db6185b.jpg (19.73 KB, 下载次数: 4)

tmp_8b92141407e95958f381a56f48eb634637e1cfee9db6185b.jpg
此帖出自51单片机论坛

点评

百度上搜不出来啊,大佬,救命  详情 回复 发表于 2023-2-18 23:09
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

7
 
吾妻思萌 发表于 2023-2-18 22:59 把编译器报错去百度下哟

百度上搜不出来啊,大佬,救命

此帖出自51单片机论坛
 
 
 

回复

6841

帖子

11

TA的资源

版主

8
 
必胜客 发表于 2023-2-18 22:26 对,就是别人的代码,我想做个超声波预测,请问该怎么建立工程,

你别急,看看keil如何新建工程,去学学郭天祥10天学会单片机的教程。

此帖出自51单片机论坛

点评

好的,谢谢  详情 回复 发表于 2023-2-19 13:27
 
 
 

回复

181

帖子

0

TA的资源

一粒金砂(高级)

9
 

代码都考过来了,不会建立工程?不太可能吧!代码能看懂吧。

此帖出自51单片机论坛

点评

真不会,新手小白,简单的新建工程还是会的 ,复杂的就不会了,就比如这个,是真的一点头绪没有  详情 回复 发表于 2023-2-19 13:26
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

10
 
shuangchafeng 发表于 2023-2-19 11:16 代码都考过来了,不会建立工程?不太可能吧!代码能看懂吧。

真不会,新手小白,简单的新建工程还是会的 ,复杂的就不会了,就比如这个,是真的一点头绪没有

此帖出自51单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

11
 
lugl4313820 发表于 2023-2-19 07:05 你别急,看看keil如何新建工程,去学学郭天祥10天学会单片机的教程。

好的,谢谢

此帖出自51单片机论坛
 
 
 

回复

4771

帖子

12

TA的资源

版主

12
 

调试还有一个方法 你先吧代码复制一份砍一半试试 通过分步多次调试看看程序编译到哪行就不行了,就能定位到啦~

此帖出自51单片机论坛
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(初级)

13
 

看一看

此帖出自51单片机论坛
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

14
 

还是要先巩固C基础再上马

此帖出自51单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表