标题: 51单片机不同组IO口段选仿真问题 [打印本页]
作者: wangxindir 时间: 2019-10-31 11:21
标题: 51单片机不同组IO口段选仿真问题
用Proteus 做51单片机仿真,不同组IO口做段选,如果把dx7=P1^6的话,仿真出来完全没问题,数码管正常扫描显示,如果把dx7=P2^6的话,仿真出来的数码管显示就缺少DX7这一段,我用仿真中的示波器观察波形是一样的,请朋友帮忙看看问题出在哪?程序如下:
sbit dx1=P1^0;
sbit dx2=P1^1;
sbit dx3=P1^2;
sbit dx4=P1^3;
sbit dx5=P1^4;
sbit dx6=P1^5;
sbit dx7=P2^6;
void setseg(a)
{
dx1=a&0x01;a>>=1;
dx2=a&0x01;a>>=1;
dx3=a&0x01;a>>=1;
dx4=a&0x01;a>>=1;
dx5=a&0x01;a>>=1;
dx6=a&0x01;a>>=1;
dx7=a&0x01;
}
定时器中断中:
switch (i)
case 0: setseg(ledbuff[0]);wx1=0;wx2=1;wx3=1,wx4=1;wx5=1;i++;break;
case 1: setseg(ledbuff[1]);wx1=1;wx2=0;wx3=1,wx4=1;wx5=1;i++;break;
case 2: setseg(ledbuff[2)]wx1=1;wx2=1;wx3=0,wx4=1;wx5=1;i++;break;
case 3: setseg(ledbuff[3]);wx1=1;wx2=1;wx3=1,wx4=0;wx5=1;i++;break;
case 4: setseg(ledbuff[4]);wx1=1;wx2=1;wx3=1,wx4=1;wx5=0;i=0;break;
default:break ;
-
无标题1.png
(145.66 KB, 下载次数: 114)
作者: wulin 时间: 2019-10-31 11:21
楼主不必纠结这个问题,仿真毕竟与实物测试是有很大区别的,这种端口组合的程序用于数码管静态显示仿真没有问题,用于动态显示发生这种现象是仿真软件的不适应造成的,不是编程问题。楼主可以用一个成熟的呼吸灯程序仿真试试,根本就玩不起来。
作者: wangxindir 时间: 2019-10-31 11:51
引脚连上后是这样的。
-
无标题2.png
(154.28 KB, 下载次数: 103)
作者: csmyldl 时间: 2019-11-1 01:00
示波器BCD通道接在一块而显示出来的波形却不一样?也许与你电脑运行的速度有关,不妨所所有程序全部贴出来分析一下,理论上不会有此现象发生
作者: xianfajushi 时间: 2019-11-1 08:36
看电路图似乎P2.6连接到不同的地方(位和段都有连接)引起的,
作者: xianfajushi 时间: 2019-11-1 08:42
噢噢,起先看错了连接线,为何要用不同组去控制段?你确保这样输出的电平跟用同组的电平是一样的变化?
作者: lkmtdkjplg 时间: 2019-11-1 10:44
最好弄一个电路板试试
作者: wangxindir 时间: 2019-11-10 16:32
非常感谢大家的解答,的确是仿真错误,实际打板验证了,程序是没问题的,可以正常显示,谢谢大家!
作者: huangxulihua55 时间: 2021-2-9 13:49
楼主可以把全部代码发出了学习下吗?正好也用段码在不同的IO口,程序中 wx是什么?
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |