本帖最后由 wulin 于 2018-3-2 13:33 编辑
仿真软件里的元件都是按理想状态使用的,有没有防抖语句无所谓,你按一次出现多次计数是你的程序缺陷。单片机的电源、地、复位及外部晶振都是默认存在,不需要画出来,你的图画错了,地线标志要放在两个振荡电容之间。想要改变晶振频率只要在单片机属性里修改即可,不信你试试这个程序。把注释掉的防抖语句添加回去效果还是一样的,但在实际电路中必须要防抖。#include <AT89X52.H>
#define uint unsigned int //宏定义变量uint为无符号整型数据
#define uchar unsigned char //宏定义变量uchar为无符号字符型数据
sbit key=P3^0; //按键端口定义
uchar code table[]={ //共阳数码管段码0~F
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar i; //按键计数变量
bit key_sign=0; //按键有效标志
//uchar count=0; //消抖计数变量
void main()
{
while(1)
{
if(key==0) //检测按键如果为0
{
// count++; //消抖计数
// if(count>=250)
// {
if(key_sign==0)
{
key_sign=1; //按键有效标志置1,防止重复计数
i++;
if(i>=16)
i=0;
}
// }
}
else //按键抬起
{
key_sign=0; //按键有效标志清0
// count=0; //消抖计数清0
}
P2=table;
}
}
|