找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7806|回复: 28
收起左侧

89C51单片机能否控制两个四位数码管

  [复制链接]
ID:279940 发表于 2018-3-12 19:05 | 显示全部楼层 |阅读模式
请教大家一个问题,最近做了两个单片机小玩意儿(硬件和程序都是网上购的哈),一个是单片机接DS18B20测温,通过四位数码管显示温度,功能大概如下:
1)通过四位数码管显示温度
2)设置报警温度值,超范围报警。接有蜂鸣器。
3)接有红外遥控,可通过遥控更改报警设置。

另外一个是超声波测距,接有SR04测距模块,同样通过四位数码管显示距离,超范围报警。

这两个实验本身都是单独的。都有自己的单片机芯片。
我的目的是,我想用同一个单片机89C51RC来控制这两大功能。
目前我将超声测距的外围电路已经接到测温的板子上,用测温的单片机,和修改后的测距程序,实现测距。当然这个程序不包括测温的 功能。

那么我的问题是,要修改程序同时实现测温和测距两个功能。初步看了一下原始程序,发现都用到定时和中断,也就是说TH1,TL1和TH0,TL0在两个原始程序中都用到。这样的话,我还能同时实现显示温度和距离(两个四位数码管分别显示),并超范围报警吗?

请各位大神帮忙看一下。这是不是属于多任务?定时器是否不够用?
谢谢大家啦!

评分

参与人数 1黑币 +2 收起 理由
ndyerbi + 2 很给力!

查看全部评分

回复

使用道具 举报

ID:195836 发表于 2018-3-14 01:00 | 显示全部楼层
首先,第一点,不建议用数码管,这种东西可以换成液晶屏来做,显示的内容更丰富,管脚也不会很多(甚至可以用串口来控制,那么还会减少占用的管脚)
然后,如果要用数码管的话,38译码器啊,地址锁存器啊什么用起来问题也不大吧(虽然你目前的成品不一定有??)
最重要的是,你的意思是执行两个功能,都占用了定时器是吧。这里可以考虑一个问题,你真的需要几乎全部的时间都用来测温度或者距离吗?应该不会吧。
一般12位的ds18b20的响应时间是750ms,精度是0.0625度,你完全可以降低分辨率同时提高响应速度,比如10位,大概180+ms就响应啦,分辨率0.25度也还好吧。然后相当于说检测一次温度大概耗时200ms
另外超声波测距一次的时间呢?比如我们测距范围是10m,那么时间大概是10*2/340不到100ms吧
那么我觉得可以这样,每500ms为一个工作周期,先测温度,更新相应的数码管,再测距离,再更新相应的数码管。或者先测量后统一更新数码管。这样一次周期的时间基本可以把握在500ms内。数码管每500ms跳一次,其实能够接受吧,再加快更新频率其实实际作用也不大。
嗯,或者就用12位的温度传感器,每1s更新一次,也没毛病。

这只是一种思路吧,当然还有很多别的方法

评分

参与人数 1黑币 +100 收起 理由
admin + 100 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:290752 发表于 2018-3-12 20:17 | 显示全部楼层
89C51有多种封装形式,一般有40脚和44脚,应该40脚的够用了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:258226 发表于 2018-3-12 21:36 | 显示全部楼层
如果你的定时器是用来延时的,两功能又要同时完成,可以设个全局变量t,定时器中断里给它加1,溢出了没关系从0再循环的。然后在每个你要执行程序部分前加if(t%num==0),num可决定你执行间隔的时间,0也可以换成小于num的任何正整数,一定程度上决定执行的先后次序。相当于用定时器设定了一个系统时钟或者心跳,大家按着系统时钟来执行程序,如果两次执行程序间隔够长,就可以插入另外的任务,注意保证在时间间隔内执行完,就可以实现有时序地执行你的多任务了。又或者说两个定时器都不可获缺,试试分时复用吧,比如测温用完重新配置一下给测距用,然后再互换。你看你数码管也是共用的,不好同时显示,也不需要同步吧,先测温,再测距没多大影响的。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-3-12 21:53 | 显示全部楼层
两个任务,够用!但取决于你巧妙编程。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:291034 发表于 2018-3-12 22:31 | 显示全部楼层
要看看你原来的电路空余的IO口有多少?一般情况下,IO口够用的话,你这两个应用都可以在一个IC上实现

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:237354 发表于 2018-3-12 23:58 | 显示全部楼层
当然可以,8个IO控制字段,8个IO控制数码管位

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:283686 发表于 2018-3-13 08:09 | 显示全部楼层
只要刷新时间允许 应该不是问题
回复

使用道具 举报

ID:291092 发表于 2018-3-13 08:46 | 显示全部楼层
可以的,用8个IO控制数码管段选,再用IO控制数码管位选就可以了,如果IO口不够,还可以用个译码器什么的
回复

使用道具 举报

ID:212149 发表于 2018-3-13 10:33 | 显示全部楼层
一般来说一个ds18b20的测温程序使用3位数码管(显示的温度带一位小数,小数点位于第二位数码管上),超声波测距我记得没错的话极限距离是4m左右,使用三位数码管表示单位是cm,一共使用了6位数码管。一个八位数码管的动态显示只需要16个io口,超声波占用两个io,ds18b20占用一个io,基本上io是够用的。然而定时器不需要占用两个吧,根据楼主的描述只需要在超声波测距中占用一个定时器用于测量超声波返回的高电平时间,在测温度的程序中应该是不需要用到定时器的。外部中断的使用就看楼主的程序是如何设计的了。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:279940 发表于 2018-3-13 10:49 | 显示全部楼层
各位,IO口够用,分别编两个程序,分别控制,没有问题。
问题就是把两个程序合并起来,同时控制,编程时发现原来每个程序都要用到TH0, TL0和TH1, TL1.
所以,需要考虑这个情况下怎么编程了。还需要多学习。
谢谢大家。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:279940 发表于 2018-3-13 10:51 | 显示全部楼层
zl2168 发表于 2018-3-12 21:53
两个任务,够用!但取决于你巧妙编程。

