0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用51单片机来测试成分的含铁量

j4AI_wujianying 来源:未知 作者:胡薇 2018-04-20 11:17 次阅读

仪器的原理是借助电磁感应,为线圈通电,不同含铁量的成分会使线圈产生不同频率的震荡,由此来测试成分的含铁量。我做的部分也非常简单,使用51单片机操作12864做显示,矩阵键盘控制系统的行为,1302存储时间,可有可无,24c02用来存储预设参数,用于方便计算,仅此而已。

接到任务后,准备一晚上把它弄完。这也是上大学以来首次通宵做东西(其实后半夜基本都在发呆),第一天晚上进展还算比较快,每个基本模块的基本操作都能进行了。然后就可以回家轻松过五一啦。其实艰巨的任务还在后面。碰到的第一个问题就做一个什么样的操作界面比较靠谱。由于没有gui支持,做什么玩意全都需要自己安排。原仪器用的是数码管,自然参考价值不大。起初就试着按照操作步骤来编排界面。时钟显示->设置参数1->设置参数2->......->测量结果->返回重测整个过程是一个线性的设置过程,逐一检查每一个参数,然后进行测量。后来我发现既然要选择参数进行设置,我们应该把参数选择放入一个并排选择的环境中,即参数选择界面->1,...2... ... ->回参数选择界面。这样就可以方便地设置参数,修改需要修改的部分。

当时想也没想就这么写了,而且写了一个超级长的大循环,里面嵌套了无数小循环,直接导致的后果就是冗长的程序搞乱了自己的思维,测试过程中发现键盘扫描出了问题,时常有检测不到按键的现象。而回头看看自己写的程序,实现类似的键盘检测却运用了各种不同的方法,还都写在同一个函数中,就算不出错,自己也不想再看。真有种绝望的感觉,后来又将这段代码全部删除了,这是个教训。*在实现类似功能的时候,最好是用同样的方法,这种方法要经过仔细的推敲和实验,可以不是最简单的,但必须是最可靠的办法。比如在这个程序中,每次显示之后然后判断按键值,从而进入下一个步骤。可见,每个步骤的切换都是相类似的,当然,我们可以用很多方式来实现这个功能,开始的做法就是想起来怎么做就怎么做,写得多了自己也不明白了。
我们可以
遵循这样的模式:

key = KEY_NULL;

while(key == KEY_NULL)

{

key = keyscan();

switch(key)

{

... ...

}

}

这段代码用于检测按键相对比较清晰,可靠性高,可以作为通用模板。

写完了按键的控制,下一个比较让人纠结的就是12864的显示问题。使用有字库的12864本来应该是方便一些,但是被我奇葩地搞得一塌糊涂。开始写了一个在12864上打印字符的函数,然后再上面循环打印出要显示的数字。程序复杂也就算啦,关键是打印效果很让人郁闷,我们知道12864带字库的是16*16为一大格,这样一个字节写下去,一个数字就占据1个方格,光标还乱飞。纠结一段时间知道,受到打印字符串的启发,将数字转换成ascii放到数组中,数组尾巴上加'\0',然后当做字符串显示,就ok了。

然后就是最令人抓狂的问题,EEPROM读取出错。24c02是iic器件,51模拟iic时序是我以前从网上荡的,测试单个写入读取正常。但是写入一个数组,读出来的却是隔一格有,隔一格乱码。网上没见过这种问题。有问题,放一放吧。五一长假,人生中第一次约女生,然后...,不知道还有没有然后了......玩了5天,回到学校,找高手们研究研究。于是大家集思广益,各种办法找问题,最后我们发现如果人为写入一个数字,也是第一个正确,接下来的一个错误,然后又正确。我估计是延时的问题,两次写入之间加延时,正常存取。可见,找不出问题的时候,和大家讨论一下是非常有益的。主要是选择不同的测试方法,一步一步排查是显示的问题?转换的问题?eeprom读出的问题?eeprom写入的问题?开始一直怀疑是读取方式的问题,也就没考虑是写的问题。同时也需要注意,延时函数的意义,尤其是对于这种有严格时序要求的总线协议。弄清每个延时的意义是有必要的。

搞完这些后,我发现keil2中最让人蛋疼的问题来了,莫名其妙的不产生hex文件,一大堆warming以前见过(uncalled segment ),也不知道怎么就好了,这次做个了断吧。仔细看过这些警告,全都是大写但是可以看出是针对有些函数的,查看发现全都是没有使用的函数,我们将这些没有使用的函数与变量全部注释掉,warming减少到一定程度,自然就可以了,貌似编译器不知道什么函数被调用,而是将其都编译,生成obj。也就是说我们平时要养成好习惯,不调用的函数和全局变量及时注释掉。否则就和我一样,程序没多大,内存却很容易就溢出,以至于无法定义变量和基本计算出错。为了减少这种内存的浪费,我们必须牺牲一部分可读性,将函数拆开直接写到用的地方,尽量使函数并排而不是嵌套。

