微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 小白请大神帮忙看看这个小代码(C51,功能为分别按下Key1或key2显示2或3)

小白请大神帮忙看看这个小代码(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);
   }
}

你程序我看的有点慌啊,我先说一个最基本的错误吧。
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的书,有比较基本的按键扫描函数,先学学。

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

网站地图

Top