proteus 仿真单片机

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:39:43
#include<reg51.h>
sbit LED=P2^7;
void main()
{while(1)
{
if (P1^0==0) LED=1;
if (P1^0==1) LED=0;

}
}
程序很简单,就是把开关设在P1^0,之后控制P2^2的电平,为何总是闪烁啊,到底是程序有问题,还是proteus有问题啊?
学无止境,用了你的程序,仿真还是不行;再说了,我的程序到底怎么错了哪?

//你的程序有问题,看看下面的我给你写的,这个肯定没问题;
#include<reg51.h>
sbit LED=P2^7;
sbit key = P1^0;
void main()
{
LED=0;
key=1;
while(1)
{
if(key==0)
{
while(!key);
LED=!LED;
}

}
}

KEIL C的IO管脚定义判断一般需要单独定义变量进行赋值
应为
#include<reg51.h>
sbit LED=P2^7;
sbit KEY=P1^0;
void main()
{
while(1)
{
if(KEY==0){LED=1;}//养成加大括号的好习惯
if(KEY==1){LED=0;}//养成加大括号的好习惯
}
}

应该是你键盘防抖动没有做,导致你按下键盘的时候会出现不稳定的高低电平
你在键盘那添加
while(key==1)
{
延时一会(自己做在这写个延时程序 大概要它5 us左右就够了)
while(key==1)
LED=0;
}

是你的程序有问题,P1^0==0这个语句是写端口,51的单片机是不能直接写端口的,你再定义一个sbit KEY=P2^7,然后程序改成if (KEY==0) LED=1;
if (KEY==1) LED=0; 就可以了,预定义以后就会编译成写寄存器的汇编了

proteus换个电路试试啊~