开始为了函数易读写了这么个奇葩的结构:

void test_fun()

{

//char key;

T0T1_init();

ascii_init();

disp_welcome();

initial_ds1302();

disp_clock();

while(1)

{

select_change(POINT_POSITION);

disp_bas(POINT_POSITION);

test_process(POINT_POSITION);

}

}

这个结构直接放到main函数中,其实这样做,系统需要为里面的嵌套浪费许多内存来保存环境,所以内存很快就被吃光了。将这个结构拆解,直接装入main函数,这样定义变量就可以啦。目前数组还原数字方面计算总是出错,原因还不明确。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 51单片机
    +关注

    关注

    269

    文章

    5647

    浏览量

    120600
  • 电磁感应
    +关注

    关注

    17

    文章

    580

    浏览量

    57453

原文标题:单片机菜鸟的项目之路

文章出处:【微信号:wujianying_danpianji,微信公众号:单片机精讲吴鉴鹰】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    最全51单片机学习课件(程序)从基础学起

    最全51单片机学习课件(程序)从基础学起{:4_102:}
    发表于 02-07 15:06

    分享一个51的书,及单片机多功能调试助手,部分章节代...

    本帖最后由 rejoice818 于 2014-2-25 21:56 编辑 分享一个51的书,及调试利器单片机多功能调试助手,本人感觉很好用。部分章节代码。8051单片机C语言
    发表于 02-25 21:49

    51单片机怎么和器件无线通信

    来学着玩。所以希望打算大神们指点一下。51这部分没问题,问题是我不知道,这个震动装置什么器件做,然后单片机和这个装置怎么通信,什么器件
    发表于 11-13 22:38

    51单片机学习基础例子原理图和仿真代码

    51单片机学习基础例子原理图和仿真代码
    发表于 10-29 23:02

    51单片机可以做什么?

    占有一席之地其他各个方面,其实作为最早大量使用的单片机之一,51单片机在各行各业都没有退出历史舞台,仍然在发挥作用。51单片机仅有一个累加器
    发表于 02-22 11:06

    51单片机做的mp3播放器正弦测试成功但不可以播放音乐

    各位高手们,毕业设计我在用51单片机做的mp3播放器 正弦测试成功,但不能播放SD卡内的音乐,有制作经验的请帮我解决下问题啊有谁有正常的完整C程序呢本人QQ 987741864,急切等待帮助。。
    发表于 02-28 06:35

    请问怎么51单片机设置8266模块的模式?

    本人正在做一个项目,使用51单片机,需要使用8266模块连接上我们自己建的服务器,求大神来一个关于51单片机的程序,就是怎么
    发表于 07-29 04:35

    能否51单片机驱动彩屏

    手头上有不旧的山寨手机,能拆的地方都拆了,丢掉又可惜,还剩下个触摸彩屏,44个引脚的。弱弱地问问各位,能否51单片机驱动这个彩屏。这个彩屏是否和网上卖的有区别吗???还有这个手机彩
    发表于 07-17 08:09

    51单片机的串口波特率测试提问

    前几天因为项目需要,需要用到串口,但实验室只有51单片机,于是就用51单片机测试
    发表于 09-24 19:22

    单片机UART串口通信(代码亲自调试成功) 相关资料推荐

    单片机UART串口通信单片机的串口通信,一般指的就是UART串口通信(TXD,RXD)。本文实现的是单片机和电脑之间的串口通信,需要用到51单片机
    发表于 07-06 07:00

    怎么实现基于51单片机多路抢答器倒计时开源?

    怎么实现基于51单片机多路抢答器倒计时开源?
    发表于 10-15 08:01

    51单片机和STM32

    最近做了几个项目都用到了PIC单片机,在这几个项目之前我只用到了51单片机和STM32做控制类的项目,PIC
    发表于 11-22 06:57

    如何增加51单片机的计算

    如何增加51单片机的计算
    发表于 11-06 08:02

    51测试单片机入门教程教程

    51测试单片机入门教程教程
    发表于 09-22 14:11 13次下载
    <b class='flag-5'>51</b><b class='flag-5'>测试</b>网<b class='flag-5'>单片机</b>入门教程教程

    关于一个简单单片机项目的一些想法

    仪器的原理是借助电磁感应,为线圈通电,不同含铁量的成分会使线圈产生不同频率的震荡,由此来测试成分的含铁量。我做的部分也非常简单,使用51单片机操作12864做显示,矩阵键盘
    发表于 11-14 14:35 840次阅读