电路简易设计图
需要学习:Keil3软件编程(C语言)、工程创建引入等操作
Proteus仿真工具的使用
STC89C52以及系列单片机的IO口(输入输出)使用、中断的使用
数码管动态刷新原理
设计结构:8位按键控制输P1口,用来表示病房请求
8个发光二极管表示病房指示灯
PO口作为数码管段选,数码管采用两个四位共阳极数码管,因为市面上没有类似的7SEG-MPX8的八位数码管(接上拉电阻)
P35-P37IO口通过38译码器控制位选控制,节省IO口
P32 外部中断,作为护士站响应按键
P30-P31分别作为护士站的警报灯、蜂鸣器
主程序

使用到队列来控制处理请求的先后状态
队列取自CSDN,原文地址(39条消息) C51 队列 方式 中断接收 查询发送_会飞行的小蜗牛的博客-CSDN博客 使用循环数组实现,非常简单明朗,很受用
详细代码不在此赘述,可加我Q 328319881 私发(主要是代码又臭又长哈哈)
碰到的问题:
(1)数码管不同位显示不同状态的问题
因为采用的是LED数码管,不同的状态显示一开始让我颇为头疼,也将程序运行的时许问题刻在我脑子里,直接说结论:
数码管的刷新原理:以极快的速度进行:1位开、1位关、2位开、2位关....速度快到人眼无法识别则为全显示,而我的目标是不同位的数码管显示不同的状态,这比较麻烦,举个例子,1号以1秒的频率闪烁, 2号长亮,如果我们给1号设置人眼可见的闪烁延时,则在处理1号延时(两秒)的时候,2号必然不会亮,我们不能在数码管内控制一个数码管按照一个任意频率显示的同时控制另一个数码管以另外一个频率显示,他们之间是互相影响的。通过和群友集思广益,最终处理的办法:将2号的显示延时延长(200ms),这段延长的时间就是1号的黑暗时间,而1号的显示延时为1ms作为2号的黑暗时间,这样即可实现1号闪烁,二号长亮。 总之是比较憨批的操作,自己难自己==
(2) 蜂鸣器(有源)鸣响问题 :涉及到单片机的拉电流问题
我们用的STC89C52一般不具备驱动能力,只能给出一个逻辑电位,拉电流比较小,咨询淘宝展示:
注意这个拉电流是没有上拉电阻的情况下,只有P0口没有上拉电阻,其他口单片机已经做好上拉电阻了,输出能达到20ma(大概,买来机子再测测)
但是依然不能稳定带动蜂鸣器,电流太小了,需要放大信号,这里我用的是NPN三极管
多次实验测出来这个蜂鸣器需要0.4A的电流,单片机电压5V,减去导通电压0.7,则R2电压大概为4V,三极管放大倍数为100,则基极的电流为0.004A,R2=UR2/I
计算得出R2=1K 结果正确:
(3)38译码器选择:
在网上找的第一个是74H138型号,拿来用的时候发现是低位选择,就是假设选择的是Y7,则Y1-Y6都是1,Y7为0,这样输出到数码管的段选肯定不行,本想着加一堆非门上去,后面又想了想这个办法已经蠢到我的认知的底线了,又去网上找了找,果然找到74H238可以做到反向输出,还是经验太匮乏
这里注意,我最初设置的数码管关闭时,给到译码器的数据为000,但这样输出的就是10000000,做不到关闭显示,最后直接把使能端接到单片机IO口控制,不推荐直接接,还是那句话,单片机的IO口不建议直接驱动,这里能不能驱动还得实践,仿真莫问题。
自己动手做能碰到很多繁杂的问题,不同于跟着教程,基础很不牢固,但自己碰到问题解决问题却更能令自身印象深刻,我比较爱忘事,姑且记一下这次实训设计,这样就不怕打几把游戏又都忘了,希望大家能够喜欢
浙公网安备 33010602011771号