项目要求:
根据8421码高电位与低电位(前几个项目有详细说),利用网络标号(快捷键按A,然后改为net= P0^#,之前也有说到。)两个共阳数码管,第一个数码管连接P0接口,第二个连接P1.
两个按键控制,一个控制加,一个控制减。
仿真图如图所示:
图1
根据要求写程序,
程序如下:
#include<reg51.h>
sbit K_ADD = P2^0;
sbit K_SUB = P2^1;
unsigned char senven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int i = 30;//初始值
void delay(unsigned int x)
{
while(x--);
}
void main(void)
{
while(1)
{
P2 = 0xef;
if(P2 == 0xee)
{
delay(500);
if(P2 == 0xee)i++;if(i>=60)i=60;
while(P2 == 0xee);
}
P2 = 0xef;
if(P2 == 0xed)
{
delay(500);
if(P2 == 0xed)i--;if(i<=0)i=0;
while(P2 == 0xed);
}
P0 = senven_seg[i / 10 %10];delay(1000);
P1 = senven_seg[i % 10];delay(1000);
}
}
解释:
当没按下时,
根据8421码与低电位高电位,
没按下时为P2.4为低电位,为0XEF;
第一个按键按下时, P2.0与P2.4为低电位,为0XEE;(这就是代码里P2 = 0XEE,表示第一个按键按下)
同理, 第二个按键按下,如图,P2.1与P2.4为低电位,为0XED;
最后数字取余取整得到个位和十位,即可实现按键加减。
最后得出结果:
初始状态
按下第一个键加1,按第二个键减1;直到加到60,再次按加,不再变化
感谢观看!!!