小白请大神帮忙看看这个小代码(C51,功能为分别按下Key1或key2显示2或3)
时间:10-02
整理:3721RD
点击:
请哪位大神看下我写的这段代码,功能需求是有两个按键,分别按下Key1或key2显示2、3,不按时显示1.
目前下载到STC单片机后,上电会显示“1”,过会就变为“8”了(共阴极管);
个人仔细的检查实在发现不了问题出在哪,特来求助下,感谢!
#include <reg51.h>
#define uchar unsigned char
/**Define Nixie tube code and count**/
uchar discode[3]={0x06,0x5b,0x4f};
/**define delayms 50ms**/
void delayms (unsigned char ms)
{
uchar i;
while(ms--)
{
for(i=0;i<100;i++);
}
}
/**ocscan**/
uchar ocscan(void)
{
uchar i;
if(P3&0x00==0x00) i=1;
if(P3&0x01==0x01) i=2;
if(P3&0x02==0x02) i=3;
return(i);
}
/**main function**/
void main(void)
{
P3=0x00;
while(1)
{
uchar i;
i=ocscan();
P0=discode[i];
P1=0x00;/**open display**/
delayms(20);
}
}
目前下载到STC单片机后,上电会显示“1”,过会就变为“8”了(共阴极管);
个人仔细的检查实在发现不了问题出在哪,特来求助下,感谢!
#include <reg51.h>
#define uchar unsigned char
/**Define Nixie tube code and count**/
uchar discode[3]={0x06,0x5b,0x4f};
/**define delayms 50ms**/
void delayms (unsigned char ms)
{
uchar i;
while(ms--)
{
for(i=0;i<100;i++);
}
}
/**ocscan**/
uchar ocscan(void)
{
uchar i;
if(P3&0x00==0x00) i=1;
if(P3&0x01==0x01) i=2;
if(P3&0x02==0x02) i=3;
return(i);
}
/**main function**/
void main(void)
{
P3=0x00;
while(1)
{
uchar i;
i=ocscan();
P0=discode[i];
P1=0x00;/**open display**/
delayms(20);
}
}
你程序我看的有点慌啊,我先说一个最基本的错误吧。
uchar discode[3]={0x06,0x5b,0x4f}; i的取值是0、1、2,你程序取到3了,溢出了!
确实是的,已更改,看下其他问题呗,看还慌不慌
if(P3&0x00==0x00) i=0;
if(P3&0x01==0x01) i=1;
if(P3&0x02==0x02) i=2;
你的按键扫描函数不太好,你看看51的书,有比较基本的按键扫描函数,先学学。