用P1的8个LED显示0x00~0xff #include<reg51.h> #define uchar unsigned char sbit key=P3^3; void delayms(uchar ms) { uchar i; while(ms--) for(i=0;i<123;i++); } bit key_scan(void) { static bit kp=0; if((P3&0x0f)!=0x0f) { delayms(10); if(((P3&0x0f)!=0x0f)&&(kp==0)) { kp=1; return 1; } } else kp=0; return 0; } void main(void) { uchar num=0; P1=0x00; while(1) { if(key_scan()) num++; P1=num;//0x00~0xff } } |
f556 发表于 2020-5-8 01:17 点亮一个LED是做过的。 就是这一题根据师傅的讲解,是要根据P3.3的中断特性来判断开关拨动的次数,然后开关拨动一个来回,LED灯根据16进制加一(16进制比较困难也可以用2进制)。我主要不懂的地方时,这个判断拨动次数的程序怎样写 |
这是学校考试题吧,, seg[]数组下标值的范围是0~14,你把36行的if(++num==16)改成if(++num==15) 就运行正常了。还有个办法是在seg[]数组里在首数据的位置再添个0x00也行. 最好的办法是把uchar code seg[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; 改为 uchar code seg[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; |
这是学校考试题吧,, seg[]数组下标值的范围是0~14,你把36行的if(++num==16)改成if(++num==15) 就运行正常了。还有个办法是在seg[]数组里在首数据的位置再添个0x00也行 |
指点一下?一下在哪里?是MCU不懂?还是74LS345不懂?还是C的每个语句都不懂?还是某句不懂?点亮一个LED做过吗? |