从图上可以看出,你p2.7是高电平,你这样怎么能点亮二极管呢?应该是p2.7是低电平才对. 好好再想一想,重敲一下代码! |
wtm_lxy 发表于 2019-3-15 08:47 1.《每计数500(延时多少?)就显示一个数字 》由于显示程序被主程序调用,主循环周期基本固定,所以每计数500延时多少不确定,这只是看你的程序做的估计,实际调试时以数码管不闪烁为准。一般在500us~2ms之间为宜。 2.逻辑与:&&,逻辑或:||,按位与:&、按位或:|。 P2&=0xf0; //P2=P2&0xf0; xxxx 0000 P2|=0xf7; //P2=P2|0xf7; xxxx 0111 |
wulin 发表于 2019-3-14 17:12 非常感谢您的回复。 意思大概看懂了。 每计数500(延时多少?)就显示一个数字 4个数字显示完后,再循环。 顺便请教一下: P2&=0xf0; //P2=P2&0xf0; 逻辑与,高4位不变,低4位清零 P2|=0xf7; //P2=P2|0xf7; 逻辑或,相加,高4为置1,第4位为7 后面这句还是用逻辑与吧?保持高四位不变,只修改低4位的值 |
zhb2004xp 发表于 2019-3-14 16:23 1、不好意思,这个冲突应该是没有的了。我修改了单片机中的程序引用目录,忘记更新对应关系了,所以修改了程序实际上没有生效。 2、定时器我试试看,还需要更努力的学习。 非常感谢您的回复。 |
/******************显示采集的电压**********************************/ //不影响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; } } } |
本帖最后由 wtm_lxy 于 2019-3-14 15:44 编辑 wc86110 发表于 2019-3-14 11:04 我把位选改成这样了:L1=0;L2=1;L3=1;L4=1; //P2=0xf7; 但是D2还是 不常亮,不知道为什么? |
程序上 P2 端口设置与 LED2 有冲突,位显用 4 个就行 |