微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 看别的单片机秒表程序有一句看不懂

看别的单片机秒表程序有一句看不懂

时间:10-02 整理:3721RD 点击:
display()
{

disp_buf[0]=count/10; //取出计数值的十位
disp_buf[1]=count%10; //取出计数值的个位
P0=seg_data[disp_buf[1]]; //显示个位
P2=0x7f; //开个位显示(开第8只数码管)
Delay_ms(5); //延时5ms
P0=seg_data[disp_buf[0]]; //显示十位
P2=0xbf; //开十位显示(开第7只数码管)
Delay_ms(5); //延时5ms
P2=0xff; //关闭显示
}
这个程序中
P0=seg_data[disp_buf[1]]; //显示个位
P2=0x7f

P0=seg_data[disp_buf[0]]; //显示十位
P2=0xbf
是什么意思,我想的是已经让P0现实了个位十位数为什么还要P2=0x7f; //开个位显示(开第8只数码管) 和P2=0xbf; //开十位显示(开第7只数码管) (我是初学者我想明白这个我希望知道的人告诉哈,我真的很很想弄明白(急急急!))

P2端口的第7位和第6位分别控制着个位和十位两只数码管的显示。只有当相应位为0数码管才显示,如果为1的话,则数码管没有显示(关闭)

你的数码管应该是动态扫描显示的,P0输出段和小数点显示数据,P2输出位选择数据,输出为0时,对应的位显示,为1时对应的位不显示;P2的bit7对应各位、bit6对应十位......;

P2=0x7f;
P2=0xbf;
写成
P2=01111111b;
P2=10111111b;
这样就比较容易看明白了。

这很好理解,P0是实现了个位和十位的显示,但你总得把个位和十位对应到相应的数码管上去吧,P2就是这个效果,选择哪个数码管显示个位,哪个数码管显示十位。

应该是先把数据分别给到P0口然后通过驱动芯片分别开个位和十位的显示,因为数码管每次只能显示一位通循环显示才能看到整个个位十位。你可以看看他的显示原理

这个是动态扫描的程序,你送出去一个数据,你选个位就显示在个位,你选十位就显示在十位

谢谢您!我也明白你的意思了,但是为什么能把P0端口的数据送到P2端口控制的数码管上去显示呢,想问的是P0端口的数据怎么传到P2端口的,然后通过P2控制的显示器显示出来呢?(我是刚学的单片机,谢谢您帮我回答,谢谢!)

其实程序不难,数码管的动态扫描显示,P0输出的是要显示数字的数据,而P2输出的数据则是用来控制这个要显示的数字在哪个数码管中显示,小编不懂应该是对四位数码管的显示原理不熟悉,建议小编查查四位数码管的原理图

这个必须联系电路图,你一看电路图就明白了,建议你了解一下什么是数码管的位选和段选。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top