找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请教:单片机数码管位选问题和3秒后执行判断的问题

查看数: 3263 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-3-14 09:59

正文摘要:

我做一个根据液体压力值进行电机相应的实验。 当压力小于8MPa时电机启动,启动3秒后压力没有上升就报警。 当压力大于12MPa时电机停止。 暂时用一个指示灯来模拟电机。用可调电阻模拟压力输入。 程序如下: #i ...

回复

ID:491172 发表于 2019-3-15 10:28
从图上可以看出,你p2.7是高电平,你这样怎么能点亮二极管呢?应该是p2.7是低电平才对.
好好再想一想,重敲一下代码!
ID:213173 发表于 2019-3-15 09:48
wtm_lxy 发表于 2019-3-15 08:47
非常感谢您的回复。
意思大概看懂了。
每计数500(延时多少?)就显示一个数字

1.《每计数500(延时多少?)就显示一个数字 》由于显示程序被主程序调用,主循环周期基本固定,所以每计数500延时多少不确定,这只是看你的程序做的估计,实际调试时以数码管不闪烁为准。一般在500us~2ms之间为宜。
2.逻辑与:&&,逻辑或:||,按位与:&、按位或:|。
P2&=0xf0;   //P2=P2&0xf0;   xxxx 0000
P2|=0xf7;    //P2=P2|0xf7;   xxxx 0111
ID:487930 发表于 2019-3-15 08:47
wulin 发表于 2019-3-14 17:12
/******************显示采集的电压**********************************/
//不影响P2高4位状态的写法
voi ...

非常感谢您的回复。
意思大概看懂了。
每计数500(延时多少?)就显示一个数字
4个数字显示完后,再循环。

顺便请教一下:
P2&=0xf0;   //P2=P2&0xf0;   逻辑与,高4位不变,低4位清零
P2|=0xf7;    //P2=P2|0xf7;   逻辑或,相加,高4为置1,第4位为7
后面这句还是用逻辑与吧?保持高四位不变,只修改低4位的值
ID:487930 发表于 2019-3-15 08:23
zhb2004xp 发表于 2019-3-14 16:23
1、你设置了两个LED,分别是P17和P27,冲突时自己造成的,和数码管的位选没有关系,因为你的位选是单独设置 ...

1、不好意思,这个冲突应该是没有的了。我修改了单片机中的程序引用目录,忘记更新对应关系了,所以修改了程序实际上没有生效。
2、定时器我试试看,还需要更努力的学习。

非常感谢您的回复。
ID:213173 发表于 2019-3-14 17:12
/******************显示采集的电压**********************************/
//不影响P2高4位状态的写法
void Display_Result(uint d)
{
        static uint count=0;
        static uchar i=0;
        if(++count>=500)//不影响其他程序运行的计数延时
        {
                count=0;
                P0=0x00;//消隐
                switch(i)
                {
                        case 0: P2&=0xf0;P2|=0xf7;P0=DSY_CODE[d%10];i++; break;
                        case 1: P2&=0xf0;P2|=0xfb;P0=DSY_CODE[d%100/10];i++; break;
                        case 2: P2&=0xf0;P2|=0xfd;P0=DSY_CODE[d%1000/100]|0x80;i++; break;
                        case 3: P2&=0xf0;P2|=0xfe;P0=DSY_CODE[d/1000];i=0; break;
                }
        }
}
ID:234075 发表于 2019-3-14 16:23
1、你设置了两个LED,分别是P17和P27,冲突时自己造成的,和数码管的位选没有关系,因为你的位选是单独设置的L1\L2\L3\L4而不是直接对P2的操作,所以P2的其他几个IO口是可以正常使用的;
2、使用定时器中断是最好的选择,主函数中设置定时器中断(暂不启动)--循环检测到压力小于8MPa时电机启动,同时启动定时器开始计时--计时达到3秒且压力没有上升,则报警并停止中断(累加计时变量清零)
。这样的程序最好自己先画一个流程图,然后按照流程图进行程序的设计。

评分

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

查看全部评分

ID:487930 发表于 2019-3-14 12:14
本帖最后由 wtm_lxy 于 2019-3-14 15:44 编辑
wc86110 发表于 2019-3-14 11:04
程序上 P2 端口设置与 LED2 有冲突,位显用 4 个就行

我把位选改成这样了:L1=0;L2=1;L3=1;L4=1;   //P2=0xf7;  
但是D2还是 不常亮,不知道为什么?
ID:96682 发表于 2019-3-14 11:04
程序上 P2 端口设置与 LED2 有冲突,位显用 4 个就行

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

Powered by 单片机教程网

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