对的,就是两个任务。怎么巧妙编程就是个问题了。谢谢指点。如果能稍微指点下编程方向,就更感激了。谢谢版主!
回复

使用道具 举报

ID:279940 发表于 2018-3-13 10:52 | 显示全部楼层
安心1x2 发表于 2018-3-12 21:36
如果你的定时器是用来延时的,两功能又要同时完成,可以设个全局变量t,定时器中断里给它加1,溢出了没关系 ...

谢谢亲,你的回复具有很大的参考意义。我先消化下,有问题再请教。
回复

使用道具 举报

ID:279940 发表于 2018-3-13 11:16 | 显示全部楼层
xrfxrfxrf008 发表于 2018-3-13 08:09
只要刷新时间允许 应该不是问题

请教一下,刷新时间怎么设置呢,谢谢!
回复

使用道具 举报

ID:279940 发表于 2018-3-13 11:21 | 显示全部楼层
安心1x2 发表于 2018-3-12 21:36
如果你的定时器是用来延时的,两功能又要同时完成,可以设个全局变量t,定时器中断里给它加1,溢出了没关系 ...

我是两个数码管,分别给测温和测距的。可以同时显示吗?~
回复

使用道具 举报

ID:279940 发表于 2018-3-13 12:50 | 显示全部楼层
QWER01234 发表于 2018-3-13 10:33
一般来说一个ds18b20的测温程序使用3位数码管(显示的温度带一位小数,小数点位于第二位数码管上),超声波 ...

多谢回复。
程序的东西我要多看多学习。兄弟明确给出了定时器最少用量,让我也多少有了信心。
我要尝试自己写下程序,看看能不能用其他方式实现延时或者中断。

谢谢啦!
回复

使用道具 举报

ID:291258 发表于 2018-3-13 14:08 | 显示全部楼层
可疑的,看你怎么写程序了
回复

使用道具 举报

ID:291372 发表于 2018-3-13 16:56 | 显示全部楼层
可以,没问题的
回复

使用道具 举报

ID:291401 发表于 2018-3-13 17:31 | 显示全部楼层
可以的,认真 就可以了的
回复

使用道具 举报

ID:291411 发表于 2018-3-13 22:15 来自手机 | 显示全部楼层
可以用两个锁存器控制数码管可以节省IO口的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:291422 发表于 2018-3-13 23:17 | 显示全部楼层
绝对够用了,根据设计的电路来进行编程
回复

使用道具 举报

ID:275484 发表于 2018-3-14 00:35 | 显示全部楼层
可以控制,P0口IO口作为并行数据  把两个四位数码管 A B C D E F G H 并联一起,再把两个四位数码管位选信号线共8根给P1口 1 2 3 4 5 6 7 8 。就这样连接。软件方面能节省定时器的就节省。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:158375 发表于 2018-3-14 11:01 | 显示全部楼层
这点功能,完全可以
回复

使用道具 举报

ID:291712 发表于 2018-3-14 11:13 | 显示全部楼层
可以啊,你可以把红外的那个用外部中断啊,其他的就做成那种定时扫描,stc的51可以跑30多兆的
回复

使用道具 举报

ID:289247 发表于 2018-3-14 11:26 | 显示全部楼层
可以,现在的单片机一般都有两个以上的定时器
回复

使用道具 举报

ID:279940 发表于 2018-3-14 12:42 | 显示全部楼层
奎尔塞拉 发表于 2018-3-14 01:00
首先,第一点,不建议用数码管,这种东西可以换成液晶屏来做,显示的内容更丰富,管脚也不会很多(甚至可以 ...

谢谢你的建议,你给出了很明确的方向,虽然我还不是很明白 :)
因为有很多细节还没有接触到,没有学习过。我会去学习这个工作周期的设置,然后看看有没有方向。

我目前的水平还特别低,是这样的,年初开始我在某宝买一些套件,比如红绿灯、温度控制、电子琴,广告屏、测距等散件,自己焊接,单片机程序卖家都已经写入了。我焊接成功之后,只是尝试简单的去修改一下程序。之前照着《手把手教你学单片机》配合学习板,学过前半部分,后面的还没有学习。

这个设计其实是自己给自己的任务,就是将网上买的温控和测距两套东西合并到一起去,也是想通过这个过程看看能不能接触到新的东西,没想到困难真的还很多哈。因为买的时候就是用的数码管,所以,一些硬件部分暂时不改了,就照着数码管用吧。

程序方面和原理方面,我要学的东西还很多。太感谢回复了!!
回复

使用道具 举报

ID:245053 发表于 2018-3-14 13:43 | 显示全部楼层
加上HC164或HC594之类的IC,可以实现多个LED显示的。。。
回复

使用道具 举报

ID:291778 发表于 2018-3-14 14:00 | 显示全部楼层
串行可以的
回复

使用道具 举报

ID:291802 发表于 2018-3-14 14:40 来自手机 | 显示全部楼层
完全可以用,状态机编程没有问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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